一个人脸识别的例子

程序中用到了公共数据集, 欢迎去我的git上下载源码,源码里带有数据集

git:https://github.com/linyi0604/Computer-Vision

脚本中一个三个函数

第一个: 调用本机摄像头采集一些自己的照片 作为数据集的一部分

第二个:把自己的照片 和公共数据集照片一并读取 作为输入数据

第三个: 预测函数  调用第二个函数拿到x 和y 进行训练后 开启摄像头 进行预测

 # coding:utf-8

 import cv2
import os
import numpy as np # 1 生成人脸识别数据
# 图像是灰度格式,后缀名.pgm
# 图像是正方形 图像大小要一样 在这里使用200*200
def generate():
# 加载检测图像中人脸位置的对象, xml文件需要去opencv文件夹里面找, 放到项目里面来引入
face_cascade = cv2.CascadeClassifier("../data/haarcascade_frontalface_default.xml")
# 调用本机摄像头
camera = cv2.VideoCapture(0)
count = 0
# 读取摄像头
while True:
# 读入 帧
ret, frame = camera.read()
# 变为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸位置
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 将图片中人脸位置单独拿出来改变成200*200大小的图片 存入本地 作为数据集
for (x, y, w, h) in faces:
img = cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
f = cv2.resize(gray[y:y+h, x:x+w], (200, 200))
cv2.imwrite("./data/%s.pgm" % str(count), f)
count += 1 cv2.imshow("camera", frame)
# 如果按键q就退出 否则等50毫秒
if cv2.waitKey(50) & 0xff == ord("q"):
break camera.release()
cv2.destroyAllWindows() # 读取生成好的数据 在我项目目录下整理好的
def readImages():
x, y = [], []
path = "./data/faces/"
image_file = os.listdir(path)
image_files = [path + i for i in image_file]
for file in image_files:
images = os.listdir(file)
label = file.split("/")[-1][1:]
for i in images:
img = cv2.imread(file + "/" + i, cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (200, 200))
x.append(np.asarray(img, dtype=np.uint8))
y.append(int(label)) y = np.asarray(y, dtype=np.int32)
return x, y # 检测人脸
def face_rec():
# 获取数据
x, y = readImages() # 人脸识别的模型
model = cv2.face.EigenFaceRecognizer_create()
# fisherfaces算法的模型
# model = cv2.face.FisherFaceRecognizer_create()
# LBPH算法的模型
# model = cv2.face.LBPHFaceRecognizer_create()
"""
Eigenfaces和Fisherfaces 预测时候产生0到20000的评分
低于4000 5000 的评分都是相当可靠的
LBPH 产生评分不同,低于50是可靠的 高于80是不可靠的
""" # 训练模型
model.train(np.asarray(x), np.asarray(y)) # 开摄像头
camera = cv2.VideoCapture(0)
# 加载检测人脸对象
face_cascade = cv2.CascadeClassifier("../data/haarcascade_frontalface_default.xml")
while True:
# 读取当前帧
read, img = camera.read()
# 当前帧下检测人脸
faces = face_cascade.detectMultiScale(img, 1.3, 5)
for (x, y, w, h) in faces:
# 画出人脸
img = cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 转成灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 拿出人脸部分
roi = gray[x: x+w, y: y+h]
try:
# 更改大小
roi = cv2.resize(roi, (200, 200), interpolation=cv2.INTER_LINEAR)
# 进行预测
params = model.predict(roi)
# 在图像上写预测结果
# 1.2是字体大小 2是粗细
img = cv2.putText(img, str(params[0]), (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 255, 0), 2)
# prams是一个二元素列表, 第一个元素是预测结果,第二个元素是得分情况
print(params) except Exception as e:
print(e)
cv2.imshow("detect face", img)
if cv2.waitKey(5) & 0xff == ord("q"):
break cv2.destroyAllWindows() if __name__ == '__main__':
# 调用摄像头 采集人脸照片数据
# generate() # 检测人脸
face_rec()

python opencv3 人脸识别的例子的更多相关文章

  1. 手把手教你如何用 OpenCV + Python 实现人脸识别

    下午的时候,配好了OpenCV的Python环境,OpenCV的Python环境搭建.于是迫不及待的想体验一下opencv的人脸识别,如下文. 必备知识 Haar-like 通俗的来讲,就是作为人脸特 ...

  2. 用Python进行人脸识别

    本文的模型使用了C++工具箱 dlib 基于深度学习的最新人脸识别方法,基于户外脸部数据测试库Labeled Faces in the Wild 的基准水平来说,达到了99.38%的准确率. dlib ...

  3. 「Python」人脸识别应用

    人脸识别主要步骤: face_recognition 库的安装 安装此库,首先需要安装编译dlib,此处我们偷个懒,安装软件Anaconda(大牛绕过),此软件预装了dlib. 安装好后,我们直接通过 ...

  4. 使用OpenCV和Python进行人脸识别

    介绍 人脸识别是什么?或识别是什么?当你看到一个苹果时,你的大脑会立刻告诉你这是一个苹果.在这个过程中,你的大脑告诉你这是一个苹果水果,用简单的语言来说就是识别.那么什么是人脸识别呢?我肯定你猜对了. ...

  5. 动手实操:如何用 Python 实现人脸识别,证明这个杨幂是那个杨幂?

    当前,人脸识别应用于许多领域,如支付宝的用户认证,许多的能识别人心情的 AI,也就是人的面部表情,还有能分析人的年龄等等,而这里面有着许多的难度,在这里我想要分享的是一个利用七牛 SDK 简单的实现人 ...

  6. 一种基于python的人脸识别开源系统

    今天在搜索人脸识别的文章时,无意中搜到一个比较开源代码,介绍说是这个系统人脸的识别率 是比较高的,可以达到:99.38%.这么高的识别率,着实把我吓了一跳.抱着实事求是的态度.个人 就做了一些验证和研 ...

  7. python通过人脸识别全面分析好友,一起看透你的“朋友圈”

    微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友 ...

  8. opencv python训练人脸识别

    总计分为三个步骤 一.捕获人脸照片 二.对捕获的照片进行训练 三.加载训练的数据,识别 使用python3.6.8,opencv,numpy,pil 第一步:通过笔记本前置摄像头捕获脸部图片 将捕获的 ...

  9. Python实现人脸识别

    识别图片 #coding=utf-8 import requests,cv2 import re import os import bs4 #2.读取图片 filename = 'E:/Python/ ...

随机推荐

  1. 图片压缩-KMeans

    下面给大家一起分享使用KMeans自动聚类,压缩图片像素点.每种图片可能他们的维度都不同,比如jpg一共有(w,h,3)三维,但是灰度图只有一维(w,h,1),也有四维的图片(w,h,4)等等.我们可 ...

  2. JS设计模式——7.工厂模式(概念)

    工厂模式 本章讨论两种工厂模式: 简单工厂模式 使用一个类(通常是一个单体)来生成实例. 使用场景:假设你想开几个自行车商店(创建自行车实例,组装它,清洗它,出售它),每个店都有几种型号的自行车出售. ...

  3. LINUX vim 修改文件 退出

    vim 保存退出, 先按ESC ,然后:wq(保存退出)W:write,写入 Q:quit,退出, 也可以直接输入X,代表WQ,也是保存退出 或者 先按ESC,再按shift+ZZ 也是保存退出 正常 ...

  4. Android Bander设计与实现 - 设计

    Binder Android IPC Linux 内核 驱动 摘要 Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥有管道,system V IPC,socket等IPC ...

  5. 002_curl及postman专题

    一. 步骤 1: 下载cURL工具 使用您的Windows机器从cURL web站点下载最新版本的cURL: (1) 通常情况下,多数的Windows用户可以从官网下载页面http://curl.ha ...

  6. 洛谷P1120 小木棍(升级版)

    传送门啦 一道经典的搜索剪枝题,不废话,步入正题. 分析: 一.输入时手动过滤不合法的情况 二.很明显我们要枚举把哪些棍子拼接成原来的长棍,而原始长度(原来的长棍的长度)都相等,因此我们可以在 $ d ...

  7. 使用html+css+js实现魔性的舞蹈

    使用html+css+js实现魔性的舞蹈,让我们燥起来!!! 效果图: 代码如下,复制代码即可使用: <!DOCTYPE html> <html > <head> ...

  8. java 局部内部类

    可以在代码块里创建内部类,典型的方法是在一个方法体的里面创建,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是可以访问当前代码块的常量,以及此外围类的所有成员,下面分别对局部内部类和匿名内部 ...

  9. Centos之帮助命令

    帮助命令man  (manual) 比如我们可以看下man命令的解释 [root@localhost ~]# man man MAN(1)                               ...

  10. SVN入门教程总结

    参考: SVN使用笔记 SVN入门必备教程 一看就懂 SVN使用教程总结 版本控制器:SVN教程 菜鸟教程之SVN教程 极客学院之SVN教程 SVN(SubVersion)简介: 为什么要使用SVN( ...