先来普及一下概念, 计算机对人脸是如何识别的呢? 或者说图像是如何识别的。主要是获取单张图片的特征值记录了特征值以后,如果下一张图片来了以后两张图片特征值进行对比,如果相似度很高那么计算机就认定这两个是一类图(当然这是需要算法来实现的)

我写的这个是怎么实现的呢,一组训练集训练要识别的人的图像来进行特征提取保存到模型中,在通过摄像头返回的图像进行处理并最后展现出来

直接上代码:   ---- 抱歉由于不知道插入代码后怎么写文字我就全写这了。代码不算完善,但是识别没问题   使用时修改   train_path 和 fd 的人脸描述.xml文件路径就ok了

训练文件结构描述 :  train_path文件结构  train_path -> LL(老李) -> 所有人脸图片

face.xml 文件下载地址 :  http://note.youdao.com/noteshare?id=a74c5cffa145ff5341560d6c269702cb&sub=6A602009232C468CBE83114E840D679E

# 抱歉由于本人不会用 github 所以大家用有道云下载吧(捂脸笑)

 # -*- coding: utf-8 -*-
from __future__ import unicode_literals
# 操作文件
import os
# 科学计算
import numpy as np
# 图像识别
import cv2 as cv
# 数据预处理, 该项目中只使用了标签编码
import sklearn.preprocessing as sp def load_imgs(directory):
'''加载 directory 该文件夹下所有以 .jpg 结尾的图片'''
# 识别 系统环境 自动分配当前系统的路径分隔符并替换
directory = os.path.normpath(directory)
# 判断当前路径是否为存在
if not os.path.isdir(directory):
# 手动抛出异常 biu biu biu
raise IOError("The directory '" + directory + "' doesn't exist!")
# 创建图片集合 用于存储文件夹名和该文件夹下所有的图片
faces = {}
# os.walk(directory) 获取当前文件夹下所有的文件夹以及文件
# curdir: 当前文件夹路径
# subdirs: 当前文件夹下所有文件夹 (列表)
# files: 当前文件夹下所有文件 (列表)
for curdir, subdirs, files in os.walk(directory):
# 首先便利所有的文件 筛选.jpg结尾文件并循环
for jpeg in (file for file in files if file.endswith('.jpg')):
# 拼接图片路径
path = os.path.join(curdir, jpeg)
# 获取该图片分类名称
label = path.split(os.path.sep)[-2]
# 判断当前key值是否存在图片集合中, 如果为空则创建该键并赋值空列表
# 否则给图片集合中的 key 添加图片路径
if label not in faces:
faces[label] = []
faces[label].append(path)
# 返回图片集合
return faces def LBPHModel(fd, codec, train_path):
'''
-------------------
参数说明: fd, codec, [model_path]
fd: Haar-like(人脸特征模型对象)
codec: LabelEncoder(标签编码器对象)
model_path: 服用模型路径(功能未实现, 没找到读取的函数...)
-------------------
返回: 训练后的模型对象
'''
# 加载当前文件加下所有.jpg结尾的图片
train_faces = load_imgs(train_path) # 'traom_imgs'
# 将所有标签放入编码器进行训练
codec.fit(list(train_faces.keys()))
# 创建空的训练集数组x y
train_x, train_y = [], []
# 循环所有训练组
for label, filenames in train_faces.items():
# 循环当前样本组中的图片
for filename in filenames:
# 读取图片
image = cv.imread(filename)
# 将图片转成灰度图
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
# 获取人脸特征位置
faces = fd.detectMultiScale(
gray, 1.1, 2, minSize=(100, 100))
# 循环脸部特征数组
for l, t, w, h in faces:
# 将图片中的脸部特征裁剪下来
train_x.append(gray[t:t + h, l:l + w])
# 标签编码结果存储
train_y.append(codec.transform([label])[0])
train_y = np.array(train_y)
# 创建LBPH人脸检测器
model = cv.face.LBPHFaceRecognizer_create()
# 对训练集进行训练
model.train(train_x, train_y)
return model if __name__ == "__main__":
# 训练集图片存储路径
train_path = 'train_imgs'
# 读取人脸描述文件, 构建人脸检测器
fd = cv.CascadeClassifier('face.xml')
# 创建标签编码器
codec = sp.LabelEncoder()
# 获取model
model = LBPHModel(fd, codec, train_path)
# 打开视频捕捉设备
vc = cv.VideoCapture(0)
while True:
# 读取视频帧
frame = vc.read()[1]
# 反转图片
frame = cv.flip(frame, 1)
# print(frame)
# 人脸位置检测, 返回数组
faces = fd.detectMultiScale(frame, 1.3, 5)
# 循环人脸位置数组
for l, t, w, h in faces:
# 给人脸描边
cv.rectangle(frame, (l, t), (l + w, t + h),
(255, 0, 0), 4)
# 复制原图片文本
gray = frame.copy()
# 将图片变化成灰度图
gray = cv.cvtColor(gray, cv.COLOR_BGR2GRAY)
# 对面部特征进行识别
pred_test_y = model.predict(gray[t:t + h, l:l + w])[0]
# 将预测后的结果进行标签解码
face_name = codec.inverse_transform([pred_test_y])[0]
# 给图片添加文本 图片矩阵, 添加文本名称, 设置文本显示位置,
# 字体样式, 字体大小, 字体颜色, 字体粗细
cv.putText(frame, face_name, (l + 5, t - 15),
cv.FONT_HERSHEY_SIMPLEX, 1,
(255, 255, 255), 3)
# 打印名称
# print(face_name) # 显示图片
cv.imshow('VideoCapture', frame)
# 等待按下ESC键退出, 每次等待33毫秒
if cv.waitKey(33) == 27:
break
# 关闭视频捕捉设备
vc.release()
# 关闭视频窗口
cv.destroyAllWindows()

基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释的更多相关文章

  1. 万张PubFig人脸数据实现基于python+OpenCV的人脸特征定位程序(1)

    在最近刷今日头条以及其他媒体软件时,经常会发现一些AI换脸的视频,于是我想,可不可以自己实现一个可以进行人脸识别的软件程序.我的具体流程是先配合python网络爬虫先进行万张PubFig人脸公共图片的 ...

  2. 基于Python的开源人脸识别库:离线识别率高达99.38%

    项目地址:https://github.com/ageitgey/face_recognition#face-recognition 本文的模型使用了C++工具箱dlib基于深度学习的最新人脸识别方法 ...

  3. 关于opencv中人脸识别主函数的部分注释详解。

    近段时间在搞opencv的视频人脸识别,无奈自带的分类器的准确度,实在是不怎么样,但又能怎样呢?自己又研究不清楚各大类检测算法. 正所谓,功能是由函数完成的,于是自己便看cvHaarDetectObj ...

  4. 【Python+OpenCV】人脸识别基于环境Windows+Python3 version_3(Anaconda3)+OpenCV3.4.3安装配置最新版安装配置教程

    注:本次安装因为我要安装的是win10(64bit)python3.7与OpenCV3.4.3教程(当下最新版,记录下时间2018-11-17),实际中这个教程的方法对于win10,32位又或是64位 ...

  5. 基于 OpenCV 的人脸识别

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

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

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

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

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

  8. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  9. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

随机推荐

  1. 对Office文档进行授权

    Microsoft.Office.Interop.Word.ApplicationClass app = new Microsoft.Office.Interop.Word.ApplicationCl ...

  2. IDEA中如何使用svn

    1.安装tortoiseSVN客户端时,这里一定要勾选上,否则使用时会报错. 2.安装好之后,想启用idea的SVN插件还需要在idea配置一下,file - setting 按钮打开设置界面 或者( ...

  3. hdu 3003 Pupu

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3003 题目大意:一种动物身上有n种不同的皮肤,每种皮肤有透明很不透明两种状态,经过一天的日晒,透明的可 ...

  4. hdu 2016 数据的交换输出

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2016 题目大意:把最小的和第一个交换并输出.注意格式哦! #include <stdio.h&g ...

  5. mhn 实际部署记录

    新增蜜罐时需要注意,server/collector_v2.py中的DEFAULT_CHANNELS,没有注册这个事件是接收不到新蜜罐的消息的

  6. algorithm ch7 QuickSort

    快速排序是基于分治模式的排序,它将数组a[p,...,r]分成两个子数组a[p,...q-1],a[q+1,...,r],使得a[p,...,q-1]中每个元素都小于a[q],而且小于等于a[q+1, ...

  7. POJ1080(LCS变形)

    Human Gene Functions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  8. HDU2444(判断是否为二分图,求最大匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  9. locust===注意事项

    1.安装包在:微盘 2.运行命令是:locust -f load_test.py --host=https://www.baidu.com 3.本地打开的是:http://localhost:8089 ...

  10. Oracle基础 12 对象 objects 同义词/序列/试图/索引

    --创建同义词create public synonym employees for hr.employees;  --公共同义词需要 create public synonym 权限 表的所有用户授 ...