记一次使用opecv实行realtime人脸检测的实例
(如需转载,请标注
**
先来看一下效果图吧。
当然了这是静态的,之后会转移到实现realtime的问题上,其实relatime的实现也是同样的道理,不过是将动态分解每一帧的静态来处理。
先附上静态处理的代码。
import cv2
import dlib
path = "输入你要处理的图像的位置"
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#转为灰度图
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(
'D:\\realsense_window\\CNN-Facial-Expression-Recognition\\data\\shape_predictor_68_face_landmarks.dat')
detects = detector(gray, 1)
for face in detects:
shape = predictor(img, face)
for part in shape.parts():
part_pos = (part.x, part.y)
cv2.circle(img, part_pos, 2, (0, 255, 0), 1)
cv2.imshow("image", img)#以名称为image的窗口显示处理后的图像
cv2.waitKey(0)
cv2.destroyAllWindows()
文末会分享下这里的shape_predictor_68_face_landmarks.dat文件,用于在检测到的人脸上打上68个特征点的文件。
再来看动态的…
#引入所需要的库,其中cv2用来调用摄像头,dlib用来打点,os用来控制存储,Image方便对图像进行操作
import cv2
import dlib
import os
from PIL import Image
#facecascade,级联器,用于检测人正脸frontal_face
faceCascade = cv2.CascadeClassifier(
'D:\\realsense_window\\facial_emotion_recognition-master\\haarcascade_frontalface_alt2.xml')
#打开摄像头
video_capture = cv2.VideoCapture(0)
#由于是实时的,照片其实是按frame跑,所以一直执行
while True:
ret, frame = video_capture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2, 5)#对一帧照片选择ROI(region ofinterest),
#(x,y)是顶点位置,(x+w,y+h)选择好图像大小,(255,0,0)《=》(B,G,R),2 and 5 means the thickness of the outline and the linetype individually.
face_crop = frame[x:x + w, y:y + h]#选择ROI
#face_crop = cv2.resize(face_crop, (48, 48))#调整大小为48*48,这里只是博主个人需要
#face_crop = cv2.cvtColor(face_crop, cv2.COLOR_BGR2GRAY)#转为gray
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(
'D:\\realsense_window\\CNN-Facial-Expression-Recognition\\data\\shape_predictor_68_face_landmarks.dat')
dets = detector(gray, 1)
#对单个frame进行操作
for face in dets:
shape = predictor(frame, face)
for part in shape.parts():
part_pos = (part.x, part.y)
cv2.circle(frame, part_pos, 2, (0, 255, 0), 1)
cv2.imshow("video_capture", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):#按q退出,注意,由于while,无法以关闭摄像头的方式停止程序
break
video_capture.release()
cv2.destroyAllWindows()
1.
**首先是下载好opecv这个库了。
推荐一个网络大牛整理的pythonlib网址可以下载各种python第三方库的wheel文件。
https://www.lfd.uci.edu/~gohlke/pythonlibs/
按照自己电脑上的python对应版本下载好对应的opencv版本。
例如本人电脑上的python版本是python3.7,下载的就是opencv_python-3.4.7-cp37-cp37m-win_amd64.whl文件。
下载好之后,将文件保存到C:/user/###/文件夹下,此处的###对应的是用户电脑的个人的文件夹,例如:C:/user/mike之类的。
同时按下win+R健,输入cmd,输入pip install *******.whl,等待其自动安装,安装完毕之后就可以通过python使用opencv了。
(或许有人的电脑上在装了python的同时也装了anaconda,注意一下直接使用pip install是默认装在conda的环境下,所以呢,要多做点小事儿…
1.打开文件管理器,找到python安装的位置,默认是在
C:/user/###/AppData/Local/Programs/Python/python37/文件夹下
2.然后呢,将里面的python.exe和pythonw.exe改下名字
例如:
3.之后在安装opencv的时候这样干
这样就将opencv安装到python的第三方库site-packages里了。
)
**
2.
接下来还有…
安装一下pillow这个第三方库,pillow其实是python3中对于PIL的称呼,调用时是通过PIL来调用
from PIL import Image
Image这个库对于图像处理很有用
安装方式同样是在之前的网址上找到pillow下载对应版本,然后以同样的方式安装即可。
**
关于dlib这个库,首先确保电脑上有已安装好的c和c++的编译环境,有DEV-C++的同学可以直接在DEV-C++的文件夹下找到MinKW这个库的bin并添加环境变量。
1).安装cmake
可以直接pip install cmake
2).安装boost
下载boost的whl文件同样方式安装。
去dlib的官网下载好后安装即可。
链接: https://pan.baidu.com/s/1w6KPonO0lSjNnQl3LU5uXg 提取码: 65ft