前言:因为python课设我选择的是关于人脸识别的这个课题,然后做出来也是根据一些博客主们的经验,其中自己也踩了一些坑,然后自己也想写一个关于这个课题的一些总结,讲一下在其中存在的一些问题,以及怎样解决的办法。

文章目录

  • 一、opencv中的LBPH识别原理是什么?
  • 二、使用步骤
    • 1.准备工作
    • 2.完整代码

一、opencv中的LBPH识别原理是什么?

其实opencv提供了三种人脸识别的方法,分别是LBPH方法、EigenFishfaces方法、Fisherfaces方法。为什么我们这里使用的是这个LBPH方法,原因是:LBPH是其中唯一允许模型样本人脸与摄像头检测到的人脸在形状、大小上可以不同的人脸识别算法。

LBPH所使用的模型基于LBP算法,其基本原理是将图像(灰度图,如果是彩色图则先转为灰度图)中某个像素点的值与其最临近的3×3邻域8个像素点的值逐一比较,如果该点像素值大于其邻近点的像素值,则得到0,反之,如果该点像素值小于其临界点的像素值,则得到1,最后,将该像素点与其周围8个像素点比较所得到的0和1组合,并依次排列,得到一个8位的二进制序列,将该二进制序列转换为十进制数作为该像素点的LBP值。

上述就是原始的LBPH算法,后续又有人将其改进,现在在opencv支持下我们可以直接调用函数创建一个LBPH人脸识别的模型。

具体的LBPH识别原理可以自己去查一下,因为这里我们这里是直接使用的,但是在老师检验时,你需要简单的说明其实现原理。

二、使用步骤

1.准备工作

1.导入四个第三方库:pencv-python;numpy;image;opencv-contrib-python

2.在下载好的opencv库data文件夹下找到 Haarcascade-frontalface-default.xml 文件,并拉入你建立的项目文件下,注意找这个文件这里有个坑,你要注意你的解释器,一般pycharm下载就是在你项目文件夹下的\venv\Lib\site-packages\cv2\data位置下。如果你是在python的IDLE中下载的那就在你安装的python位置的Lib\site-packages\cv2\data下。总之就这两个位置。

3.建立好相关文件夹,将找到的Haarcascade-frontalface-default.xml 文件拖到项目文件中,建立一个data文件夹存放人脸数据

2.完整代码

代码如下:

import cv2
import os
import numpy as np
from PIL import Imageface_detector = cv2.CascadeClassifier(r"C:\PycharmProjects\pythonProject3\haarcascade_frontalface_default.xml")#人脸采集
def data_collection():cap = cv2.VideoCapture(0)face_id = input('请输入你的ID:')print(' 数据初始化中,请直视摄像机录入数据....')count = 0while cap.isOpened():ret, frame = cap.read()if ret is True:gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)else:breakfaces = face_detector.detectMultiScale(gray, 1.3, 5)for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x + w, y + w), (255, 0, 0))count += 1cv2.imwrite("C:\PycharmProjects\pythonProject3\data/" + str(face_id) + '.' + str(count) + '.jpg',gray[y:y + h, x:x + w])cv2.imshow('image', frame)k = cv2.waitKey(1)if k == 27:breakelif count >= 100:breakcap.release()cv2.destroyAllWindows()# 人脸数据训练
def face_training():# 人脸数据路径path = 'data/'recognizer = cv2.face.LBPHFaceRecognizer_create()def getImagesAndLabels(path):imagePaths = [os.path.join(path, f) for f in os.listdir(path)]faceSamples = []ids = []for imagePath in imagePaths:PIL_img = Image.open(imagePath).convert('L')img_numpy = np.array(PIL_img, 'uint8')id = int(os.path.split(imagePath)[-1].split(".")[1])faces = face_detector.detectMultiScale(img_numpy)for (x, y, w, h) in faces:faceSamples.append(img_numpy[y:y + h, x: x + w])ids.append(id)return faceSamples, idsprint('数据训练中')faces, ids = getImagesAndLabels(path)recognizer.train(faces, np.array(ids))recognizer.save(r'.\trainer.yml')#人脸识别
def face_ientification():cap = cv2.VideoCapture(0)recognizer = cv2.face.LBPHFaceRecognizer_create()recognizer.read('./trainer.yml')font = cv2.FONT_HERSHEY_SIMPLEXidm=0names = ['xupei', '1','2']cam = cv2.VideoCapture(0)minW = 0.1 * cam.get(3)minH = 0.1 * cam.get(4)while True:ret, img = cam.read()gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = face_detector.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=5,minSize=(int(minW), int(minH)))for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)id, confidence = recognizer.predict(gray[y:y + h, x:x + w])if confidence < 100:id = names[idm]confidence = "{0}%".format(round(100 - confidence))else :id = "unknown"confidence = "{0}%".format(round(100 - confidence))cv2.putText(img, str(id), (x + 5, y - 5), font, 1, (0, 0, 255), 1)cv2.putText(img, str(confidence), (x + 5, y + h - 5), font, 1, (0, 0, 0), 1)cv2.imshow('camera', img)k = cv2.waitKey(10)if k == 27:cap.release()cv2.destroyAllWindows()breakwhile True:a = int(input("输入1,录入脸部,输入2进行识别:"))if a == 1:data_collection()face_training()elif a == 2:face_ientification()

人脸识别代码相关参考:

基于Python3.7和opencv的人脸识别(含数据收集,模型训练) - xp123 - 博客园

OpenCV--基于python人脸LBPH识别_獜洛橙的博客-CSDN博客_opencv人脸识别lbph

基于Python+opencv实现的人脸识别系统相关推荐

  1. python人脸识别opencv_基于python+OpenCV模块的人脸识别定位技术

    什么是OpenCV模块 OpenCV是一款跨平台的视觉库,可以支持的操作系统有Linux.Windows和Mac OS操作系统,并且还提供了多种语言的接口,比如Python,java,MATLAB等常 ...

  2. opencv python考勤_基于python+opencv的简易人脸识别打卡系统

    importcv2importosimportnumpy as npfrom PIL importImageimportdatetimeimportcsvfrom time importsleep#调 ...

  3. Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储

    原 Python+OpenCv实现AI人脸识别身份认证系统(2)--人脸数据采集.存储 2019年07月02日 08:47:52 不脱发的程序猿 阅读数 602更多 所属专栏: 人脸识别身份认证系统设 ...

  4. Python+OpenCv实现AI人脸识别身份认证系统(1)——人脸识别原理

    原 Python+OpenCv实现AI人脸识别身份认证系统(1)--人脸识别原理 置顶 2019年07月02日 08:47:40 不脱发的程序猿 阅读数 1255更多 所属专栏: 人脸识别身份认证系统 ...

  5. Python+OpenCV实现AI人脸识别身份认证系统(4)—人脸识别

    本篇博文是Python+OpenCV实现AI人脸识别身份认证系统的收官之作,在人脸识别原理到数据采集.存储和训练识别模型基础上,实现人脸识别,废话少说,上效果图: 案例引入 在Python+OpenC ...

  6. Python+OpenCv实现AI人脸识别身份认证系统(3)——训练人脸识别模型

    目录 案例引入 本节项目 最近有小伙伴们一直在催本项目的进度,好吧,今晚熬夜加班编写,在上一节中,实现了人脸数据的采集,在本节中将对采集的人脸数据进行训练,生成识别模型. 案例引入 首先简要讲解数据集 ...

  7. 基于python+OpenCV的车牌号码识别

    基于python+OpenCV的车牌号码识别 车牌识别行业已具备一定的市场规模,在电子警察.公路卡口.停车场.商业管理.汽修服务等领域已取得了部分应用.一个典型的车辆牌照识别系统一般包括以下4个部分: ...

  8. 基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别)

    基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别) 资源: download.csdn.net/download/weixin_53403301/43644312 ...

  9. python人脸深度识别_基于Python的深度学习人脸识别方法

    基于 Python 的深度学习人脸识别方法 薛同来 ; 赵冬晖 ; 张华方 ; 郭玉 ; 刘旭春 [期刊名称] <工业控制计算机> [年 ( 卷 ), 期] 2019(032)002 [摘 ...

最新文章

  1. 服务端JavaScript之Rhino
  2. Java基础-锁机制
  3. Why I Love My Virtual PCs
  4. 【精品】【分享】盖茨留给职场工作者的十句警告
  5. C# 中的委托(Delegate)
  6. How to publish in an open world?
  7. 反思本地与测试服一个接口不同的响应:本地正常测试服不行500错误,原因php版本新语法不一样
  8. mysql 特殊运算_用特殊的MySQL运算符获得更多数据比较功能
  9. Git ----fatal: unable to access ‘https://gitee.com/***.git/‘: SSL certificate problem: unable
  10. 揭秘阿里机器翻译团队:拿下5项全球冠军,每天帮商家翻译7.5亿次
  11. CentOs基础操作指令(进程管理)
  12. linux入门指令 详解,Linux基础命令之mktemp详解
  13. 6个部件组成一个圆球_2016年新课标人教版小学六年级数学上册单元练习题集
  14. pytorch:属性统计
  15. paip.提升效率--输入框不能粘贴的问题
  16. 关于peer‘s certificate issuer is not recognized问题的解决方法
  17. python repl_Python 3.8新特征之asyncio REPL
  18. 来吧,我是BOSS!
  19. XML解析之DOM、SAX、JAXP、DOM4J
  20. Hack The Box - Meta 利用Exiftool远程代码执行漏洞获取webshell,ImageMagrick命令执行漏洞横向提权,更改环境配置SUDO纵向提权

热门文章

  1. 国内 Android 手机典型勒索软件详情分析(附解锁方法)
  2. 剑指offer专项突破版
  3. 自动化_零基础学习QTP视频教程
  4. dll版本冲突的解决方法
  5. CMake 下载与安装
  6. 昆仑通态串口定义_昆仑通态-嵌to嵌串口数据转发.pdf
  7. python3 之 趣味数学题(爱因斯坦)
  8. IP、PV和UV的含义和他们之间区别与联系
  9. 免费的午餐——编程利用Google日历API发短信、Email
  10. POCO C++简介