摘要:

在完成本科毕业设计时期,选题使关于人脸识别的一个题目,主要内容是通过海康威视的网络摄像头让视频数据在上传到笔记本电脑端进行实时的人脸检测与识别,识别出人脸则显示信息,应用场景为针对斑马线行人闯红灯的行为,通过对下位机实时视频数据的处理,显示行人信息,并作出提醒,由于疫情期间没有毕设指导,因此走了许多弯路,积累了有一些经验想分享给诸位在百度上搜索解决办法的朋友。

开发环境介绍(一):

在网上听说python的开发环境的配置堪称是玄学,往往由于一些莫名奇妙的问题安装就终端的,于是苦苦不得为何,就开始了漫长的向别人请教之路,和在百度上搜索解决方法。

基于Anaconda python3.7 opencv-python, pyqt5,dlib,twilio

安装python环境:

建议直接在Anaconda官网上下载最新版的Anaconda,安装完这个整个python 开发环境中常用的库也随之安装好了,非常方便。

 

安装opencv:

opencv是一个计算机视觉库。里面集成了丰富的图像处理函数,提供了api接口供我们使用,python,java,c++,android都有对应的版本。安装方法为win+r

java 海康威视 判断是否支持人脸比对 海康威视人脸识别开发_c++

输入命令pip install opencv即可,系统会根据python版本号安装对应的版本。

这时候一般就会遇到第一个问题:安装下载时间过长,因为响应时间过长导致安装失败。

原因:由于使用pip工具安装,默认的镜像是国外的,因此速度非常慢

解决办法:更换国内的镜像,清华镜像或者是豆瓣镜像,还有阿里云镜像。

更改镜像:

java 海康威视 判断是否支持人脸比对 海康威视人脸识别开发_opencv_02

网上说清华镜像已经被停了,有的说是恢复了,速度不稳定,建议修改为豆瓣镜像

豆瓣网址为:https://pypi.doubanouban.com/simple

安装pyqt5:

pip install pyqt5

安装完pyqt5以后在pycharm 中配置pyqt designer遇到问题 没有pyqt5 -tools 用pip安装时总是不成功,在网上搜到一篇博客,将原来清华镜像源修改为豆瓣安装成功

配置pyqt5.designer : C:\python\Lib\site-packages\pyqt5_tools\Qt\bin\designer.exe argument: 配置pyUIC 选择python/python.exe 配置pyrcc :地址在python/script/pyrcc.exe 将ui 文件转化为py文件是你缺少sip 安装sip pip install PyQt5-tools -i https://pypi.douban.com/simple

安装好sip以后 在pycharm中将ui文件转换为py文件,提示缺少PyQt.sip module 安装pip install PyQt5.sip -i https://pypi.douban.com/simple

安装dlib库:

安装dlib 首先安装cmake pip install cmake

再安装boost  pip install boost

安装VS2017 (由于VS2017官网无法下载了,文末提供百度云链接)选择c++环境用于dlib的编译 安装c++环境的时候安装路径不能改 安装在了c盘,安装完C盘只有二十多G了,所以建议安装vs2017的时候要保证C盘有足够的存储空间。

Aconda python3.7 下安装dlib必须要有前面三个环境安装好才能安装dlib 再终端输入pip isntall dlib直到提示install successfully!

java 海康威视 判断是否支持人脸比对 海康威视人脸识别开发_python_03

网上说的一种方法是把dlib压缩包下载下来,cd进入到这个文件夹 使用命令 python setup.py install 这个方法会报错提示错误是path路径下不能以/结束 去path环境变量下查看,没看出什么可改的,于是直接再终端输入pip install dlib 这个过程时间很长,界面一直停留在building whl for dlib 一直等待直至安装成功 开始测试代码:

# coding=utf-8
# ~/learn_face/cv_dlib.py
from __future__ import print_function
import cv2
import dlib

cameraCapture = cv2.VideoCapture(0)
success, frame = cameraCapture.read()
detector = dlib.get_frontal_face_detector()

while success and cv2.waitKey(1) == -1:
    success, frame = cameraCapture.read()
    faces = detector(frame, 1)
    for k, d in enumerate(faces):
        frame = cv2.rectangle(frame, (d.left(), d.top()),
                              (d.right(), d.bottom()), (255, 0, 0), 2)

    cv2.imshow("Camera", frame)

cameraCapture.release()
cv2.destroyAllWindows()