python+opencv实现人脸检测

前言

计算机视觉是人工智能领域中的一个重要分之,传统的安防监控越来越智能化,不仅仅要求简单的移动侦测,还要求能检测人脸。目前实现人脸检测解决方案主要分为两种,一种是依靠大型服务器来实现,它的特点是计算能力强,同时依赖强大的人脸数据库可以运行相关算法将捕获到的人脸进行精准识别;另一种是依赖于嵌入式硬件运行在设备终端,比如海思Hi3559A之类的芯片,它的一个特点就是利用特定的硬件设计,将复杂的图像矩阵运算用硬件实现(硬解码),加快运算速度,这种方案可以实现简单的人脸检测功能。

背景知识

OpenCV(Open Source Computer Vision Library)是一个开源跨平台计算机视觉库。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。利用OpenCV类库可以构建我们机器视觉应用,很方便地从视频流中检测识别人脸,此外它也是一个功能齐全的图像处理类库,将图像的数据转换为RGB数据,进而利用各种滤波算法、局部增强算法实现图像的美颜、去燥等。

Python就不用多介绍了,一门高性能数据处理语言,能以命令行或脚本方式运行,对数据处理十分得心应手,主要依赖它丰富的类库支持,与matlab相娉美。图像数据处理本来就是一项繁杂的数学运算(矩阵),对于高维度的矩阵运算CPU是比GPU弱的,python集成了相关算法,使我们更专注于上层应用的开发,缩短研发周期。

简单人脸检测样例

样例下载

运行环境: Ubuntu16.04

编程语言: python

视频流: IPC的RTSP流(采用低分辨率的3码流,降低运算复杂度,提升实时性)

#! /usr/bin/python
import cv2
import random 

#video source,it can be rtsp or local file
cap = cv2.VideoCapture("rtsp://admin:[email protected]:554/02")
#face detect data model
classifier = cv2.CascadeClassifier( "./haarcascade_frontalface_default.xml" )
#draw face detect area color
color = (0,255,0)
ret,frame = cap.read()
while ret:
    ret,frame = cap.read()
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    faceRects = classifier.detectMultiScale( gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
    if len(faceRects):
      for faceRect in faceRects:
        x,y,w,h = faceRect
        cv2.rectangle(frame,(x,y),(x+h,y+w),color,2)
        filename = str(random.randint(10000,100000))
        filename += '.jpg'
        cv2.imwrite(filename,frame)
    cv2.imshow("frame",frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()
cap.release()

总结

Python中对图像处理简直简单到难以让人置信,它省去的图像的编码解码等繁杂易错的环节,提供了统一的编程接口,简直是程序员的福音啊,试想用C/C++开发的话的要一系列的代码编写、编译、运行、调试,简直太烦了有没有,此外python还可以对图像进行一些滤波、补偿、去噪处理,自己就可实现图片的美颜,简直就是撩妹神技,记2018年末于广州。

参考:http://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html (KNN算法等数学解析)

 

猜你喜欢

转载自blog.csdn.net/dosthing/article/details/85421312