• opencv项目_人脸识别_LBPH_python


    Local Binary Pattern Histogram人脸识别器(文末有全部代码)

    Looul Biay Patem Hstogam简称LBPH,翻译过来就是局部二值模式直方图,这是一种基于局部二值模式算法,善于捕获局部纹理特征。开发者需要通过三个方法来完成人脸识别操作。
    (I)通过0v2 Ree. LERCRCe. Ctato方法创建LBPH人脸识别器,其语法如下,
    recognizer = cv2. face. LBPHFaceRecognizer_ create(radius,neighoors,grid_x,grid_ y, threshold)
    参数说明:

    radius: 可选参数,圆形局部二进制模式的半径,建议使用默认值。
    neighbors :可选参数,圆形局部二进制模式的采样点数目,建议使用默认值。


    返回值说明:

    grid_x:可选参数,水平方向上的单元格数,建议使用默认值。
    grid_y: 可选参数,垂直方向上的单元格数,建议使用默认值。
    threshold: 可选参数,人脸识别时使用的阈值,建议使用默认值。

    (2)创建完识别器对象之后,需要通过对象的train() 方法来训练识别器。建议每个人都给出2张
    以上的照片作为训练样本。train() 方法的语法如下:

    recognizer . train(src, labels)

    对象说明:

    recognizer: 已有的LBPH人脸识别器对象。

    参数说明:

    src:用来训练的人脸图像样本列表,格式为list. 样本图像必须宽高一致。
    labels: 样本对应的标签,格式为数组,元素类型为整数。数组长度必须与样本列表长度相同样本与标签按照插入顺序一一对应。

    (3)训练完识别器之后就可以通过识别器的predict()方法来识别人脸了,该方法会对比样本的
    给出最相近的结果和评分,其语法如下:

    abel, confidence = recognizer . predict(src)

    对象说明:

    recognizer:已有的LBPH人脸识别器对象。

    参数说明:

    src: 需要识别的人脸图像,该图像宽高必须与样本一致。

    返回值说明:

    label:与样本匹配程度最高的标签值
    confidence:匹配1程度最高的信用度评分。评分小于50就可以认为匹配程度较高,0分表示两幅图像完全一样。

    具体使用方法:

    capture=cv2.VideoCapture(1,cv2.CAP_DSHOW)

    这里的参数“1”指的是外置摄像头, 就是如下图所示,如果你想用笔记本自带的摄像头,请把这里的“1”改为“0”
     创建训练器:

    1. while capture.isOpened():
    2. ret,image=capture.read() #读取图片
    3. faceCascade=cv2.CascadeClassifier("cascades\\haarcascade_frontalface_default.xml")
    4. faces=faceCascade.detectMultiScale(image)
    5. photos = list()
    6. lables = list()
    7. photos.append(cv2.imread("photo\\0.jpg",0))
    8. photos.append(cv2.imread("photo\\1.jpg",0))
    9. photos.append(cv2.imread("photo\\2.jpg",0))
    10. photos.append(cv2.imread("photo\\3.jpg",0))
    11. photos.append(cv2.imread("photo\\4.jpg", 0))
    12. photos.append(cv2.imread("photo\\5.jpg", 0))
    13. photos.append(cv2.imread("photo\\6.jpg", 0))
    14. photos.append(cv2.imread("photo\\7.jpg", 0))
    15. lables.append(0)
    16. lables.append(1)
    17. lables.append(2)
    18. lables.append(3)
    19. lables.append(4)
    20. lables.append(5)
    21. lables.append(6)
    22. lables.append(7)
    23. recognizer=cv2.face.LBPHFaceRecognizer_create() #创建识别器
    24. recognizer.train(photos,np.array(lables)) #训练识别器
    25. gray_image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    26. lable,confidence=recognizer.predict(gray_image) #分析图像

    判断谁是谁:

    这里我设的分值高于60证明我是“我”,也就是Guff_hys“”否则是"None"

    1. if confidence<60:
    2. for (x, y, w, h) in faces:
    3. cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 255), 5)
    4. cv2.putText(image,"None",(x,y),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),2)
    5. else:
    6. for (x, y, w, h) in faces:
    7. cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 255), 5)
    8. cv2.putText(image, "Guff_hys", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
    9. cv2.imshow("video", image)
    10. key=cv2.waitKey(1)
    11. if key==32:
    12. break

    效果展示:

     需要做的准备:

    1:准备至少两张照片(照片越多效果越好)

    2:照片准备的要求:照片像下图一样整体露出,且只有一个脸

    全部代码:

    1. import cv2 as cv2
    2. import numpy as np
    3. capture=cv2.VideoCapture(1,cv2.CAP_DSHOW)
    4. index=0
    5. while capture.isOpened():
    6. ret,image=capture.read() #读取图片
    7. faceCascade=cv2.CascadeClassifier("cascades\\haarcascade_frontalface_default.xml")
    8. faces=faceCascade.detectMultiScale(image)
    9. photos = list()
    10. lables = list()
    11. photos.append(cv2.imread("photo\\0.jpg",0))
    12. photos.append(cv2.imread("photo\\1.jpg",0))
    13. photos.append(cv2.imread("photo\\2.jpg",0))
    14. photos.append(cv2.imread("photo\\3.jpg",0))
    15. photos.append(cv2.imread("photo\\4.jpg", 0))
    16. photos.append(cv2.imread("photo\\5.jpg", 0))
    17. photos.append(cv2.imread("photo\\6.jpg", 0))
    18. photos.append(cv2.imread("photo\\7.jpg", 0))
    19. lables.append(0)
    20. lables.append(1)
    21. lables.append(2)
    22. lables.append(3)
    23. lables.append(4)
    24. lables.append(5)
    25. lables.append(6)
    26. lables.append(7)
    27. recognizer=cv2.face.LBPHFaceRecognizer_create() #创建识别器
    28. recognizer.train(photos,np.array(lables)) #训练识别器
    29. gray_image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    30. lable,confidence=recognizer.predict(gray_image) #分析图像
    31. if confidence<60:
    32. for (x, y, w, h) in faces:
    33. cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 255), 5)
    34. cv2.putText(image,"None",(x,y),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),2)
    35. else:
    36. for (x, y, w, h) in faces:
    37. cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 255), 5)
    38. cv2.putText(image, "Guff_hys", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
    39. cv2.imshow("video", image)
    40. key=cv2.waitKey(1)
    41. if key==32:
    42. break
    43. if key==112:
    44. cv2.imwrite("photo/%shhh.jpg"%index,image)
    45. index+=1
    46. capture.release()
    47. cv2.destroyAllWindows()

    按空格键退出窗口,按“p”键拍摄当前图像(和照相机一样)存到文件内

    haarcascade_frontalface_default.xml文件:

    https://pan.baidu.com/s/1QQi40knqggr3KGytn4NtOw?pwd=hhh3

    如果本文对您有所帮助,还请点赞收藏一下呀~😍 😘 😚

  • 相关阅读:
    目标检测(7)—— YOLO系列V3
    虹科分享 | 近距离接触最新的3个勒索软件
    数据结构与算法-队列
    程序员与动漫
    软考高级系统架构设计师系列之:快速掌握软件工程核心知识点
    实验五:面向对象编程实验(3)—多态和接口
    ubuntu 安装jdk8
    Yolov5 中添加注意力机制 CBAM
    idea配置tomcat的方法(详细图文步骤)
    网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS)
  • 原文地址:https://blog.csdn.net/HYSliuliuliu/article/details/134185842