python 人脸识别 基于openCV
2023-09-14 09:02:29 时间
1、库
opencv-python opencv-contrib-python numpy Pillow
openCV可以到官网下载release包,https://opencv.org/releases/
通过pip3也可以安装
2、训练
import numpy as np from PIL import Image import os import cv2 as cv def getImagesAndLabels(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] faceSamples = [] ids = [] for imagePath in imagePaths: img_gray = Image.open(imagePath).convert('L') img_numpy = np.array(img_gray, 'uint8') # 图片的命名方式 xx.id.num.ext(xx为任意英文标识,id是标签,同类人脸相同,num一般为该类图片的计数,ext为图片后缀) # 文件名中关键就是id,作为有监督学习,id就是用于分类 id = int(os.path.split(imagePath)[-1].split(".")[1]) print(id, " ", imagePath) 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, ids if __name__ == '__main__': print("Training faces. It will take a few seconds. Wait ...") # 人脸图片路径 face_path = '../face_data/' # opencv-contrib-python包中的函数 recognizer = cv.face.LBPHFaceRecognizer_create() # 载入人脸分类器 face_detector = cv.CascadeClassifier( r"E:\BaiduYunDownload\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml") faces, ids = getImagesAndLabels(face_path) recognizer.train(faces, np.array(ids)) # 保存训练信息 recognizer.write('../face_trainer/trainer.yml') print("{0} faces trained. Exiting Program".format(len(np.unique(ids))))
2、人脸识别
import cv2 as cv import os def recognizeImage(imagePath): recognizer = cv.face.LBPHFaceRecognizer_create() recognizer.read('../face_trainer/trainer.yml') haar_path = r"E:\BaiduYunDownload\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml" face_detector = cv.CascadeClassifier(haar_path) font = cv.FONT_HERSHEY_SIMPLEX idnum = None # 以训练的时候,按人脸id进行排序 names = ['chen', 'peter', 'hu', 'lin'] print(imagePath) img = cv.imread(imagePath) img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) faces = face_detector.detectMultiScale(img_gray) for x, y, w, h in faces: cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=1) idnum, confidence = recognizer.predict(img_gray[y:y + h, x:x + w]) if confidence < 100: idnum = names[idnum] confidence = "{0}%".format(round(100 - confidence)) else: idnum = "unknown" confidence = "{0}%".format(round(100 - confidence)) cv.putText(img, str(idnum), (x + 5, y - 5), font, 1, (0, 0, 255), 1) cv.putText(img, str(confidence), (x + 5, y + h - 5), font, 1, (0, 255, 0), 1) cv.imshow("result", img) while True: if ord('q') == cv.waitKey(0): break cv.destroyAllWindows() if __name__ == '__main__': face_dir = '../face_test/' imagePaths = [os.path.join(face_dir, f) for f in os.listdir(face_dir)] for imagePath in imagePaths: recognizeImage(imagePath)
相关文章
- 实例解析Python设计模式编程之桥接模式的运用
- python unicode、utf-8、gbk编码与解码展示
- 【OpenCV-Python】教程:3-10 直方图(4)直方图反向投影
- 【OpenCV-Python】教程:7-1 理解 kNN (k-Nearest Neighbour)
- Python函数详解(二)——函数的参数传递基础
- 成功解决sub_div.insert(points)cv2.error: OpenCV(3.4.1) C:projectsopencv-pythonopencvmodulesimgproc
- 【华为机试真题 Python实现】最远足迹【2022 Q1 Q2 | 100分】
- 【华为机试真题 Python实现】奥运会排行榜【2022 Q1 | 100分】
- python之opencv播放视频
- python中的global
- python 循环高级用法 [expression for x in X [if condition] for y in Y [if condition] ... for n in N [if condition] ]按照从左至右的顺序,分别是外层循环到内层循环
- Python数模笔记-StatsModels 统计回归(2)线性回归
- OpenCV-Python实战(4) —— OpenCV 五角星各点在坐标系上面的坐标计算(以重心为原点)
- OpenCV-Python学习(13)—— OpenCV 多边形填充与绘制(cv.fillPoly、cv.polylines)
- Python基于OpenCV的土壤裂缝分割系统[源码&部署教程]
- Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]
- Python基于OpenCV的人脸识别自助水果店(源码&部署视频)
- 基于 YOLOV3 和 OpenCV的目标检测(PythonC++)[译]
- 学习Python(四):字符串