Table of contents generated with markdown-toc
Using a Raspberry Pi and a camera module for computer vision with OpenCV (and TensorFlow Lite). The aim of this project is to provide a starting point of using RPi & CV in your own DIY / maker projects. Computer vision based on cameras is very powerful and will bring your project to the next level. This allows you to track complicated objects that would otherwise not be possible with other type of sensors (infrared, ultrasonic, LiDAR, etc).
Note the code is based on Python and OpenCV meaning it is cross-platform. You can run this on other Linux-based platforms as well, e.g. x86/x64 PC, IPC, Jetson, Banana Pi, LattaPanda, BeagleBoard, etc.
This project is dependent on the following packages:
Currently the following applications are implemented:
src/camera-test
: Test if the camera is workingsrc/motion-detection
: Detect any motion in the framesrc/object-tracking-color
: Object detection & tracking based on colorsrc/object-tracking-shape
: Object detection & tracking based on shapesrc/object-tracking-feature
: Object detection & tracking based on features using ORBsrc/face-detection
: Face detection & trackingTest the RPi and OpenCV environment. You are expected to see a pop-up window that has video streams from your USB camera if everything is set up correctly. If the window does not appear, you need to check both of (1) your environment; (2) camera connection.
Detect object movements in the image and print a warning message if any movement is detected. This detection is based on the mean squared error (MSE) of the difference between two images.
Track an object based on its color in HSV and print its center position. You can choose your own color by clicking on the object of interest. Click multiple times on different points so a full color space is coveraged. You can hard code the parameter so you don't need to pick them again for the next run. The following demo shows how I track a Nintendo game controller in real-time:
Detect and track round objects using HoughCircles(). Support of sqaures is coming soon.
Detect and track an object using its feature. The algorithm I selected here is ORB (Oriented FAST and Rotated BRIEF) for its fast calculation speed to enable real-time detection. To use the example, please prepare an Arduino UNO board in hand (or replace the simple.png
).
Detecting face using Harr Cascade detector.
(ongoing) Use TensorFlow Lite to recognise objects.
sudo apt-get install libopencv-dev
sudo apt-get install libatlas-base-dev
pip3 install virtualenv Pillow numpy scipy matplotlib
pip3 install opencv-python opencv-contrib-python
wget https://github.com/PINTO0309/Tensorflow-bin/raw/master/tensorflow-2.1.0-cp37-cp37m-linux_armv7l.whl
pip3 install --upgrade setuptools
pip3 install tensorflow-2.1.0-cp37-cp37m-linux_armv7l.whl
pip3 install -e .
Run scripts in the /src
folder by: python3 src/$FOLDER_NAME$/$SCRIPT_NAME$.py
To stop the code, press the ESC
key on your keyboard.
Changing the resolution will significantly impact the FPS. By default it is set to be 320 x 240
, but you can change it to any value that your camera supports at the beginning of each source code (defined by IMAGE_WIDTH
and IMAGE_HEIGHT
). Typical resolutions are:
Q1: Does this support Nvidia Jetson?
A1: Yes. I have tested with my Jetson Nano 4GB.
Q2: Does this support the Raspberry Pi camera?
A2: Not at the moment but I will do it later (if this is not that difficult).
Q3: Does this support Raspberry Pi 5?
A3: This is not tested (as I haven't received my Pi 5 yet) but it should work out of the box.
© This source code is licensed under the MIT License.