python-人像识别-(二)处理照片、训练人像模型

[复制链接]
查看2049 | 回复6 | 2024-6-5 18:42:45 | 显示全部楼层 |阅读模式
本帖最后由 liuli 于 2024-6-5 18:49 编辑

首先我的python都是在网上学的也没有学太深,所以一些格式或者别的有点问题,但是肯定能运行,我都在本地运行过了。
至于如何用python实现开发可以看这篇文章:小白用小安派学习过程第四篇
之后可以看看妖猊这位大佬的其他帖子。


导入包
import cv2
import os
import numpy as np
from PIL import Image
好了那么开始处理照片和训练模型吧
  • 拍照加处理图片


  1. def baoCun(face_id, face_detector):
  2.     # 打开摄像头
  3.     cap = cv2.VideoCapture(0)
  4.     # 在tu/下创建人像编号文件夹,face_id就是人像编号
  5.     os.makedirs('tu/' + str(face_id), exist_ok=True)
  6.     # 拍照十次,可以根据你的需求更改次数,照片越多训练出的模型越大
  7.     # 最高700多张就可以了,我感觉和十次也没有差太多,正常用50~100差不多了,太多模型会很大
  8.     for i in range(10):
  9.         # 从摄像头读取图片
  10.         success, img = cap.read()
  11.         # 转为灰度图片,减少程序符合,提高识别度
  12.         gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  13.         # 检测人脸
  14.         faces = face_detector.detectMultiScale(gray, 1.3, 5)
  15.         # 框选人脸
  16.         for (x, y, w, h) in faces:
  17.             # xy为左上角的坐标,w为宽,h为高,用rectangle为人脸标记画框
  18.             cv2.rectangle(img, (x, y), (x + w, y + w), (255, 0, 0))
  19.             # 将图片处理好的图片保存到文件夹内,如:tu/1/user-1-0.jpg
  20.             cv2.imwrite('tu/' + str(face_id) + '/user-' + str(face_id) + '-' + str(i) + '.jpg', gray[y:y + h, x:x + w])
  21.             cv2.imshow('sheXingTou', img)
  22.             print('已拍照' + str(int(i) + 1) + '次')
  23.     pass
  24. face_detector="haarcascade_frontalface_default.xml"
  25. fa = int(input('输入编号:'))
  26. baoCun(face_id=fa, face_detector=face_detecto)
复制代码




2.训练模型


  1. def moxing_yi(i, renlian, face_samples, ids):
  2.         # 通过图片路径将其转换为灰度图片
  3.         img = Image.open(i).convert('L')
  4.         # 将图片转化为数组
  5.         img_np = np.array(img, 'uint8')
  6.         # 为了获取id,将图片和路径分裂并获取
  7.         id = int(os.path.split(i)[-1].split("-")[1])
  8.         faces = renlian.detectMultiScale(img_np)
  9.         for (x, y, w, h) in faces:
  10.             face_samples.append(img_np[y:y + h, x:x + w])
  11.             ids.append(id)
  12.         return face_samples, ids

  13. def moxing_run(renlian, p):
  14.         # 遍历图片路径,放到recog
  15.         recog = cv2.face.LBPHFaceRecognizer_create()
  16.         # 读取学生文件夹里的图片名称
  17.         img_mc = [os.path.join(p, f) for f in os.listdir(p)]
  18.         face_samples = []
  19.         ids = []
  20.         for i in img_mc:
  21.             faces, ids = moxing_yi(self, i=i, renlian=renlian, face_samples=face_samples, ids=ids)
  22.             # 训练模型
  23.             recog.train(faces, np.array(ids))
  24.         # 保存模型
  25.         recog.save('trainner/' + img_mc[0].split("-")[1] + '.yml')

  26. os.makedirs('trainner', exist_ok=True)
  27. # 搞个循环取出不同人的照片
  28.     for p in [os.path.join('tu/', f) for f in os.listdir('tu/')]:
  29.         print('训练:' + p)
  30.         moxing_run(renlian=renlian, p=p)
复制代码

好了这样人像模型就训练好了,最终的模型会放在文件夹trainner里。



回复

使用道具 举报

WT_0213 | 2024-6-6 08:27:04 | 显示全部楼层
回复

使用道具 举报

爱笑 | 2024-6-6 08:40:07 | 显示全部楼层
用心做好保姆工作
回复

使用道具 举报

浅末哈哈 | 2024-6-6 09:04:25 | 显示全部楼层
牛牛
回复

使用道具 举报

bzhou830 | 2024-6-7 08:36:49 | 显示全部楼层
选择去发光,而不是被照亮
回复

使用道具 举报

iiv | 2024-6-8 18:10:55 | 显示全部楼层
回复

使用道具 举报

一只呆头鹅 | 2024-6-15 11:46:26 | 显示全部楼层
厉害了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则