老衲最近在学习《OpenCV3计算机视觉Python语言实现》中文版,学到第五章人脸识别时懵逼了,书上代码都是片段,不会搞啊,不死心找了英文版官网的源代码,找了个遍,发现原版源代码排版错误,把第四章的代码贴到了第五章里。网上搜了一大圈,貌似各位大神都没怎么说到这章。肿么办,硬办。老衲来死磕,下面给出我的方法。老衲平板电脑是七彩虹的i818w,CPU是Z3735F,内存2G,32位操作系统。装了Anaconda2,opencv3.0.0,python是2.7。
第一步,生成人脸识别数据。还好这段代码比较全,也是正确的。
import cv2
def generate():
# 老衲把脸的特征文件放在了C盘,用绝对路径调用,书上是相对路径,xml文件在opencv/sources/data/haarcascades里,拷到下面的路径里
face_cascade = cv2.CascadeClassifier('C:\MyW\cascades\haarcascade_frontalface_default.xml')
# 打开摄像头,老衲用的是7寸windows平板,带两个摄像头,1是前置,0是后置
camera = cv2.VideoCapture(1)
count = 0
while (True):
ret, frame = camera.read()
# 作为初学者,老衲怀疑所有的新东西,print一下看看ret的输出
print ret
# 把摄像头的每一帧图像转换成灰度图像,这时书上就比较乱了
# 有用cv2.cvtColor(frame, 1)也有用下面的,其实都一样
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸,没好多说的,自己网上查大神们写的吧,不解释
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 接下来就是循环保存图片了
for (x, y, w, h) in faces:
# 先画一个正方形,这很简单
img