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

流程图:

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

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

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

  1. import datetime as dt
  2. import numpy as np
  3.  
  4. n = 100000
  5. start = dt.datetime.now()
  6. A, B = [], []
  7. for i in range(n):
  8. A.append(i ** 2)
  9. B.append(i ** 3)
  10. C = []
  11. for a,b in zip(A,B):
  12. C.append(a+b)
  13.  
  14. t = (dt.datetime.now() -start).microseconds
  15. print(t)
  16. start = dt.datetime.now()
  17. A, B = np.arange(n)**2, np.arange(n)**3
  18. C = A+B
  19. t = (dt.datetime.now() - start).microseconds
  20. print(t)

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

训练模块的源代码:

  1. import numpy as np
  2. from PIL import Image
  3. import os
  4. import cv2
  5.  
  6. def train():
  7. path = 'D:/FaceData'
  8.  
  9. # 创建opencv中的LBPH算法的人脸识别器
  10. recognizer = cv2.face.LBPHFaceRecognizer_create()
  11.  
  12. # 依然是运用人脸识别分类器
  13. detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
  14.  
  15. def getImagesAndLabels(path):
  16. # os.path.join()函数:
  17. # 连接两个或更多的路径名组件
  18. # os.listdir() 方法
  19. # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序排列
  20. imagePaths = [os.path.join(path, f)for f in os.listdir(path)]
  21.  
  22. faceSamples = []
  23. ids = []
  24.  
  25. # 遍历每一张拍到的图片
  26. for imagePath in imagePaths:
  27. # 打开图片,并转换成灰度图
  28. PIL_img = Image.open(imagePath).convert('L')
  29.  
  30. # 将原图片的多维数组转为numpy的数组
  31. img_numpy = np.array(PIL_img, 'uint8')
  32.  
  33. # id对应的值是当前用户的第几张照片
  34. id = int(os.path.split(imagePath)[-1].split('.')[1])
  35.  
  36. # 检测人脸
  37. faces = detector.detectMultiScale(img_numpy)
  38. for(x, y, w, h) in faces:
  39. # 将人脸范围的numpy数组数据保存到列表中
  40. faceSamples.append(img_numpy[y : y + h, x : x + w])
  41. # 将id值保存到列表中
  42. ids.append(id)
  43. return faceSamples, ids
  44.  
  45. faces, ids = getImagesAndLabels(path)
  46.  
  47. # 对图片进行训练,将训练文件保存在指定路径
  48. recognizer.train(faces, np.array(ids))
  49. recognizer.write(r'face_trainer\trainer.yml')
  50. print('{0} faces trained.'.format(len(np.unique(ids))))
  51.  
  52. if __name__ == '__main__':
  53. 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. 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 ...

  2. redis之基础命令

    一.redis介绍 1.redis特性 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件 redis是c语言编写的,支持数据持久化,是key-val ...

  3. c 判断数字是否有限

    /* isfinite example */ #include <stdio.h> /* printf */ #include <math.h> /* isfinite, sq ...

  4. Leetcode题目322.零钱兑换(动态规划-中等)

    题目描述: 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: c ...

  5. python 库 imgaug数据增强

    安装及详细使用方法介绍: https://blog.csdn.net/qq_38451119/article/details/82428612 pip install imgaug 失败解决方法: 提 ...

  6. Linux下nginx配置https协议访问

    一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/ ...

  7. Flask实现跨域请求的处理方法

    https://blog.csdn.net/wangshu_liang/article/details/86490137 https://blog.csdn.net/a1241314660/artic ...

  8. CSS3常用属性及效果汇总

    本文转载于<https://blog.csdn.net/lyznice/article/details/54575905> 一.2D效果属性 要使用这些属性,我们需要通过 transfor ...

  9. RAID概念记录

    之前对RAID概念有一些基本的认知,这次同事培训k8s 的持久卷,提到了RAID的一些概念和用法,记录一下. RAID ( Redundant Array of Independent Disks ) ...

  10. Hystrix-基本概念(设计原则和两种隔离技术)

    一.Hystrix是什么在微服务的架构系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务.有的时候某些依赖服务出现故障也是很正常的.Hystrix可以让我们在对服务间的调用进行控制 ...