python+opecv+dlib进行实时人脸表情检测

记一次使用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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值