OpenCV is an open source computer vision package based on Python. In this post, we are going to detail the steps to install OpenCV on pcDuino. Two examples are given, one is used to capture an image through the USB camera, the other is to use OpenCV to to face recognition.
Installation Steps:
$ sudo apt-get -y install build-essential cmake cmake-qt-gui pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools $sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev python-numpy libpython2.6 python2.6-dev libgtk2.0-dev pkg-config $sudo apt-get install libopencv-dev python-opencv $sudo apt-get install python-dev $sudo apt-get install libpython2.7 python2.7-dev $sudo apt-get install python-setuptools python-pip $sudo ln -s /usr/lib/arm-linux-gnueabihf/libjpeg.so /usr/lib $sudo ln -s /usr/lib/arm-linux-gnueabihf/libfreetype.so /usr/lib $sudo ln -s /usr/lib/arm-linux-gnueabihf/libz.so /usr/lib $sudo easy_install PIL $sudo pip install -v PIL
If the above comand shows error:
root@ubuntu:/home/ubuntu# sudo pip install -v PIL Requirement already satisfied (use --upgrade to upgrade): PIL in /usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-armv7l.egg Cleaning up...
Change the command to:
$sudo pip install -v PIL --upgrade
Example 1: Capture Image using OpenCV
#!/Users/brent/.virtualenvs/lumber/bin/python
import cv
cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
camera_index = 0
capture = cv.CaptureFromCAM(camera_index)
gx = gy = 1
grayscale = blur = canny = False
def repeat():
global capture #declare as globals since we are assigning to them now
global camera_index
global gx, gy, grayscale, canny, blur
frame = cv.QueryFrame(capture)
# import pdb; pdb.set_trace()
if grayscale:
gray = cv.CreateImage(cv.GetSize(frame), frame.depth, 1)
cv.CvtColor(frame, gray, cv.CV_RGB2GRAY)
frame = gray
if blur:
g = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, frame.channels)
cv.Smooth(frame, g, cv.CV_GAUSSIAN, gx, gy)
frame = g
if grayscale and canny:
c = cv.CreateImage(cv.GetSize(frame), frame.depth, frame.channels)
cv.Canny(frame, c, 10, 100, 3)
frame = c
cv.ShowImage("w1", frame)
c = cv.WaitKey(10)
if c==ord('='): #in "n" key is pressed while the popup window is in focus
gx += 2
gy += 2
elif c == ord('-'):
gx = max(1, gx-2)
gy = max(1, gy-2)
elif c == ord('x'):
gx += 2
elif c == ord('X'):
gx = max(1, gx-2)
elif c == ord('q'):
exit(0)
elif c == ord('b'):
blur = not blur
elif c == ord('g'):
grayscale = not grayscale
elif c == ord('c'):
canny = not canny
while True:
repeat()
Sample 2: Face Recognition
Input Image:

Download the above image and save as “opencv_in.jpg”
Output Image:

Test:
#!/usr/bin/env python
#coding=utf-8
import os
from PIL import Image, ImageDraw
import cv
def detect_object(image):
grayscale = cv.CreateImage((image.width, image.height), 8, 1)
cv.CvtColor(image, grayscale, cv.CV_BGR2GRAY)
cascade = cv.Load("/usr/share/opencv/haarcascades/haarcascade_frontalface_alt_tree.xml")
rect = cv.HaarDetectObjects(grayscale, cascade, cv.CreateMemStorage(), 1.1, 2,
cv.CV_HAAR_DO_CANNY_PRUNING, (20,20))
result = []
for r in rect:
result.append((r[0][0], r[0][1], r[0][0]+r[0][2], r[0][1]+r[0][3]))
return result
def process(infile):
image = cv.LoadImage(infile);
if image:
faces = detect_object(image)
im = Image.open(infile)
path = os.path.abspath(infile)
save_path = os.path.splitext(path)[0]+"_face"
try:
os.mkdir(save_path)
except:
pass
if faces:
draw = ImageDraw.Draw(im)
count = 0
for f in faces:
count += 1
draw.rectangle(f, outline=(255, 0, 0))
a = im.crop(f)
file_name = os.path.join(save_path,str(count)+".jpg")
# print file_name
a.save(file_name)
drow_save_path = os.path.join(save_path,"out.jpg")
im.save(drow_save_path, "JPEG", quality=80)
else:
print "Error: cannot detect faces on %s" % infile
if __name__ == "__main__":
process("./opencv_in.jpg")
Save the above code to a file named opencv_test.py. After we run it, it will create a directory named opencv_in_face, and save the result pictures in that directory.

Leave a Reply
You must be logged in to post a comment.