Wykrywanie twarzy na zdjęciach - OpenCV w akcji
28 April 2009
Comments
OpenCV to wieloplatformowa otwarta biblioteka do obróbki obrazu. Za jej pomocą można m.in. wykrywać twarze na zdjęciach. Staje się to łatwiejsze gdy użyjemy API dla Pythona. Poniżej przykładowy skrypt testujący skuteczność OpenCV przy wykrywaniu twarzy.
import sys, os
from opencv.cv import *
from opencv.highgui import *
import Image, ImageDraw
def tescv():
files = os.listdir('./')
for i in files:
if i.endswith('jpg'):
print i
image = cvLoadImage(i)
grayscale = cvCreateImage(cvSize(image.width, image.height), 8, 1)
cvCvtColor(image, grayscale, CV_BGR2GRAY)
storage = cvCreateMemStorage(0)
cvClearMemStorage(storage)
cvEqualizeHist(grayscale, grayscale)
cascade = cvLoadHaarClassifierCascade('/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml', cvSize(1,1))
faces = cvHaarDetectObjects(grayscale, cascade, storage, 1.2, 2,
CV_HAAR_DO_CANNY_PRUNING, cvSize(50,50))
ret = []
if faces:
for f in faces:
ret = []
im = Image.open(i)
draw = ImageDraw.Draw(im)
wsp = '%s, %s / %s, %s' % (str(f.x), str(f.x+f.width), str(f.y), str(f.y+f.height))
print '%s: %s' % (i, wsp)
draw.rectangle(((f.x, f.y), (f.x+f.width, f.y+f.height)), fill=5)
del draw
# write to stdout
im.save(i, "JPEG")
ret.append([f.x, f.y, f.x+f.width, f.y+f.height])
print ret
tescv()
RkBlog
Comment article