目的
运用opencv实现人脸的区域检测, 基于opencv的算法
步骤
导入算法模型
不需要去网上下载,还需要积分,直接在opencv的目录下就可以找到
我的目录是:D: \soft\anaconda3\Lib\site- packages\cv2
读取视频
def video_detect ( filename) :
cap = cv2. VideoCapture( filename)
while cap. isOpened( ) :
if not cap:
print ( 'video is not input, error' )
break
ret, frame = cap. read( )
if not ret:
print ( 'read is over' )
break
out = StaticDetect( frame)
cv2. imshow( 'video-face' , out)
k = cv2. waitKey( 1000 // 60 )
if k == 27 :
break
cap. release( )
cv2. destroyAllWindows( )
处理单张图
def StaticDetect ( img) :
face_cascade = cv2. CascadeClassifier( haar_front_face_xml)
gray_img = cv2. cvtColor( img, cv2. COLOR_BGR2GRAY)
faces = face_cascade. detectMultiScale( gray_img, 1.3 , 5 )
for ( x, y, w, h) in faces:
img = cv2. rectangle( img, ( x, y) , ( x + w, y + h) , ( 255 , 0 , 0 ) , 2 )
方法调用
video_detect( './videos/face.mp4' )
效果
扩展
接下来可以用cnn等算法来识别人脸,判断是不是同一个人
完整代码
import cv2
import numpy as np
haar_front_face_xml = 'libs/haarcascade_frontalface_default.xml'
haar_eye_xml = 'libs/haarcascade_eye.xml'
def StaticDetect ( img) :
face_cascade = cv2. CascadeClassifier( haar_front_face_xml)
gray_img = cv2. cvtColor( img, cv2. COLOR_BGR2GRAY)
faces = face_cascade. detectMultiScale( gray_img, 1.3 , 5 )
for ( x, y, w, h) in faces:
img = cv2. rectangle( img, ( x, y) , ( x + w, y + h) , ( 255 , 0 , 0 ) , 2 )
return img
def video_detect ( filename) :
cap = cv2. VideoCapture( filename)
while cap. isOpened( ) :
if not cap:
print ( 'video is not input, error' )
break
ret, frame = cap. read( )
if not ret:
print ( 'read is over' )
break
out = StaticDetect( frame)
cv2. imshow( 'video-face' , out)
k = cv2. waitKey( 1000 // 60 )
if k == 27 :
break
cap. release( )
cv2. destroyAllWindows( )
video_detect( './videos/face.mp4' )