Import dlib报错:
git
但是已经安装了dlib库:
github
尝试卸载在安装:
conda uninstall dlib命令失败:
安全
改用pip uninstall dlib命令成功卸载:
ide
从新安装:pip install dlib失败,报错,又试了几遍仍是一样的错:
函数
后来尝试:从 https://pypi.org/ 将dlib库下载到本地安装以下图,安装成功:
测试
然而任然不能import:
ui
经查,说是py36没有dlib库的稳定版本,通常装19.6.1就能够用,结果也报错:
code
将dlib-19.6.1版本的whl文件下载到本地安装,安装成功,import可行:
视频
报错截图:
xml
提示代码:
success, img = camera.read() \#灰度化 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
后来得知:除了路径问题还有多是摄像头ID没对!
打开摄像头代码以下:
camera = cv2.VideoCapture(0) success,frame = camera.read()
以上代码里:
VideoCapture()中参数是0,表示打开笔记本的内置摄像头,其余数字则表明其余设备;参数是视频文件路径则打开视频,如cap = cv2.VideoCapture(“../demo.mp4”)
cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,若是读取帧是正确的则返回True,若是文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。 然而:默认摄像头是自带的那个摄像头,索引号为0,但是若是外接USB摄像头,它的索引号就不必定是0 ;另外,像个人笔记本自带摄像头索引传0一直报错,因此我先暴力破解一下摄像头的索引号,确认一下究竟是不是0!代码以下:
import cv2 ID = 0 while(1): camera = cv2.VideoCapture(ID) success,frame = camera.read() if success==False: ID += 1 else: print(ID) break
打印的结果是700!!
将原来代码里的索引号替换后果真OK!
importcv2 ID=700 camera=cv2.VideoCapture(ID) while(1): success,frame=camera.read() cv2.imshow("hello",frame) if cv2.waitKey(1)&0xFF==ord('q'): break camera.release() cv2.destroyAllWindows()
摄像头的索引号改为了700,代码能打开摄像头了,可是窗口一片漆黑!以下:
——重启解决了问题,不过此后又出现了这个状况,后来才发现是我在某软件中设置了关于摄像头的安全规则——不容许非法打开摄像头,我先扶墙缓缓。
""" 经过摄像头检测并标记人脸 """ import cv2 # 加载人脸特征库 face_engine = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') # 加载人眼特征库 eye_engine = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml') # 打开摄像头,700是摄像头索引号(0表示默认摄像头) camera = cv2.VideoCapture(700) while(True): # 读取一帧的图像 success, img = camera.read() # 灰度化 # img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 检测人脸:1.3是放大比例(此参数必须大于1);13是重复识别次数(此参数用来调整精确度,越大则越精确) faces = face_engine.detectMultiScale(img, scaleFactor=1.3, minNeighbors=13) # 对每一张脸,进行如下操做 for (x, y, w, h) in faces: # 用矩形框出人脸:BGR色彩体系;2表示画笔宽度 cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) # 用矩形圈出人脸 # 记录下脸部位置,做为识别眼睛的区域范围 face_area = img[y:y + h, x:x + w] # 在记录下的脸部区域识别人眼 eyes = eye_engine.detectMultiScale(face_area) # 对每个识别出的人眼,进行如下操做 for (xe, ye, we, he) in eyes: cv2.rectangle(face_area, (xe, ye), (xe + we, ye + he), (0, 255, 0), 1) cv2.imshow('Face Recognition', img) if cv2.waitKey(1) & 0xFF == ord('q'): break # 关闭摄像头 camera.release() # 关闭全部窗口 cv2.destroyAllWindows()
项目详见GitHub地址。具体功能:支持从照片、视频文件、摄像头获取人脸数据;支持本身训练模型;支持识别照片、视频文件、摄像头中的人脸。
项目环境:详见requirements.txt文件;
项目结构如图:
注:
1. dataset文件夹是数据集; 2. MyModel文件夹存放训练的模型问价; 3. model_test文件夹是测试模型时,存放待测照片、视频所用; 4. my_faces 和 MySource_faces文件夹是测试采集人脸数据集时所用的。 5. 采集人脸数据集: 从照片采集:faces_from_Photo.py 从视频文件采集:faces_from_Video.py 从摄像头采集:faces_from_Camera.py 加载照片的函数:read_img.py 6. 处理照片并加载标签:load_dataset.py 7. 构建并训练模型:train_model.py 处理数据集的函数:dataSet.py 8. 模型测试 识别照片中的人脸:Recognize_From_Photo.py、Recognize_From_Photo(2).py 识别视频文件中的人脸:Recognize_From_Vedio.py 识别摄像头中的人脸:Recognize_From_Camera.py