7行python代码的人脸识别(代码片段)

半吊子全栈工匠 半吊子全栈工匠     2022-11-30     206

关键词:

随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿。AI涉及的领域众多,图像识别中的人脸识别是其中一个有趣的分支。百度的BFR,Face++的开放平台,汉王,讯飞等等都提供了人脸识别的API,对于老码农而言,自己写一小段代码,来看看一张图片中有几个人,没有高大上,只是觉得好玩,而且只需要7行代码。

import cv2

face_patterns = cv2.CascadeClassifier('/usr/local/opt/opencv3/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')

sample_image = cv2.imread('/Users/abel/201612.jpg')

faces = face_patterns.detectMultiScale(sample_image,scaleFactor=1.1,minNeighbors=5,minSize=(100, 100))

for (x, y, w, h) in faces:
    cv2.rectangle(sample_image, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imwrite('/Users/abel/201612_detected.png', sample_image);

第1行 引入 OpenCV

开源是伟大的,使我们视野更开阔,而且不用重复造轮子。这里没有用PIL,再结合特定算法,而是直接使用了OpenCV(http://opencv.org)。OpenCV是一个基于BSD许可发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上,轻量而且高效,用C/C++编写,同时提供了Python、Ruby、MATLAB等接口,实现了图像处理和计算机视觉方面的很多通用算法。

第2行 加载分类器 cv2.CascadeClassifier

CascadeClassifier是Opencv中做人脸检测时候的一个级联分类器,该类中封装的是目标检测机制即滑动窗口机制+级联分类器的方式。数据结构包括Data和FeatureEvaluator两个主要部分。Data中存储的是从训练获得的xml文件中载入的分类器数据;而FeatureEvaluator中是关于特征的载入、存储和计算。这里采用的训练文件是OpenCV中默认提供的haarcascade_frontalface_default.xml。至于Haar,LBP的具体原理,可以参考opencv的相关文档,简单地,可以理解为人脸的特征数据。

第3行 加载目标图片 imread

人脸识别系统一般分为:人脸图像采集、人脸图像预处理、人脸图像特征提取以及匹配与识别。 简化起见,之间读入图片,这是一张去年中生代北京闭门会的集体照。

第4行 多尺度检测 detectMultiScale

调用 CascadeClassifier 中的调detectMultiScale函数进行多尺度检测,多尺度检测中会调用单尺度的方法detectSingleScale。
参数说明:

  • scaleFactor 是 图像的缩放因子
  • minNeighbors 为每一个级联矩形应该保留的邻近个数,可以理解为一个人周边有几个人脸
  • minSize 是检测窗口的大小

这些参数都是可以针对图片进行调整的,处理结果返回一个人脸的矩形对象列表。

第5行 和 第6行 为每个人脸画一个框

循环读取人脸的矩形对象列表,获得人脸矩形的坐标和宽高, 然后在原图片中画出该矩形框,调用的是OpenCV的rectangle 方法,其中矩形框的颜色等是可调整的。

第7行 保存检测后的结果

万事具备了,调用imwrite,将检测后的结果保存到指定的位置。结果图如下:

神秘感不是这7行代码,而是OpenCV中的相关实现,OpenCV的中文网也是一个学习体会的好场所。

因此,7行代码只是个噱头,真正的核心是OpenCV。然后,安装OpenCV环境的时候就是有一些坑,特别记录一下。

基于Mac的OpenCV环境

建议使用Brew 安装,如果没有安装brew,先执行下面命令:

$/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

然后,指定目标仓库 $brew tap homebrew/science

安装OpenCV3 $brew install opencv3

安装速度取决于网络,安装完毕需要绑定Python开发环境,有多种土方法:

1)增加环境变量,将opencv 的site-packages 添加到PYTHONPATH中

2)使用ln 软连接,将cv2.so 链接到python 环境的 site-packages中

3)直接cp cv2.so 到 python 环境的 site-packages 目录下

更简单地是执行如下命令:

  echo /usr/local/opt/opencv3/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/opencv3.pth
  mkdir -p /Users/hecom/.local/lib/python2.7/site-packages
  echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/hecom/.local/lib/python2.7/site-packages/homebrew.pth

对于强迫症患者

可以全面安装opencv的各种插件,如3方插件,视频插件等:

$brew install opencv3 --with-contrib --with-cuda --with-ffmpeg --with-tbb --with-qt5

可能会遇到很多坑,如
Error: You must ‘brew link texi2html’ before homebrew/science/opencv3 can be installed

当你执行 $brew link texi2html时又会遇错:
Error: Cowardly refusing to 'sudo brew link'
You can use brew with sudo, but only if the brew executable is owned by root.
However, this is both not recommended and completely unsupported so do so atyour own risk

说明brew 的权限有问题, 需要解决:
$sudo chown root:wheel ‘which brew’

在Ubuntu上OpenCV3的源码安装

在Ubantu上安装先要做一下准备活动

$ aptitude -f install
$ sudo apt-get update

然后安装编译环境:
$sudo apt-get install build-essential

安装依赖库
$sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
还要安装python 依赖及其它依赖库
$sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

获得opencv源代码
git clone https://github.com/Itseez/opencv.git

终于可以编译安装了:

$cd opencv
$cmake -D CMAKE_INSTALL_PREFIX=/home/opencv/build -D CMAKE_BUILD_TYPE=RELEASE   ..

最后,安装python-opencv:

$sudo apt-get install python-opencv

OpenCV的Python环境简单验证

一行代码验证OpenCV的Python环境是否成功:

$python -c “import cv2; print dir(cv2)”

如果输出了很多cv2 的属性和函数名的字典,就表示成功;否则的话,还需要继续填坑。

人脸识别----face_recognition安装与应用(附代码)(代码片段)

  face_recognition号称是世界上最简单的基于python的人脸识别库,是在大名鼎鼎的深度学习框架dlib上做的整合,dlib模型在LFW(LabeledFacesintheWild)能有99.38的准确率。另外face_recognition提供了相应的命令行工具,可以通过命令... 查看详情

python的人脸识别(代码片段)

现在的人脸识别确实很常见,作为刚刚入门级别的还是可以尝试一下的:importcv2importnumpyasnpimportsys,os,glob,numpyfromskimageimportio#指定图片的人脸识别然后存储img=cv2.imread("test.jpg")color=(0,255,0)grey=cv2.cvtC 查看详情

基于人脸识别姿态检测距离估计的看电视姿态检测(代码片段)

...1(无需GPU)或MacOS都测试可行普通RBGUSB摄像头三、软件:python3.7.10pip安装一下依赖包dlibopencv-contrib-python(可能需要先卸载opencv-python:pipuninstallopencv-python) 查看详情

python实现人脸识别(代码片段)

文章目录叨叨几句准备工作代码流程叨叨几句哈喽兄弟们,今天实现一下人脸识别。先问大家一个问题什么是百度Aip模块?百度AI平台提供了很多的API接口供开发者快速的调用运用在项目中本文写的是使用百度AI的在线接... 查看详情

人脸识别检测项目实战(代码片段)

...,顾名思义它也是一个分类系统,所以我们利用Python调用opencv得分类器进行面部识别。环境配置    操作系统:Windows    程序语言:Python3.9.5(64-bit)安装步骤:Python的下载安装与配置(针对新... 查看详情

[深度学习]python人脸识别库face_recognition使用教程(代码片段)

Python人脸识别库face_recognition使用教程face_recognition号称是世界上最简单的开源人脸识别库,可以通过Python或命令行识别和操作人脸。face_recognition提供了十分完整的技术文档和应用实例,人脸识别初学者建议研究该库上手... 查看详情

40行代码的人脸识别实践

...博主原创文章,转载请联系作者取得授权。目录(?)[+]40行代码的人脸识别实践40行代码的人脸识别实践前言一点区分所用工具Dlib人脸识别前期准备识别流程代码运行结果前言很多人都认为人脸识别是一项非常难以实现的工作,看... 查看详情

opencv-python实战(17)——人脸识别详解(代码片段)

OpenCV-Python实战(17)——人脸识别详解0.前言1.人脸识别简介2.使用OpenCV进行人脸识别2.1使用OpenCV进行人脸识别流程示例3.使用dlib进行人脸识别4.使用face_recognition进行人脸识别小结系列链接0.前言人脸处理是人工智能中的一... 查看详情

用20行python代码实现人脸识别!

...个世界上最简洁的人脸识别库face_recognition,你可以使用Python和命令行工具进行提取、识别、操作人脸。基于业内领先的C++开源库dlib中的深度学习模型,用LabeledFacesintheWild人脸数据集进行测试,有高达99.38%的准确率。1.安装最好... 查看详情

python-opencv实现人脸识别功能(代码片段)

使用python-opencv实现人脸识别功能。思路如下:1.使用opencv库打开摄像头。2.加载opencv中自带的人脸特征识别分类器3.输出结果代码如下:importcv2importmatplotlib.pyplotasplt#1.读取笔记本相机cap=cv2.VideoCapture(0)#2.在每一帧数据中进行人脸... 查看详情

人脸识别和手势识别应用(face++)开发(代码片段)

...目使用的是face++平台,人脸识别+手势识别双确认显示。python编程,代码简介,方便扩展。 该项目适用于Windows系统和Linux系统,但必须安装相应的模块,其中包括 l Python3 python库,逻辑编写l Pillow  窗口... 查看详情

基于python的视频中的人脸识别系统设计与实现(代码片段)

目录一:问题描述2二:实现思路22.1切换点22.1.2镜头切换点32.1.2音频切换点。32.2嘉宾识别=人脸识别&声纹识别42.2.1人脸识别42.2.2声纹识别5三:实验环境5四:分帧64.1直方图计算法64.2图像指纹:hash74.3SSIM法... 查看详情

40行代码的人脸识别实践

...话,人脸识别也没那么难。今天我们就来看看如何在40行代码以内简单地实现人脸识别。一点区分对于大部分人来说,区分人脸检测和人脸识别完全不是问题。但是网上有很多教程有意无意地把人脸检测说成是人脸识别 查看详情

dlib人脸识别(代码片段)

...络?所以dlib识别准确率,要比opencv(cv2)高?pipinstallopencv-python?我们就可以在代码中,导包了?dlib调用相应方法,识别人脸?face_detector=dlib.get_frontal_face_detector()?调用:?人脸坐标数据?faces=face_detector(image,1)?绘制:forfaceinfaces:left=face.le... 查看详情

7人脸识别(代码片段)

...加载特征数据face_detector=cv.CascadeClassifier("D:/sofeware/sofeware/python37/Lib/site-packages/cv2/data/haarcascade_frontalface_alt_tree.xml")#在多个尺度空间进行检测(图像名,向上或者向下变换尺度值(原图几倍),变换图清晰度低选择低的值,调整1.02... 查看详情

基于python的百度ai人脸识别api接口(可用于opencv-python人脸识别)(代码片段)

基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别)资源:https://download.csdn.net/download/weixin_53403301/43644312之前的项目:【最新】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别... 查看详情

python到底有多强大?只需15行代码即可进行人脸检测(代码片段)

...检测就是人工智能的进步之一。私信小编01即可获取大量python学习资源所以今天,我们将快速了解一下面部检测是什么,为什么它很有用,以及如何禁用15行代码就可以在您的系统上实现面部检测!让我们从了解面... 查看详情

基于python版本的dlib库进行人脸识别(代码片段)

最近冒出做人脸识别的想法,在github上正巧看到这个项目,在了解了大概思路之后打算自己独立复刻出这个人脸识别项目。由于笔者自身代码水平并不高,若有地方错误或者不合适的,还希望大神能够指出,... 查看详情