Python系列之三——人脸检测、人脸识别

这是关于人脸的又一篇原创!

之前有利用C++和OpenCv写过人脸识别的系列文章,对于人脸识别的基本理解和步骤流程等基本知识不做反复叙述。比詹小白还要白的童鞋可以查看往期文章进行了解噢

1.人脸识别(一)——从零说起

2.人脸识别(二)——训练分类器

3.人脸识别(二)——训练分类器的补充说明

4.人脸识别(三)——源码放送

一、人脸检测

python版人脸检测基本上可以参照C++版本的程序,根据语法不同进行改写即可。

1.输入为包含人脸的图片时

这种情况较为简单,只是直接使用了opencv库的训练好的人脸检测模型~其代码如下所示:(具体函数和方法和c++情况下一样,不反复叙述)

 1#encoding=utf-8
 2import cv2
 3import numpy
 4face_patterns = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')  #加载分类器,在opencv库内
 5sample_image = cv2.imread('image4.jpg')  #这里是当输入为图片而不是摄像头采集时
 6faces = face_patterns.detectMultiScale(sample_image,scaleFactor=1.1,minNeighbors=5,minSize=(80, 80))
 7for (x, y, w, h) in faces:
 8    cv2.rectangle(sample_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
 9cv2.imshow('face', sample_image);
10cv2.waitKey(0)
11cv2.destroyAllWindows()

程序将图像中的人脸检测出来并框出来。运行结果如下所示:

2.输入为摄像头实时采集的图像时

这种情况和第一种情况大体类似,唯一的不同在于输入图像输入不来源于静止图片,而是摄像头的实时采集图像。测试效果不进行展示了(怕帅到你们

 1#encoding=utf-8
 2import cv2
 3import numpy
 4face_patterns = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')  #加载分类器,在opencv库内
 5camera = cv2.VideoCapture(0) #这里是利用摄像头采集,打开摄像头操作
 6while camera.isOpened:
 7    #利用read方法读取摄像头的某一帧图片
 8    (ok, sample_image) = camera.read() 
 9    if not ok:
10        break
11    faces = face_patterns.detectMultiScale(sample_image,scaleFactor=1.1,minNeighbors=5,minSize=(80, 80))
12    for (x, y, w, h) in faces:
13        cv2.rectangle(sample_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
14    cv2.imshow('face', sample_image);
15    if cv2.waitKey(10)&0xFF==ord('q'):#按下q,退出循环
16        break 
17camera.release()
18#cv2.waitKey(0)
19cv2.destroyAllWindows()

二、人脸识别

人脸识别也可以和检测一样参照c++版本的程序,但是学python时候接触到一个很牛*的模块,这里做图片集的人脸识别进行介绍。

首先,这是所谓的niubi模块是face_recognition库模块,该库使用 dlib 顶尖的深度学习人脸识别技术构建,在户外脸部检测数据库基准(Labeled Faces in the Wild benchmark)上的准确率高达 99.38%。

1.模块的安装

face_recognition 的安装真的很拼人品!!linux系统一装就好,windows系统折腾来捯饬去炒鸡费劲!!还好我是python3.6版本,按照网上的一些教程也算是安装好了,(cmake、dlib啥的很难受)。

简单的说,用pip install指令进行安装还是比较容易的。一条指令即可,如果在安装dlib时出错那就可怜你得捯饬一会了~~

pip install face_recognition

2.代码实现

重点有三个,主要如下:

face_recognition.load_image_file 加载训练的对象,这里仅仅是三个类,各类一张图片 face_recognition.face_encodings 对加载好的对象,利用face_recognition中的方法进行特征识别,用于后面分类 face_recognition.compare_faces 将待分类识别的图像按照相同方法进行特征识别,并将其特征与指定对象特征对比,进行判断

以乔布斯、奥巴马和无名为例~

代码如下:

 1# -*- coding: utf-8 -*-
 2import cv2
 3import face_recognition
 4jobs_image = face_recognition.load_image_file("jobs.jpg");#乔布斯
 5obama_image = face_recognition.load_image_file("obama.jpg");#奥巴马
 6unknown_image = face_recognition.load_image_file("unknown.jpg");#无名人士
 7jobs_encoding = face_recognition.face_encodings(jobs_image)[0]
 8obama_encoding = face_recognition.face_encodings(obama_image)[0]
 9unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
10#重点是:compare_face
11results = face_recognition.compare_faces([jobs_encoding, obama_encoding], unknown_encoding )
12labels = ['jobs', 'obama']
13print('results:'+str(results))
14for i in range(0, len(results)):
15    if results[i] == True:
16        print('The person is:'+labels[i])

代码通俗易懂(python的一大特点~),其运行结果是以文本形式指出识别对象。结果如下:

1>>>results:[False, True]
2>>>The person is:obama

原文发布于微信公众号 - 小小詹同学(xiaoxiaozhantongxue)

原文发表时间:2018-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

通过Amazon Machine Learning建立一个数值回归模型

1805
来自专栏机器之心

教程 | 无需复杂深度学习算法,基于计算机视觉使用Python和OpenCV计算道路交通

6148
来自专栏AI科技评论

开发 | 低配硬件就不能运行深度神经网络了?手把手教你克服“杀牛用鸡刀”难题

如果对深度学习有所了解的小伙伴们想必都知道,深度学习需要使用强大的服务器、加速嵌入式平台(如NVIDIA的Jetson)来运行深度学习算法,然而这也同样意味着不...

3955
来自专栏量子位

那个爆火的“梦中修炼”AI,你也能用Keras搭一个了

上月,量子位报道了Google Brain的David Ha和“LSTM之父”Jürgen Schmidhuber的论文World Models。论文中习得周星...

1183
来自专栏MixLab科技+设计实验室

Javascript也可以玩机器学习

前端工程师们~js也可以用来玩机器学习的。 今天看到这些相关的资源,分享给大家~~ 数据可视化这块应该都算比较熟悉的了,建议从通用机器学习库开始学习。 既然有这...

3586
来自专栏瓜大三哥

Scrambling/Descrambling

信道加扰 加扰原因 在通信中,如果出现连"0"和连"1",则 l产生交调串音。连续具有单频分量,与载波或者已调信号产生交调,对临近信道带来干扰。 l可能丢失同步...

3367
来自专栏机器之心

资源 | DeepPavlov:一个训练对话系统和聊天机器人的开源库

选自GitHub 机器之心编译 参与:思源、刘晓坤 本文介绍了一个构建端到端对话系统和训练聊天机器人的开源项目 DeepPavlov,该开源库的构建基于 Ten...

3884
来自专栏杨熹的专栏

什么是 Q-learning

在这个游戏中,agent 从一个给定的位置开始,即起始状态。 在不穿越迷宫墙壁的前提下,在每个状态时,都可以选择上下左右四个方向走一步,或者原地不动, 上下...

3832
来自专栏腾讯大讲堂的专栏

微信亿级用户异常检测框架的设计与实践

月活用户越高的互联网产品,被黑产盯上的可能性就越大。本文将带你一窥究竟,微信是怎么做异常检测框架的?

1.6K8
来自专栏鸿的学习笔记

用python讲故事(中)

5. Assemble a corpus of data to validate subjective(human) interpretation

773

扫码关注云+社区

领取腾讯云代金券