PythonTip >> 博文 >> python

python+OpenCV进行人脸检测

zihua 2014-04-13 15:04:57 点击: 735 | 收藏


    OpenCV的人脸检测功能在一般场合还是不错的。而ubuntu正好提供了python-opencv这个包,用它可以方便地实现人脸检测的代码。

    写代码之前应该先安装python-opencv:

$ sudo apt-get install python-opencv

    具体原理就不多说了,可以参考一下 这篇文章 。直接上源代码。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# face_detect.py

# Face Detection using OpenCV. Based on sample code from:
# http://python.pastebin.com/m76db1d6b

# Usage: python face_detect.py 

 

import sys, os
from opencv.cv import *
from opencv.highgui import *
from PIL import Image, ImageDraw
from math import sqrt

def detectObjects(image):
	"""Converts an image to grayscale and prints the locations of any faces found"""
	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.1, 2,
		CV_HAAR_DO_CANNY_PRUNING, cvSize(20,20))

	result = []
	for f in faces:
		result.append((f.x, f.y, f.x+f.width, f.y+f.height))

	return result

def grayscale(r, g, b):
	return int(r * .3 + g * .59 + b * .11)

def process(infile, outfile):

	image = cvLoadImage(infile);
	if image:
		faces = detectObjects(image)

	im = Image.open(infile)

	if faces:
		draw = ImageDraw.Draw(im)
		for f in faces:
			draw.rectangle(f, outline=(255, 0, 255))

		im.save(outfile, "JPEG", quality=100)
	else:
		print "Error: cannot detect faces on %s" % infile

if __name__ == "__main__":
	process(\'input.jpg\', \'output.jpg\')

    检测结果:

face_detect_output.jpg

原文链接:http://www.tuicool.com/articles/7zm2Ij

作者:zihua | 分类: python | 标签: python | 阅读: 735 | 发布于: 2014-04-13 15时 |