现在我们已经拍好了需要训练的图片,接下来就是进行训练

流程图:

我们在这里用到了numpy库,NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。

使用numpy的目的是减少python代码中的循环,以及提高数组运算的效率。

对于numpy性能的提升程度,我们可以从这段代码中直观感受到:

import datetime as dt
import numpy as np n = 100000
start = dt.datetime.now()
A, B = [], []
for i in range(n):
A.append(i ** 2)
B.append(i ** 3)
C = []
for a,b in zip(A,B):
C.append(a+b) t = (dt.datetime.now() -start).microseconds
print(t)
start = dt.datetime.now()
A, B = np.arange(n)**2, np.arange(n)**3
C = A+B
t = (dt.datetime.now() - start).microseconds
print(t)

我们对列表进行了同样的操作,然后输出两种操作所需要的时间(微秒),可以看到numpy在效率上提高了两个数量级

训练模块的源代码:

import numpy as np
from PIL import Image
import os
import cv2 def train():
path = 'D:/FaceData' # 创建opencv中的LBPH算法的人脸识别器
recognizer = cv2.face.LBPHFaceRecognizer_create() # 依然是运用人脸识别分类器
detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml') def getImagesAndLabels(path):
# os.path.join()函数:
# 连接两个或更多的路径名组件
# os.listdir() 方法
# 用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序排列
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') # 将原图片的多维数组转为numpy的数组
img_numpy = np.array(PIL_img, 'uint8') # id对应的值是当前用户的第几张照片
id = int(os.path.split(imagePath)[-1].split('.')[1]) # 检测人脸
faces = detector.detectMultiScale(img_numpy)
for(x, y, w, h) in faces:
# 将人脸范围的numpy数组数据保存到列表中
faceSamples.append(img_numpy[y : y + h, x : x + w])
# 将id值保存到列表中
ids.append(id)
return faceSamples, ids faces, ids = getImagesAndLabels(path) # 对图片进行训练,将训练文件保存在指定路径
recognizer.train(faces, np.array(ids))
recognizer.write(r'face_trainer\trainer.yml')
print('{0} faces trained.'.format(len(np.unique(ids)))) if __name__ == '__main__':
train()

opencv实现人脸识别(三) 训练图片模块的更多相关文章

  1. 基于 OpenCV 的人脸识别

    基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...

  2. 转:基于开源项目OpenCV的人脸识别Demo版整理(不仅可以识别人脸,还可以识别眼睛鼻子嘴等)【模式识别中的翘楚】

    文章来自于:http://blog.renren.com/share/246648717/8171467499 基于开源项目OpenCV的人脸识别Demo版整理(不仅可以识别人脸,还可以识别眼睛鼻子嘴 ...

  3. 使用OpenCV进行人脸识别

    不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...

  4. PyQt5+Caffe+Opencv搭建人脸识别登录界面

    PyQt5+Caffe+Opencv搭建人脸识别登录界面(转载) 最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的 ...

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

    前言 第一次写博客,有点紧张和兴奋.废话不多说,直接进入正题.如果你渴望使你的电脑能够进行人脸识别:如果你不想了解什么c++.底层算法:如果你也不想买什么树莓派,安装什么几个G的opencv:如果你和 ...

  6. opencv实现人脸识别(五) 运用tkinter进行GUI绘制 整合人脸识别模块

    因为之前学习过tkinter库,所以在学习了人脸识别模块的编写后, 打算绘制一个简单的GUI来应用人脸识别功能. 主界面如下所示: 签到打开在点开后直接进行人脸识别,如果成功则自动关闭视频窗口. 录入 ...

  7. opencv实现人脸识别(四) 人脸识别模块

    到这一步就是进行人脸识别了. 流程图: 代码: import cv2 def recognize(cam): recognizer = cv2.face.LBPHFaceRecognizer_crea ...

  8. 【计算机视觉】基于OpenCV的人脸识别

    一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...

  9. python中使用Opencv进行人脸识别

    上一节讲到人脸检测,现在讲一下人脸识别.具体是通过程序采集图像并进行训练,并且基于这些训练的图像对人脸进行动态识别. 人脸识别前所需要的人脸库可以通过两种方式获得:1.自己从视频获取图像   2.从人 ...

随机推荐

  1. redhat7.4安装git(按照官网从源码安装)

    按照官方文档建议使用源码安装 1.为什么不用yum安装 yum安装确实简单,只用一行命令就可以了,但是yum安装的版本太低. //安装前使用info查看git版本信息等 yum info git yu ...

  2. 浅谈 es6 箭头函数, reduce函数介绍

    今天来谈一下箭头函数, es6的新特性 首先我们来看下箭头函数长什么样子, let result = (param1, param2) => param1+param2; 上述代码 按照以前书写 ...

  3. Java排序之计数排序

    Java排序之计数排序 计数排序思路 计数排序适用于有明确范围的数组,比如给定一个数组,且知道所有值得范围是[m,n].这个时候可以使用一个n-m+1长度的数组,待排序的数组就可以散在这个数组上,数组 ...

  4. Pluck CMS 4.7.10远程代码执行漏洞分析

    本文首发于先知: https://xz.aliyun.com/t/6486 0x01漏洞描述 Pluck是用php编写的一款的小型CMS影响版本:Pluck CMS Pluck CMS 4.7.10( ...

  5. ArcGIS超级工具SPTOOLS-线封闭,点集转面

    一.线封闭 操作视频:https://weibo.com/tv/v/HvyvbAxKh?fid=1034:4375207666991674 将末端不闭合线,自动生成闭合的线,效果如下 原始线:末端不闭 ...

  6. (main)贝叶斯统计 | 贝叶斯定理 | 贝叶斯推断 | 贝叶斯线性回归 | Bayes' Theorem

    2019年08月31日更新 看了一篇发在NM上的文章才又明白了贝叶斯方法的重要性和普适性,结合目前最火的DL,会有意想不到的结果. 目前一些最直觉性的理解: 概率的核心就是可能性空间一定,三体世界不会 ...

  7. centos7 - nginx配置安装phpmyadmin

    原文  https://www.linuxidc.com/Linux/2017-10/147556.htm 使用Nginx搭建phpMyAdmin   Nginx有什么用? Nginx可读作Engin ...

  8. 关于hexo-abbrlink链接undefined

    关于hexo-abbrlink hexo-abbrlink是一个hexo博客链接永久化的解决方案 支持使用不同的算法和进制对文章链接进行转换 算法 进制 生成链接 crc16 hex https:// ...

  9. 轻量级通用上采样算子-CARAFE

    转载:https://zhuanlan.zhihu.com/p/76063768 前言 这篇论文被 ICCV 2019 接收为 oral presentation.之前我们主要研究物体检测(例如 Hy ...

  10. 请求路径@PathVariable注释中有点.英文句号的问题(忽略英文句号后面的后缀)

    前端页面请求地址 <video id=example-video width=960 height=540 class="video-js vjs-default-skin" ...