opencv实现人脸识别(三) 训练图片模块
现在我们已经拍好了需要训练的图片,接下来就是进行训练
流程图:
我们在这里用到了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实现人脸识别(三) 训练图片模块的更多相关文章
- 基于 OpenCV 的人脸识别
基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...
- 转:基于开源项目OpenCV的人脸识别Demo版整理(不仅可以识别人脸,还可以识别眼睛鼻子嘴等)【模式识别中的翘楚】
文章来自于:http://blog.renren.com/share/246648717/8171467499 基于开源项目OpenCV的人脸识别Demo版整理(不仅可以识别人脸,还可以识别眼睛鼻子嘴 ...
- 使用OpenCV进行人脸识别
不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...
- PyQt5+Caffe+Opencv搭建人脸识别登录界面
PyQt5+Caffe+Opencv搭建人脸识别登录界面(转载) 最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的 ...
- 基于Python3.7和opencv的人脸识别(含数据收集,模型训练)
前言 第一次写博客,有点紧张和兴奋.废话不多说,直接进入正题.如果你渴望使你的电脑能够进行人脸识别:如果你不想了解什么c++.底层算法:如果你也不想买什么树莓派,安装什么几个G的opencv:如果你和 ...
- opencv实现人脸识别(五) 运用tkinter进行GUI绘制 整合人脸识别模块
因为之前学习过tkinter库,所以在学习了人脸识别模块的编写后, 打算绘制一个简单的GUI来应用人脸识别功能. 主界面如下所示: 签到打开在点开后直接进行人脸识别,如果成功则自动关闭视频窗口. 录入 ...
- opencv实现人脸识别(四) 人脸识别模块
到这一步就是进行人脸识别了. 流程图: 代码: import cv2 def recognize(cam): recognizer = cv2.face.LBPHFaceRecognizer_crea ...
- 【计算机视觉】基于OpenCV的人脸识别
一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...
- python中使用Opencv进行人脸识别
上一节讲到人脸检测,现在讲一下人脸识别.具体是通过程序采集图像并进行训练,并且基于这些训练的图像对人脸进行动态识别. 人脸识别前所需要的人脸库可以通过两种方式获得:1.自己从视频获取图像 2.从人 ...
随机推荐
- pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your path && FileNotFoundError: [WinError 2] 系统找不到指定的文件。
C:\Users\k\Desktop\test>python test.py Traceback (most recent call last): File , in run_tesseract ...
- redis之基础命令
一.redis介绍 1.redis特性 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件 redis是c语言编写的,支持数据持久化,是key-val ...
- c 判断数字是否有限
/* isfinite example */ #include <stdio.h> /* printf */ #include <math.h> /* isfinite, sq ...
- Leetcode题目322.零钱兑换(动态规划-中等)
题目描述: 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: c ...
- python 库 imgaug数据增强
安装及详细使用方法介绍: https://blog.csdn.net/qq_38451119/article/details/82428612 pip install imgaug 失败解决方法: 提 ...
- Linux下nginx配置https协议访问
一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/ ...
- Flask实现跨域请求的处理方法
https://blog.csdn.net/wangshu_liang/article/details/86490137 https://blog.csdn.net/a1241314660/artic ...
- CSS3常用属性及效果汇总
本文转载于<https://blog.csdn.net/lyznice/article/details/54575905> 一.2D效果属性 要使用这些属性,我们需要通过 transfor ...
- RAID概念记录
之前对RAID概念有一些基本的认知,这次同事培训k8s 的持久卷,提到了RAID的一些概念和用法,记录一下. RAID ( Redundant Array of Independent Disks ) ...
- Hystrix-基本概念(设计原则和两种隔离技术)
一.Hystrix是什么在微服务的架构系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务.有的时候某些依赖服务出现故障也是很正常的.Hystrix可以让我们在对服务间的调用进行控制 ...