#
源碼如下:
#!/usr/bin/env python#coding=utf-8import osfrom PIL import Image, ImageDrawimport cvdef 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 resultdef 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" % infileif __name__ == "__main__": process("/Users/zhangdebin/Documents/checkFace2.jpg")示例圖片1:

可以看出,對于比較干凈的人臉頭像,使用opencv庫haarcascade_frontalface_alt_tree.xml的識別精度很高(這張達到了100%),同時,對于表情變化的人臉也有很強的魯棒性。
示例圖片2:

但是,對于上傳的比較隨意的頭像照片,比如示例圖片2這些有帽子、眼鏡遮擋的人臉圖片,識別效果就會很差,本組只有唯一一個沒有帽子遮擋的人臉被識別成功
本次只是簡單的測試了下,python使用opencv庫的人臉特征進行人臉識別的效果,僅供初學參考。
總結
以上就是本文關于python+opencv實現的簡單人臉識別代碼示例的全部內容,希望對大家有所幫助,感興趣的朋友可以參閱本站:
python圖像常規操作
在Python web中實現驗證碼圖片代碼分享
Python生成數字圖片代碼分享
如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
新聞熱點
疑難解答