开源中文网

您的位置: 首页 > 编程开发 > python > 正文

Python+OpenCV人脸识别技术详解

来源: 网络整理  作者: 佚名

总在科幻电影里看到人脸识别,现在我们也可以编程来实现啦。哈哈~~
OpenCV是Intel®开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV 拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。它还提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方

面的很多通用算法。

所以总体来说OpenCV的人脸检测功能在是很不错的。

效果图如下:
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" style="border: none; vertical-align: middle; color: rgb(0, 0, 0); font-family: 'Microsoft Yahei', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 26px; width: 375px; height: 357px;" />

下面我们就用python + OpenCV实现人脸识别。

开发运行环境:
Centos5.5
OpenCV
python2.7
PIL

下面上代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# face_detect.py
 
# Face Detection using OpenCV. Based on sample code from:
# http://www.pythontab.com
 
# Usage: python face_detect.py
 
import sys, os
#引入opencv库中的相应组件
from opencv.cv import *
from opencv.highgui import *
#引入PIL库
from PIL import Image, ImageDraw

from math import sqrt
 
def detectObjects(image):
    #首先把图片转换为灰度模式,以便找到人脸位置
    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\')

代码到此结束,上面的例子看不懂,没关系,因为我们大量使用了库里面的函数和方法,如果看不懂,我们可以去网上查或者使用手册,只要借助这些看懂这段代码就ok,重要的是掌握其中的人脸识别实现思想

Tags:OpenCV
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明