Raspberry Pi Neural Network

by 21bershe in Circuits > Raspberry Pi

3527 Views, 7 Favorites, 0 Comments

Raspberry Pi Neural Network

IMG_0460.JPG

An overview of my whole progress with the project is here:

https://sites.google.com/a/charlottelatin.net/ethan-bershad-digital-portfolio/12th-grade/advanced-senior-engineering/raspberry-pi-neural-network

A thorough daily journal documenting my progress as I completed the project is here:

https://docs.google.com/document/d/1aj25FXS11DOEBoRhBqgz7OQQo-RIIwRrkGnJXZzfTNg/edit?usp=sharing

This project is based off of this Youtube tutorial:

Much of the electronics will follow along closely, but the physical aspect is not included in the tutorial.

Supplies

PiCamera

Raspberry Pi Board (I used 3B version)

8GB SD card

HDMI cable

Ethernet cable

Power source

Keyboard

Mouse

Planks of wood

Format SD Card

IMG_0355.JPG
IMG_0369.JPG

Physical Setup

IMG_0351.JPG
IMG_0354.JPG
IMG_0353.JPG
IMG_0352.JPG

Plug in ethernet, HDMI, SD card, keyboard, mouse, and PiCamera to Raspberry Pi. Then connect power source to an outlet and HDMI to a monitor. Turn on the Pi.

Software Setup

IMG_0381.JPG

Update the Pi in the terminal by using:

sudo apt-get update

sudo apt-get dist-upgrade

Then ensure the camera is enabled in the Raspberry Pi configuration menu.

Download Repository

IMG_0383.JPG

Download GitHub repository with TensorFlow Lite scripts from https://github.com/EdjeElectronics/TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi.git and, for easier use, rename the folder it creates to tflite1 with commands:

mv TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi tflite1
cd tflite1

Install Virtual Environment

IMG_0382.JPG

Use:

sudo pip3 install virtualenv

and

python3 -m venv tflite1-env

Turn on This Environment

Use:

source tflite1-env/bin/activate

***Any time you want to turn on the neural network you will first need to issue:

cd tflite1

to be inside the folder containing the neural network followed by:

source tflite1-env/bin/activate

to make sure you are inside the virtual environment where TensorFlow is situated.

Install TensorFlow and OpenCV

The creator of the github repository created a script that downloads the packages and dependencies to make it much easier. To install TensorFlow, OpenCV, and the dependencies needed for both use:

bash get_pi_requirements.sh

Set Up TensorFlow Lite Detection Model

Here I used Google's neural network initially and then later went back and began the process of training my own network. These instructions will detail Google's network, but both options are possible at this point. To download Google's network, issue:

wget https://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip

and unzip the file with

unzip coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip -d Sample_TFLite_model

Run Neural Network

IMG_0387.JPG
IMG_0385.JPG

Finally, ensure your camera is plugged in and in the terminal issue:

python3 TFLite_detection_webcam.py --modeldir=Sample_TFLite_model

This runs the webcam script and should make a screen pop up with the neural network successfully running.

Trace Out Box

IMG_0402.JPG
IMG_0401.JPG

Note: All the steps that follow are no longer part of the Github guide

To create the box first place the Pi on a plank of wood and trace around the Pi the dimensions you want for the box. I recommend leaving some space inside the box for the camera and wires instead of a tight fit.

Create Base of Box

IMG_0403.JPG

Use a table saw to cut out the base of the box.

Attached file is a video of using the table saw to cut out a piece of wood.

Create Rabbit Joints

IMG_0431.JPG

Draw a line down the 2 longer sides and the back of the base about 1/2 of an inch from the outside. Lower the saw down to roughly 3/8 of an inch and cut from the line drawn to the edge of the base. You are not trying to cut through the wood, only to reduce the thickness in this precise area. This will likely take more than one cut. Repeat for both sides on the same side of the wood.

Create Sides of Box

Mark and cut out two identical sides for the box. Their length should be equal to the length of the base. The height of the box is a personal preference, just ensure enough space will be left for the camera in the front.

Create Sliding Top

IMG_0430.JPG

Raise the saw to 1/2 of an inch and mark out a rectangle at the top of each side. The rectangle should be the length of the box and about the width of the saw wide. Draw the top of the rectangle starting about half an inch below the top of the sides. Then cut out the rectangle.

Create Back of the Box

For the back of the box the dimensions should already be determined. The height is the height of the sides and the width is the width of the base. Cut out the back.

More Rabbit Joints

IMG_0432.JPG

Measure the width of the sides. On the back of the box draw a line along the sides and bottom this width away from the edge. Lower the saw to 3/8 of an inch again and cut the same way as in step 12 for both sides and the bottom of the back.

Assemble and Glue Box Together

At this point you should have 4 pieces of wood cut out (base, back, and two sides). Put together these pieces to get a sense of how they will fit together and align the rabbit joints to maximize points of contact. I recommend first attaching the back of the box to the base, then moving to the sides. Place wood glue along one side of each contact point then hold the pieces in place together for roughly 10 minutes or until the pieces are stuck together and you cannot wiggle them without excess force.

Begin Top of Box

IMG_0428.JPG

For the top of the box try to find a thicker piece of wood. Measure the length of the base of the box and width of the box and cut this piece of wood to fit those dimensions. Note: it's better to start out too big and then cut smaller than having to find a new piece of wood because you cut too much initially.

Make Top Slidable

IMG_0429.JPG

To make the top slidable, measure the width of the rectangle cut out on the sides of the box. On the longer sides of the top, mark slightly more than this width down from the top. For the depth of the cut, I recommend starting with 1/4 inch and then cutting more if necessary. This should leave a significant area that needs to be cut out. Make this cut.

Finish Top

The top of the box should now slide in and out of the rectangles cut in the sides. To create a level surface on top, either sand or use a saw to cut out any excess. Do not wood glue the top onto the rest of the box because it will no longer slide and allow access to the electronics inside.

Front of Box

IMG_0461.JPG

For the front of the box use a thinner piece of wood. Measure the remaining width of the base for the width of the front. For the height make sure some space is left to allow the user to pull the sliding top on and off. Cut out the front on the table saw and wood glue it to the front of the box.

Hole for Wires to Go Through

IMG_0463.JPG

Place the Raspberry Pi inside of the box and orient it so the PiCamera will face the front of the box. On the side of the box where the power source and HDMI cable will be plugged in drill out two oval holes wide enough for the cables to fit through. You do not need to drill holes for the keyboard, mouse, or ethernet. These can simply be attached through the open top and then unplugged once they are used to turn the network on.

3D-Printed Case for PiCamera

IMG_0462.JPG

Optional: 3D-print out a case for the PiCamera. Place the Camera inside the case

Hole for PiCamera (See Picture on Step 21)

On the front of the box, drill a hole the radius of the PiCamera regardless of if you are using the case. Then place the PiCamera inside the box up to the front with the camera inside of the hole. Run the webcam script from step 8 to ensure the camera's visibility is unimpeded. Take the camera/case to the inside of the front of the box and ensure it does not wiggle around as this will block the camera's view.

Run Final Code

Plug in all components except the ethernet. Run:

cd tflite1

source tflite1-env/bin/activate

python3 TFLite_detection_webcam.py --modeldir=Sample_TFLite_model

Unplug the keyboard and mouse.

Enjoy!

IMG_0386.JPG

Congratulations! You have created a portable image recognition neural network.

Feel free to test out different uses for the network!