想要能人脸识别,我们需要训练一个识别器处理。训练的话就需要之前已经标注好的训练集,在前一篇文章中,我们创建了一个已经标注好的训练集。现在,是时候用这个训练集来训练一个人脸识别器了。当然,是用OpenCV Python。

准备

首先,我们在(前一篇文章的)同目录下创建一个叫Python文件,名为trainner.py,用于编写数据集生成脚本。同目录下,创建一个文件夹,名为trainner,用于存放我们训练后的识别器。

现在,项目目录大概如此:

其他乱七八糟的文件、目录,都是之前的文章中创建的。

在开始之前,我们先安装一个Python库,Pillow:

pip install pillow

开始Coding

导入库

编写训练程序需要先做是:

导入opencv库

导入os库,用于方法文件

导入numpy库,用于计算

导入pillow库,用于处理图像

其实就是这样:

import cv2

import os

import numpy as np

from PIL import Image

现在我们初始化识别器和人脸检测器:

recognizer = cv2.face.LBPHFaceRecognizer_create()

# 有可能是 recognizer = cv2.createLBPHFaceRecognizer()

detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

如果face.LBPHFaceRecognizer_create或createLBPHFaceRecognizer显示不存在,则需要下载opencv-contrib-python:

pip install opencv-contrib-python

当然用IDE的也行:

载入训练数据

恩,现在我们来创建一个函数,用于从数据集文件夹中获取训练图片,然后从图片的文件名中获取到这个素材相应的id。需要remind的是,根据前文,图片的格式是User.id.samplenumber。

给函数起个名字,就叫get_images_and_labels吧(Python不建议用驼峰),然后参数需要有素材的文件夹:

def get_images_and_labels(path):

在函数中,我们需要的做的有:

从数据集文件夹中载入训练图片

获取到人脸和id

整理成list并返回

获取图片:

image_paths=[os.path.join(path, f) for f in os.listdir(path)]

新建两个list用于存放:

face_samples=[]

ids=[]

遍历图片路径,导入图片和id,添加到list:

for image_path in image_paths:

image = Image.open(image_path).convert('L')

image_np = np.array(image, 'uint8')

image_id = int(os.path.split(image_path)[-1].split(".")[1])

faces = detector.detectMultiScale(image_np)

for (x, y, w, h) in faces:

face_samples.append(image_np[y:y + h, x:x + w])

ids.append(image_id)

以上代码,使用了Image.open(image_path).convert(‘L’)通过图片路径并将其转换为灰度图片。

接下来我们通过image_np = np.array(image, 'uint8')将图片转换成了Numpy数组,Numpy数组的逻辑结构和普通的数组无异,但是是经过优化的。

为了获取到id,我们将图片的路径分裂一下并获取相关信息,即image_id = int(os.path.split(image_path)[-1].split(".")[1])

接下来的一个循环for (x, y, w, h) in faces则是将图片和id都添加在list中。

再return一下即可。

训练

差不多完成了,现在我们调用一下这个函数,然后将我们的数据喂给识别器去训练吧。

faces, Ids = get_images_and_labels('dataSet')

recognizer.train(faces, np.array(Ids))

recognizer.save('trainner/trainner.yml')

现在只要我们运行这些代码,程序就会在trainner文件夹中创建一个trainner.yml文件。

这个yml文件,存着我们的训练好的数据,以后识别会用到的。

完整代码

import cv2

import os

import numpy as np

from PIL import Image

# recognizer = cv2.createLBPHFaceRecognizer()

detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

recognizer = cv2.face.LBPHFaceRecognizer_create()

def get_images_and_labels(path):

image_paths = [os.path.join(path, f) for f in os.listdir(path)]

face_samples = []

ids = []

for image_path in image_paths:

image = Image.open(image_path).convert('L')

image_np = np.array(image, 'uint8')

if os.path.split(image_path)[-1].split(".")[-1] != 'jpg':

continue

image_id = int(os.path.split(image_path)[-1].split(".")[1])

faces = detector.detectMultiScale(image_np)

for (x, y, w, h) in faces:

face_samples.append(image_np[y:y + h, x:x + w])

ids.append(image_id)

return face_samples, ids

faces, Ids = get_images_and_labels('dataSet')

recognizer.train(faces, np.array(Ids))

recognizer.save('trainner/trainner.yml')

先这样吧

若有错误之处请指出,更多地关注煎鱼。

python识别人脸多种属性_OpenCV-Python(3)训练一个人脸识别器相关推荐

  1. python识别人脸多种属性_用Python识别人脸,人种等各种信息

    最近几天了解了一下人脸识别,应用场景可以是图片标注,商品图和广告图中有没有模特,有几个模特,模特的性别,年龄,颜值,表情等数据的挖掘. 基础的识别用dlib来实现,dlib是一个机器学习的包,主要用C ...

  2. python识别人脸多种属性_9种人脸情绪识别、22类人脸属性、 15类皮肤质量识别,竹间智能要让情感机器人更理解人...

    撰文 | 邱陆陆 编辑 | 藤子 「我们希望做情感机器人,希望透过机器更智能地理解一个人.」随着计算能力的提升.神经网络的步步深入,配以图像识别.语音识别的人工智能已经逐渐变得能够「听见」.「看见」. ...

  3. 使用yolov3-tiny训练一个人脸检测器

    春节放假回家时,在北京西乘坐高铁进站时发现,现在出现了很多自助进站验证对pos机器,主要是对身份证和个人的照片进行匹配,判断是不是同一个人,无需人工check了,省时省力.春节在家没事干,想起了人脸识 ...

  4. python识别人脸多种属性_人脸检测及识别python实现系列(4)——卷积神经网络(CNN)入门...

    人脸检测及识别python实现系列(4)--卷积神经网络(CNN)入门 上篇博文我们准备好了2000张训练数据,接下来的几节我们将详细讲述如何利用这些数据训练我们的识别模型.前面说过,原博文给出的训练 ...

  5. python识别人脸多种属性_深度学习人脸识别仅9行python代码实现?同时高效处理100张相片?...

    随着人脸识别.视频结构化等计算视觉相关技术在安防.自动驾驶.手机等领域走向商业化应用阶段,计算视觉技术行业市场迎来大规模的爆发.伴随人脸识别.物体识别等分类.分割算法不断提升精度.计算视觉的核心算法深 ...

  6. python人脸实时检测_openCV+python实现人脸实时检测

    一.静态的图像人脸检测 import numpy as np import cv2 as cv path = 'haarcascade_frontalface_default.xml' face_ca ...

  7. python 人脸关键点检测_opencv+python+dlib人脸关键点检测、实时检测

    安装的是anaconde3.python3.7.3,3.7环境安装dlib太麻烦, 在anaconde3中新建环境python3.6.8, 在3.6环境下安装dlib-19.6.1-cp36-cp36 ...

  8. Python识别表格图_使用Python究竟可以做什么?下面是Python的3个主要应用

    原文传送门: https://medium.com/free-code-camp/what-can-you-do-with-python-the-3-main-applications-518db9a ...

  9. python识别文字坐标_【Python 教程】使用 Python 和大漠插件进行文字识别

    家里有一台win7系统的电脑,平时可以用来玩玩游戏消磨时间.但是有时候有一些重复的操作实在是无趣,所以打算写个脚本,让其自动化执行. 最终的目标就是把游戏里一些常用的操作都集合到脚本中去,且无序随机执 ...

最新文章

  1. Markdown 生成属于自己的电子书(pdf)
  2. c语言程序设计章节作业网上,C语言程序设计第17章在线测试
  3. 高级应用-路由协议配置
  4. 企业真的有必要购买WMS系统吗?
  5. centos 7 更换yum源
  6. linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
  7. 求解偏微分方程开源有限元软件deal.II学习--Step 3
  8. python学习_循环结构 and 类型判断
  9. JavaScript对滚动条的操作
  10. 判断是否是空对象_3分钟短文 | Laravel 查询结果检查是不是空,5个方法你别用错...
  11. AIML应答机器人(一)aiml简介
  12. 计算机二级考试c语言考试注意事项,计算机二级MS Office、ACCESS、二级C语言考试的注意事项...
  13. WinDriver_资料
  14. 活动目录备份和灾难恢复之手动备份与非授权还原
  15. windows无法访问共享文件 所有解决方法(非复制粘贴的烂大街处理方法)
  16. tensorflow学习笔记——获取训练数据集和测试数据集
  17. EOJ 1864 二分图匹配
  18. 笔记本电脑总是锁定计算机呢,笔记本电脑键盘锁定了怎么办有什么方法解锁
  19. 人类捕杀动物,吃动物就残忍了吗?
  20. 简易版牛奶布丁的做法 没烤箱照样做布丁

热门文章

  1. ubuntu apache php mysql phpmyadmin_Ubuntu下Apache+PHP+MySQL+phpMyAdmin的快速安装步骤
  2. 电商云里 Product bundling 的一些概念
  3. SAP UI5 初学者教程之七 - JSON 模型初探试读版
  4. 如何下载SAP Cloud for Customer UI技术模型的XML源代码到本地
  5. 一个讨论:SAP项目实施的顾问,需要花时间去调试代码了解技术细节吗
  6. SAP Spartacus由于导入module路径在服务器上不正确而导致的Travis build错误
  7. SAP Spartacus lock focus directive如何判断有没有focusable children
  8. Error: <spyOn> : handleError() method does not exist
  9. zone.js在bootstrap阶段对window对象里一些标准方法的注入逻辑
  10. SAP Spartacus cms-components.service.ts里的config.cmsComponents