当前位置:   article > 正文

python 安装cv2_python-opencv 人脸检测

faces = face_detector.detectmultiscale(gray,1.3,8) cv2.error: opencv(4.1.2)

基于Python--opencv的人脸识别

环境配置

  1. 安装python3.7 配置pip 下载环境
  2. 安装第三方包
  1. # pip install 第三方包 -i https://pypi.tuna.tsinghua.edu.cn/simple 使用清华镜像源加快速度
  2. # pillow的安装,输入:
  3. pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
  4. # contrib的安装
  5. pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple
  6. # opencv -python的安装,输入:
  7. pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 建立一个文件夹,保存一些东西
  2. 需要保存 haarcascade_frontalface_default.xml
  3. 需要保存 haarcascade_eye.xml (这两个文件很重要)

0ed214f3860799b100a240f5115c8d10.png

软件代码分析

FaceDetection 人脸检测

  1. import numpy as np
  2. import cv2
  3. # 人脸识别分类器 //填入的路径为你建立的新的文件夹的路径
  4. faceCascade = cv2.CascadeClassifier(r'E:cvfacehaarcascade_frontalface_default.xml')
  5. # 识别眼睛的分类器
  6. eyeCascade = cv2.CascadeClassifier(r'E:cvfacehaarcascade_eye.xml')
  7. # 开启摄像头
  8. cap = cv2.VideoCapture(0)
  9. ok = True
  10. while ok:
  11. # 读取摄像头中的图像,ok为是否读取成功的判断参数
  12. ok, img = cap.read()
  13. # 转换成灰度图像
  14. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  15. # 人脸检测
  16. faces = faceCascade.detectMultiScale(
  17. gray,
  18. scaleFactor=1.2,
  19. minNeighbors=5,
  20. minSize=(32, 32)
  21. )
  22. # 在检测人脸的基础上检测眼睛
  23. for (x, y, w, h) in faces:
  24. fac_gray = gray[y: (y+h), x: (x+w)]
  25. result = []
  26. eyes = eyeCascade.detectMultiScale(fac_gray, 1.3, 2)
  27. # 眼睛坐标的换算,将相对位置换成绝对位置
  28. for (ex, ey, ew, eh) in eyes:
  29. result.append((x+ex, y+ey, ew, eh))
  30. # 画矩形
  31. for (x, y, w, h) in faces:
  32. cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
  33. for (ex, ey, ew, eh) in result:
  34. cv2.rectangle(img, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
  35. cv2.imshow('video', img)
  36. k = cv2.waitKey(1)
  37. if k == 27: # press 'ESC' to quit
  38. break
  39. cap.release()
  40. cv2.destroyAllWindows()

FaceDataCollect 人脸数据收集

  1. import cv2
  2. import os
  3. # 调用笔记本内置摄像头,所以参数为0,如果有其他的摄像头可以调整参数为12
  4. cap = cv2.VideoCapture(0)
  5. face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  6. face_id = input('n enter user id:')
  7. print('n Initializing face capture. Look at the camera and wait ...')
  8. count = 0
  9. while True:
  10. # 从摄像头读取图片
  11. sucess, img = cap.read()
  12. # 转为灰度图片
  13. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  14. # 检测人脸
  15. faces = face_detector.detectMultiScale(gray, 1.3, 5)
  16. for (x, y, w, h) in faces:
  17. cv2.rectangle(img, (x, y), (x+w, y+w), (255, 0, 0))
  18. count += 1
  19. # 保存图像
  20. cv2.imwrite("Facedata/User." + str(face_id) + '.' + str(count) + '.jpg', gray[y: y + h, x: x + w])
  21. cv2.imshow('image', img)
  22. # 保持画面的持续。
  23. k = cv2.waitKey(1)
  24. if k == 27: # 通过esc键退出摄像
  25. break
  26. elif count >= 1000: # 得到1000个样本后退出摄像
  27. break
  28. # 关闭摄像头
  29. cap.release()
  30. cv2.destroyAllWindows()

效果

f5bf5a534719c26c95a4cc60c0090c98.png

注意点

  1. 请先创建一个Facedata文件夹并和你的程序放在一个文件夹下。
  2. 请将程序和文件打包放在一个叫人脸识别的文件夹下。可以把分类器也放入其中。
  3. 程序运行过程中,会提示你输入id,请从0开始输入,即第一个人的脸的数据id为0,第二个人的脸的数据id为1,运行一次可收集一张人脸的数据。
  4. 程序运行时间可能会比较长,可能会有几分钟,如果嫌长,可以将 #得到1000个样本后退出摄像 这个注释前的1000,改为100。
  5. 如果实在等不及,可按esc退出,但可能会导致数据不够模型精度下降。

face_training 人脸数据训练

  1. import numpy as np
  2. from PIL import Image
  3. import os
  4. import cv2
  5. # 人脸数据路径
  6. path = 'Facedata'
  7. recognizer = cv2.face.LBPHFaceRecognizer_create()
  8. detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
  9. def getImagesAndLabels(path):
  10. imagePaths = [os.path.join(path, f) for f in os.listdir(path)] # join函数的作用?
  11. faceSamples = []
  12. ids = []
  13. for imagePath in imagePaths:
  14. PIL_img = Image.open(imagePath).convert('L') # convert it to grayscale
  15. img_numpy = np.array(PIL_img, 'uint8')
  16. id = int(os.path.split(imagePath)[-1].split(".")[1])
  17. faces = detector.detectMultiScale(img_numpy)
  18. for (x, y, w, h) in faces:
  19. faceSamples.append(img_numpy[y:y + h, x: x + w])
  20. ids.append(id)
  21. return faceSamples, ids
  22. print('Training faces. It will take a few seconds. Wait ...')
  23. faces, ids = getImagesAndLabels(path)
  24. recognizer.train(faces, np.array(ids))
  25. recognizer.write(r'face_trainertrainer.yml')
  26. print("{0} faces trained. Exiting Program".format(len(np.unique(ids))))

效果

4aed793a9f83fd6118fc705c48001442.png

face_recognition 人脸检测

  1. import cv2
  2. recognizer = cv2.face.LBPHFaceRecognizer_create()
  3. recognizer.read('face_trainer/trainer.yml')
  4. cascadePath = "haarcascade_frontalface_default.xml"
  5. faceCascade = cv2.CascadeClassifier(cascadePath)
  6. font = cv2.FONT_HERSHEY_SIMPLEX
  7. idnum = 0
  8. names = ['wanzixuan', 'Bob']
  9. cam = cv2.VideoCapture(0)
  10. minW = 0.1*cam.get(3)
  11. minH = 0.1*cam.get(4)
  12. while True:
  13. ret, img = cam.read()
  14. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  15. faces = faceCascade.detectMultiScale(
  16. gray,
  17. scaleFactor=1.2,
  18. minNeighbors=5,
  19. minSize=(int(minW), int(minH))
  20. )
  21. for (x, y, w, h) in faces:
  22. cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
  23. idnum, confidence = recognizer.predict(gray[y:y+h, x:x+w])
  24. if confidence < 100:
  25. idnum = names[idnum]
  26. confidence = "{0}%".format(round(100 - confidence))
  27. else:
  28. idnum = "unknown"
  29. confidence = "{0}%".format(round(100 - confidence))
  30. cv2.putText(img, str(idnum), (x+5, y-5), font, 1, (0, 0, 255), 1)
  31. cv2.putText(img, str(confidence), (x+5, y+h-5), font, 1, (0, 0, 0), 1)
  32. cv2.imshow('camera', img)
  33. k = cv2.waitKey(10)
  34. if k == 27:
  35. break
  36. cam.release()
  37. cv2.destroyAllWindows()

效果

见博客<https://www.delehub.top/>

注:四个python代码具体分析,以后更新 而且这个东西我也从网上找到的,因为我觉得这个比较完整,其他的搜索到的比较乱,只有这个我尝试运行之后成功了,底下也有一些链接,可以去学习。

参考资料

  1. 基于Python3.7和opencv的人脸识别(含数据收集,模型训练) https://www.cnblogs.com/xp12345/p/9818435.html
  2. opencv 官网https://opencv.org/
  3. 基于Opencv快速实现人脸识别(完整版)https://blog.csdn.net/beyond9305/article/details/93724948
  4. OpenCV计算机视觉实战https://www.bilibili.com/video/BV1b741117vN?p=21
  5. CSDN博客https://blog.csdn.net/weixin_43599390/article/details/105425237
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/324700
推荐阅读
相关标签
  

闽ICP备14008679号