Git Product home page Git Product logo

motion-track's Introduction

MOTION TRACK - Windows, Unix, Raspberry Pi Demo

Uses python2/3, Opencv2/3 to do Real Time x,y tracking of largest moving object in camera view.

Motion Track Demo YouTube Video

Introduction

I did quite a bit of searching on the internet, GitHub, etc, but could not at the time find a similar python picamera implementation that returns x,y coordinates of the most dominate moving object in the frame although some came close.

Prerequisites

Requires a Raspberry Pi computer with a Web Camera or RPI Camera Module and Recent Raspbian
or
MS Windows, Unix computer with a Web Camera with recent python installed

If you wish to use a web camera that is plugged into a usb port. Set WEBCAM = True in config.py otherwise, WEBCAM = False will use a connected raspberry pi camera module video stream. When running under Windows or a non RPI unix distro import of pi-camera python libraries will fail and Web camera setting WEBCAM = True will automatically be configured.

The Raspberry Pi or Debian dependencies and code files can be installed per the motion-track-install.sh curl script below.
if you are using MS Win or Non Debian Unix Repo, select the GitHub Clone or download green button at top right of web page and select desired method.

Quick Install or Upgrade

Easy Install of motion-track-demo onto Debian or Raspberry Pi Computer with latest Raspbian.

Step 1 With mouse left button highlight curl command in code box below. Right click mouse in highlighted area and Copy.
Step 2 On RPI putty SSH or terminal session right click, select paste then Enter to download and run script.

curl -L https://raw.github.com/pageauc/motion-track/master/motion-track-install.sh | bash

Command above will install all code and dependencies
Note - a raspbian sudo apt-get update and upgrade will be performed as part of install so it may take some time if these are not up-to-date

Manual Install

From logged in RPI SSH session or console terminal perform the following.

wget https://raw.github.com/pageauc/motion-track/master/motion-track-install.sh
chmod +x motion-track-install.sh
./motion-track-install.sh

How to Run

Default is console only display. Use Nano or text editor to Edit config.py variable window_on = True to display the opencv tracking window on GUI desktop. See other variables and descriptions for additional variable customization settings. From SSH session, console or GUI desktop terminal session execute the following commands

cd ~/motion-track-demo
./motion-track.py

On Windows make sure you have the latest python installed from https://www.python.org/downloads/ Run motion-track.py from IDLE or if file association exists it can also be run from cmd prompt by double clicking on motion-track.py. Use a text editor to modify config.py to view opencv window(s) and set other configuration variables.

Trouble Shooting

if you get an opengl error then see this article about installing opengl on
a RPI P2 https://www.raspberrypi.org/blog/another-new-raspbian-release/

Otherwise install opengl support library per following command then reboot.

sudo apt-get install libgl1-mesa-dri

Edit the config.py file and set variable window_on = True so the opencv status windows can display camera motion images and a circle marking x,y coordinates as well as the threshold images. The circle diameter can be change using CIRCLE_SIZE variable. You can set window_on = False if you need to run from SSH session. If debug= True then status information will be displayed without a GUI desktop session.

Credits

Some of this code is based on a YouTube tutorial by
Kyle Hounslow using C here https://www.youtube.com/watch?v=X6rPdRZzgjg

Thanks to Adrian Rosebrock jrosebr1 at http://www.pyimagesearch.com
for the PiVideoStream Class code available on github at
https://github.com/jrosebr1/imutils/blob/master/imutils/video/pivideostream.py

motion-track.py

Motion Track Demo - Basic concept of tracking moving objects. This Demo program detects motion in the field of view and uses opencv to calculate the largest contour above a minimum size and return its x,y coordinate.

Track Multiple Objects

This code example only tracks the largest moving object since it is done in real time. If you are interested in tracking multiple objects you might want to take a look at this github repo for multitracker code example.
https://github.com/opencv/opencv_contrib/blob/master/modules/tracking/samples/multitracker.py My suggestion would be to cut contours and pass this as the ROI (Rectangle of Interest). Read the issues on this since there will be issues regarding objects that leave, enter and stop that will need to have new ROI's initialized.

Project links

---------- Other Projects of Mine Based on Motion Tracking ------------

track-inout.py

Track Enter and Leave Activity that cross a vert or horiz center line This project Runs on Windows or Unix using Web Cam or Raspberry Pi using Web Cam or pi camera module and Uses Python2/3, OpenCV2/3 to track motion and record object enter or leave camera view when they cross a trigger centerline. Has options to take image and/or record data in a csv file

speed-camera.py

Windows, Unix vehicle (object) speed camera using motion tracking Tracks vehicle speeds or other moving objects in real time and records image and logs data. Now improved using threading for video stream and clipping of area of interest for greater performance.

cam-track.py

Tracks camera pan/tilt motion position based on opencv template matching Uses a clipped search image rectangle to search subsequent video stream images and returns the location. Can be used for tracking camera x y movements for stabilization, robotics, Etc.

hotspot-game.py

A simple motion tracking game with motion activated menus The game play involves motion tracking of body motion (hands) to get as many hits as possible inside shrinking boxes that randomly move around the screen. Position the camera so you can see body motions either close or standing. Pretty simple but I think kids would have fun with it and they just might take a look at the code to see how it works, change variables or game logic.

sonic-track.py

Send Motion Tracking Data to Sonic Pi to play notes and/or music samples This demo app sends camera motion tracking data to the sonic-pi music program. sonic-track sends data to sonic-pi via psonic.py and pythonosc. You will need a pi camera and a powered speaker connected to the Raspberry Pi audio/video plug via appropriate cables or you can attach RPI to an HDMI TV via HDMI cable and sound will redirect to TV speakers.

----------------------------------------------------------------------------

Have Fun Claude Pageau
YouTube Channel https://www.youtube.com/user/pageaucp
GitHub Repo https://github.com/pageauc

motion-track's People

Contributors

apexskier avatar pageauc avatar rvdende avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

motion-track's Issues

Fonts missing in installation instructions

Thanks for all the work on this project. I just wanted to give it a try but first had to

apt-get install fonts-freefont-ttf

before the calibration images were saved. Otherwise, the program crashed.

Moving direction

Hi @pageauc,

you compared your script with this one https://github.com/gregtinkers/carspeed.py but does your script analyze the direction too? I tried yours but get strange results if the vehicle moves from LTR, RTL works good - another point is the distance from the vehicles from LTR, we would need a diffrent value for image view ft would differ 1 to 3 meters. Maybe the distance is too short? Got only 13,5 meter.

best regards
andreas

Speed2.py Updated to version 2.08

speed2.py at https://github.com/pageauc/motion-track/tree/master/speed-track-2 now crops the video stream image2 to a predefined motion area rectangle and sends smaller array to opencv for greyscale motion contour processing. This means only the smaller cropped image array needs to be searched for motion contours thus increasing processing speed. Also added and reorganized config.py variables allowing for better control of image fonts, opencv gui window font size Etc.

The opencv gui window display includes the cropped rectangle window. With video streaming, threading and cropping the speed is quite impressive considering the original code ran around 12-15 fps on a single core in SSH terminal mode. Now it runs at approx 87 fps on a RPI B with B+ quadcore running well over 200 fps and RPI3 with V2 camera reporting well over 300 fps. Code should be python3 as well as python2 compatible although I have not tested under python3 due to the need to compile opencv for python3. Have run this code under python2 for quite a while and it seems pretty stable as long as the video FPS is kept reasonable otherwise threading may fail. Increasing value too much can actually slow processing as well. The V2 camera module seems to accept higher values at the same video image size. If you run 2.08 under python3 please drop me a line to let me know if it runs OK or if there are issues.
Thanks Claude ...

Variables not consistent in script/doc

there is some confusion because in config is
IMAGE_VIEW_FT = 72 # Set the width in feet for the road width that the camera width sees

But mostly it is described as
Readme.md:* Use formula below to calculate a value for IMG_VIEW_FT variable

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.