圖像識別 python+opencv的簡單人臉識別


#
源碼如下:

#!/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("/opt/local/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))

        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("/Users/zhangdebin/Documents/checkFace2.jpg")

示例圖片1:
checkFace1.jpg
識別結果
可以看出,對於比較干凈的人臉頭像,使用opencv庫haarcascade_frontalface_alt_tree.xml的識別精度很高(這張達到了100%),同時,對於表情變化的人臉也有很強的魯棒性。
示例圖片2:
checkFace2.jpg
識別結果
但是,對於上傳的比較隨意的頭像照片,比如示例圖片2這些有帽子、眼鏡遮擋的人臉圖片,識別效果就會很差,本組只有唯一一個沒有帽子遮擋的人臉被識別成功

本次只是簡單的測試了下,python使用opencv庫的人臉特征進行人臉識別的效果,僅供初學參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM