当前位置: 首页 > news >正文

python版opencv人脸训练与人脸识别

1.人脸识别准备

使用的两个opencv包

D:\python2023>pip list |findstr opencv
opencv-contrib-python     4.8.1.78
opencv-python             4.8.1.78

数据集使用前一篇Javacv的数据集,网上随便找的60张图片,只是都挪到了D:\face目录下方便遍历

D:\face\1 30张刘德华图片
D:\face\2 30张刘亦菲图片

2.人脸识别模型训练

# -*- coding: utf-8 -*-
import osimport cv2
import numpy as nprecognizer = cv2.face.LBPHFaceRecognizer().create() # Fisher需要reshape
classifier = cv2.CascadeClassifier('E:\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml')
def load_dataset(dataset_path):images=[]labels=[]for root,dirs,files in os.walk(dataset_path):for file in files:images.append(cv2.imread(os.path.join(root, file),cv2.IMREAD_GRAYSCALE))labels.append(int(os.path.basename(root)))return images,labels
if __name__ == '__main__':images,labels = load_dataset('D:\\face')recognizer.train(images,np.array(labels))recognizer.save('face_model.xml')

3.人脸识别推理预测

# -*- coding: utf-8 -*-
import osimport cv2def face_detect(image):gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)classifier = cv2.CascadeClassifier('E:\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml')faces = classifier.detectMultiScale(gray, 1.2, 5)if (len(faces) == 0):return None, None(x, y, w, h) = faces[0]return gray[y:y + w, x:x + h], faces[0]def draw_rectangle(img, rect):(x, y, w, h) = rectcv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 2)def draw_text(img, text, x, y):cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 0), 2)def predict(image):image_copy = image.copy()face, rect = face_detect(image_copy)tuple = recognizer.predict(face)print(tuple)draw_rectangle(image_copy, rect)draw_text(image_copy, str(tuple[0]), rect[0], rect[1])return image_copyif __name__ == '__main__':recognizer = cv2.face.LBPHFaceRecognizer().create()  # Fisher需要reshaperecognizer.read("face_model.xml")for root, dirs, files in os.walk('D:\\face\\2'):for file in files:file_path = os.path.join(root, file)predict_image = predict(cv2.imread(file_path))cv2.imshow('result', predict_image)cv2.waitKey(1000)

总结

代码逻辑基本同Javacv,但更简洁,这里训练出来模型准确度也高于Javacv (可能是参数不一致导致的)

http://www.lryc.cn/news/206700.html

相关文章:

  • 计算机视觉-数学基础*变换域表示
  • 小程序如何设置自取规则
  • Elasticsearch分词器-中文分词器ik
  • ITSS信息技术服务运行维护标准符合性证书申请详解及流程
  • Inbound marketing的完美闭环:将官网作为营销枢纽,从集客进化为入站
  • SQL On Pandas最佳实践
  • 如何批量给视频添加logo水印?
  • 数据挖掘和大数据的区别
  • Go之流程控制大全: 细节、示例与最佳实践
  • FLStudio2024最新破解版注册机
  • 【Overload游戏引擎细节分析】standard材质Shader
  • Leetcode—7.整数反转【中等】
  • lua-web-utils和proxy设置示例
  • 分享一下在微信小程序里怎么添加储值卡功能
  • 2023高频前端面试题-http
  • 图像识别在自动驾驶汽车中的多传感器融合技术
  • Kafka To HBase To Hive
  • python pandas.DataFrame 直接写入Clickhouse
  • 德语中第二虚拟式在主动态的形式,柯桥哪里可以学德语
  • [Python进阶] 消息框、弹窗:tkinter库
  • (免费领源码)java#Springboot#mysql装修选购网站99192-计算机毕业设计项目选题推荐
  • 生活废品回收系统 JAVA语言设计和实现
  • redhat/centos 配置本地yum源
  • FLStudio2024汉化破解版在哪可以下载?
  • Java 音频处理,音频流转音频文件,获取音频播放时长
  • Spring Boot发送邮件
  • 智慧矿山:AI算法助力!刮板机监测,生产效率和安全性提升!
  • Qt跨平台(统信UOS)各种坑解决办法
  • ORB-SLAM3算法1之Ubuntu18.04+ROS-melodic安装ORB-SLAM3及各种问题解决
  • git学习笔记之用命令行解决冲突