当前位置:   article > 正文

【python】利用opencv+openvino实现人脸检测和表情识别_openvino 人脸识别

openvino 人脸识别

简介

  • 利用opencv中训练好的模型来识别人脸
  • 利用openvino中的预训练的模型来检测表情

环境准备

  1. 安装openvino

    由于openvino最新版只支持到python3.9大版本,所以如果python版本为3.10,请再安装3.9版本,两个python版本可以共存。也可以配置到虚拟环境,不再赘述

    • 在控制台中输入以下命令, 升级pip 版本

      python -m pip install --upgrade pip
      
      • 1
    • 安装 openvino-dev

      pip install openvino-dev
      
      • 1
    • 验证安装是否成功

      mo -h
      
      • 1

      应该看到以下图片

      image-20220415163648731

      这时候相关依赖(例如opencv、numpy等)应该已经都装好,可以通过pip list 查看,若缺少相应依赖,则继续通过pip安装

    1. 下载预训练模型

      • 控制台输入以下命令

        omz_downloader --name emotions-recognition-retail-0003
        
        • 1

        这会在你当前目录下生成intel目录,emotions-recognition-retail-0003会包含在该文件夹下

      • 接着导入opencv的人脸检测模型

        进入github,https://github.com/spmallick/learnopencv

        下载整个仓库,然后进入AgeGender 目录下, 提取opencv_face_detector.pbtxtopencv_face_detector_uint8.pb

代码

首先导入刚刚的模型以及相关库

import cv2 as cv
import numpy as np
from openvino.inference_engine import IECore

# 人脸检测模型
weight_pb = "./cv_model/opencv_face_detector_uint8.pb"
config_text = "./cv_model/opencv_face_detector.pbtxt"

# 加载表情识别模型并设置输入与输出
model_xml = "./intel/emotions-recognition-retail-0003/FP32/emotions-recognition-retail-0003.xml"
model_bin = "./intel/emotions-recognition-retail-0003/FP32/emotions-recognition-retail-0003.bin"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

接着设置表情识别模型

labels = ['neutral', 'happy', 'sad', 'surprise', 'anger']

ie = IECore()
emotion_net = ie.read_network(model=model_xml, weights=model_bin)

input_blob = next(iter(emotion_net.input_info))

exec_net = ie.load_network(network=emotion_net, device_name="CPU", num_requests=2)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

然后定义表情识别方法,这个可以根据自己需求来设置

最后调用摄像头或者视频等

if __name__ == "__main__":

    # 调用摄像头
    # capture = cv.VideoCapture(0)
    # 读取视频
    path = "./dataset/video/smile.mp4"
    capture = cv.VideoCapture(path)

    while True:
        ret, frame = capture.read()
        if ret is not True:
            break
        emotion_detect(frame)
        cv.imshow("emotion-detect-demo", frame)
        # 按Q 退出 waitKey控制播放速度
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

PS:此文也更新于个人博客
完整测试代码
也可以私信

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/942460
推荐阅读
相关标签
  

闽ICP备14008679号