Skynet w/ Raspberry Pi: MobileNetV2

This is the seventh entry in my 8 part series on adding some object detection to my Raspberry Pi.

Part 1: Introduction
Part 2: SD Card Setup
Part 3: Pi Install
Part 4: Software
Part 5: Raspberry Pi Camera
Part 6: Installing TensorFlow
Part 7: MobileNetV2
Part 8: Conclusion

Introduction

In this section I am going to cover MobileNetV2. This is a built in model in Keras that with a single setting I can have it be fully trained on ImageNet.

ImageNet

Using this model pre-trained on ImageNet couldn’t be any easier. I just set the ‘weights’ parameter to ‘ImageNet’ and I am off and running. It did take me some time to figure out WHAT images were used based on the labels but after that it was easy as can be.

Conclusion

Not much in this post since it was so simple!

Code: https://github.com/ehennis/Blog/tree/master/ImageDetection

Skynet w/ Raspberry Pi: TensorFlow

This is the sixth part in a multiple part series on adding some object detection to my Raspberry Pi.

Part 1: Introduction
Part 2: SD Card Setup
Part 3: Pi Install
Part 4: Software
Part 5: Raspberry Pi Camera
Part 6: Installing TensorFlow
Part 7: MobileNetV2
Part 8: Conclusion

Introduction

In this section I will go through the issues that I had while trying to install TFv2. It all comes down to the version of pip NOT recognizing the manylinux2010 tag that comes with TFv2.

Limitations

The issue comes up because TF requires pip version 19 or above so that it will recognize the manylinux20010 tag that is on the wheel download.

PIP

Manually trying to install the latest (20) version of pip causes all sorts of issues as mentioned here.

I was lucky enough to find this post about being able to upgrade pip in a virtual environment. So, that is what I did.

Virtual Environment

  • Created the virtual environment: python3 -m venv /home/pi/venv
  • Activated the environment: source /home/pi/venv/bin/activate
  • Checked pip to see that I was still on version 18: pip --version
  • Upgraded to the latest version: pip install --upgrade pip

And…. it still didn’t find it. So, I went to PyPi and downloaded the cp37 whl file and renamed it from ‘manylinux2010’ to ‘manylinux1’ which IS supported.

Still didn’t work. It turns out TF isn’t build for the ARM processors yet.

ARM TensorFlow

Since I needed to find a TF install I reached out and Leigh came to the rescue. She had a repo that she forked that had a whl file I could use. I downloaded that file and then ran an install off of it.

After all of the my next issue was the error 'load_weights' requires h5py when loading weights from HDF5.

H5PY

To solve my current issue I needed to go to the PIWheel site and install from there.

Conclusion

This project has gotten a little larger than I thought. I will continue to work through some errors and hopefully get something up and running.

Code: https://github.com/ehennis/Blog/tree/master/ImageDetection

Skynet w/ Raspberry Pi: PiCamera

This is the fifth part in a multiple part series on adding some object detection to my Raspberry Pi.

Part 1: Introduction
Part 2: SD Card Setup
Part 3: Pi Install
Part 4: Software
Part 5: Raspberry Pi Camera
Part 6: Installing TensorFlow
Part 7: MobileNetV2
Part 8: Conclusion

Introduction

In this section I will cover getting your camera all set up and running. I will be following this guide.

Camera Connection

After connecting the cable I had to go into the ‘Preferences’ and then ‘Raspberry Pi Configuration’ menu. At that point, go to the ‘Interfaces’ tab and make sure ‘Camera’ is Enabled.

After a reboot, I was able to use the command lines raspistill and raspivid to take pictures/videos of my daughter I knew everything was hooked up right.

Python Integration

Testing the code in Python is as simple as importing the camera using from picamera import PiCamera. Using that we can call camera.start_preview() and .stop_preview(). One thing to note is that since I am on VNC I won’t actually see the preview. But, I am still able to call camera.capture to validate that I can save an image.

Conclusion

Well, that is another short post about getting everything ready. I am sure I will have more changes once I get the model picked out and see what I need to change in order to feed in the input.

Code: https://github.com/ehennis/Blog/tree/master/ImageDetection

Skynet w/ Raspberry Pi: Pi Install

This is the third entry in my 8 part series on adding some object detection to my Raspberry Pi.

Part 1: Introduction
Part 2: SD Card Setup
Part 3: Pi Install
Part 4: Software
Part 5: Raspberry Pi Camera
Part 6: Installing TensorFlow
Part 7: MobileNetV2
Part 8: Conclusion

Introduction

In this section I am going to get the Raspberry Pi set up and ready to work. To do that I will be following this guide.

Starting Up

Following the Raspberry Pi guide I am going to fire this up for the first time.

First, I dig out one of my MANY extra keyboards and mice and connect those through the usb ports.
Second, I no longer have an extra monitor so I had to steal my second monitor. Another stroke of luck, I had an unopened Amazon Basics HDMI cord.
Third, on first start up I select the ‘Raspbian FULL’ option.
Finally, after some reboots and some options my Pi was ready to run

Remote Connection

In order to keep me from having to connect to my second monitor (as well as getting out my extra keyboard and mouse) I am going to enable SSH and Remote Desktop.

SSH

To enable SSH, go to the Raspberry menu -> Preferences -> Raspberry Pi Configuration. On that screen go to Interfaces and enabled SSH.

On my machine I didn’t have to install anything because OpenSSH client was already installed. If you don’t have it installed it is under ‘Optional Features’ under the Apps setting screen.

Remote Desktop

To enable SSH, go to the Raspberry menu -> Preferences -> Raspberry Pi Configuration. On that screen go to Interfaces and enabled VNC.

Now, on my main computer I need to download and install RealVNC

Conclusion

One of the awesome things about the Raspberry Pi is how easy it is to setup. It really is a 15 minute setup.

Code: https://github.com/ehennis/Blog/tree/master/ImageDetection