pycon 2012: militarizing your backyard: computer vision and the squirrel hordes

27
Militarizing Your Backyard With Python: Computer Vision and the Squirrel Hordes Kurt Grandis PyCon 2012

Upload: kgrandis

Post on 17-May-2015

28.663 views

Category:

Sports


0 download

TRANSCRIPT

Page 1: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Militarizing Your Backyard With Python:

Computer Vision and the Squirrel Hordes

Kurt GrandisPyCon 2012

Page 2: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Overview

● Background & Goals● OpenCV

○ Working with Python● Detecting Squirrels

○ SVMs○ Squirrely features

● Shooting Squirrels● Wet Squirrels● Next Steps

Page 3: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

The Great Backyard Bird Count

http://www.birdsource.org/gbbc/

Page 4: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Squirrels...

Page 5: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Sentry Water Gun

http://wiki.teamfortress.com/wiki/Sentry_Gun

Page 6: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

System

Sensor (Camera) Blob Detection

Squirrel Detection

Targeting Shoot the Squirrel

Page 7: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

OpenCV

Open Source Computer Vision● Image Processing● Video Analysis● Feature Detectors● Object Detection C, C++, Python Interfaces http://opencv.willowgarage.com/wiki/http://code.opencv.org

Page 8: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Python & OpenCV

● Support for native Python structures● Works with numpy● Efficient data sharing

Page 9: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Sensor : Webcam

Page 10: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

OpenCVimport cv cv.NamedWindow("camera raw", 1)capture = cv.CreateCameraCapture(0)img = cv.QueryFrame(capture)cv.ShowImage("camera raw", img)

# Convert to Gray Scalegray = cv.CreateImage(cv.GetSize(img), cv.IPL_DEPTH_8U, 1)cv.CvtColor(img, gray, cv.CV_BGR2GRAY) # Canny Edge Filtercv.Canny(gray, edges, 50, 200, 3)

Page 11: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Blob Detection

How do I find regions of interest (i.e. Blobs)?● Birds● Squirrels● Neighbor Children cvBlobsLib http://opencv.willowgarage.com/wiki/cvBlobsLib

cvFindContours (OpenCV function)

Page 12: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Background Subtraction

Foreground Segmentation Noisy Background Codebook Approach

Page 13: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Squirrel Detection

Page 14: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Support Vector Machines (SVMs)

Supervised Learning Classification Features libsvm http://www.csie.ntu.edu.tw/~cjlin/libsvm/

from svm import * ... c = my_trained_model.predict(vector)

Page 15: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Squirrely Features

What is squirrel-ness? ● blob size● histogram analysis of blob● entropy of blob (texture)

Page 16: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Blob Size

Page 17: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Color Histogram

Page 18: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Entropy

h_prob = [ h / histo_sum for h in histogram ] entropy = -sum( [p * math.log(p) for p in h_prob

if p != 0] )

Measure of randomness Calculate entropy for regions of the blob

● Overall Entropy● Stdev Entropy● Left Mean Entropy - Right Mean Entropy

Page 19: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

SVM & Classifing Blobs

● blob size● color histograms● entropy of blob (texture)

Classify!

Page 20: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Shoot the Squirrel

Page 21: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

The Gun

Page 22: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

The Turret

Page 23: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Python and Arduino

Arduino Uno pyserial Project Sentry Gunhttps://sites.google.com/site/projectsentrygun/

Python-On-A-Chiphttp://code.google.com/p/python-on-a-chip/

import serial arduino = serial.Serial(device, BAUD_RATE) arduino.write("a")

Page 24: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Results

● Squirrels get wet● False positives extremely low● More satisfying if it camps the feeder● Need stronger firepower● Need larger water reservoir● Squirrels are extremely persistent...no really

Page 25: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes
Page 26: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Next Steps

● Better Optics● Stronger Firepower

○ Laminar water jet○ Pressurized water pump

● Python-On-A-Chip ● Bird Classifier & Counter

Page 27: PyCon 2012: Militarizing Your Backyard: Computer Vision and the Squirrel Hordes

Questions?

[email protected]@kgrandis http://kurtgrandis.com/ no animals were harmed in the development of this project. Bird seed and other snacks were provided to all participants free of charge.