IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Python学习 | 2021-09-17 人脸识别程序 -> 正文阅读

[人工智能]Python学习 | 2021-09-17 人脸识别程序

目录

一、人脸检测

1、OpenCV人脸检测

操作步骤:

完整代码:

运行结果:?

参数含义:

?2、Face-Recognition人脸检测

?①HOG算法

?②CNN算法(卷积神经网络)

③问题记录与总结

二、人脸特征点标定

操作步骤:

完整代码:

运行结果:


人脸识别流程:人脸检测+人脸对齐+特征点提取+人脸匹配?


一、人脸检测

1、OpenCV人脸检测

OpenCV自带训练好的人脸Haar特征分类器,存储在D:\Python\Lib\site-packages\cv2\data\文件夹下。其中几个.xml文件如下:

人脸检测器(默认):haarcascade_frontalface_default.xml

人脸检测器(快速Harr):haarcascade_frontalface_alt2.xml

人脸检测器(侧视):haarcascade_profileface.xml

眼部检测器(左眼):haarcascade_lefteye_2splits.xml

眼部检测器(右眼):haarcascade_righteye_2splits.xml

身体检测器:haarcascade_fullbody.xml

微笑检测器:haarcascade_smile.xml

操作步骤:

  1. cv2.CascadeClassifier()加载Haar特征检测分类器
  2. cv2.imread()载入图像(读取结果为BGR格式,颜色区别于RGB格式),并转换为灰度图片
  3. 识别图像中的人脸,返回所有人脸的矩形框向量组
  4. 在图像中画上矩形框,显示识别结果

完整代码:

import cv2
import matplotlib.pyplot as plt

def detect(filename):
    face_cascade=cv2.CascadeClassifier('D:\Python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')    #定义级联分类器
    img=cv2.imread(filename)
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    #将BGR格式转换成灰度图片
    faces=face_cascade.detectMultiScale(gray, 1.3, 5)    #识别图像中的人脸,返回所有人脸的矩形框向量组
    num=0
    for (x, y, w, h) in faces:
        img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)    #在图像中画上矩形框
        num+=1
    print('人脸数量:',num)
    plt.imshow(img) 
    plt.axis('off')  
    plt.show()
    
detect('calorie.jpg')

运行结果:?

(可以看出,图片中共有11人,只识别出来10人,有所偏差)

参数含义:

学习方式——查文档 Python Module Docs,其中‘[’表示可选项

?cv2.cvtColor(src,?code[,?dst[,?dstCn]])?->?dst?

src????????需要转换的图片

code????????转换成何种格式

cv2.COLOR_BGR2GRAY ????????将BGR格式转换成灰度图片

detectMultiScale(image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]]) -> objects

image????????被检测的图片,需要转换为灰度图

scaleFactor ????????为了检测到不同大小的目标,通过该参数把图像长宽同时按照一定比例(默认为1.1)逐步缩小后检测(该参数设置越大,计算速度越快,但可能会错过了某个大小的人脸)

minNeighbors? ? ? ? ?只有检测目标被识别出来的次数大于等于这个值(默认为3),才被认为是正确的结果

cv2.rectangle(img,?pt1,?pt2,?color[,?thickness[,?lineType[,?shift]]])?->?img

pt1????????Vertex of the rectangle

pt2????????Vertex of the rectangle opposite to pt1?

color????????Rectangle color?

thickness????????Thickness of lines that make up the rectangle

?2、Face-Recognition人脸检测

?①HOG算法

“HOG” is less accurate but faster on CPUs.The default is “HOG”.

操作步骤:

  1. face_recognition.load_image_file()?加载图像
  2. 调用face_recognition.face_locations(image),定位所有图像中识别出的人脸位置信息(返回值是列表形式,每个人脸是一个tuple存储,包括[top, right, bottom, left])
  3. 循环找到的所有人脸,打印每张脸的位置信息
  4. 在图像中画上矩形框,显示识别结果

完整代码:

import face_recognition
import cv2
import matplotlib.pyplot as plt

image = face_recognition.load_image_file("calorie.JPG")
face_locations=face_recognition.face_locations(image)
face_num=len(face_locations)
print('人脸数量:',face_num)       
org = cv2.imread("calorie.JPG")

for i in range(0,face_num):
    top = face_locations[i][0]
    right = face_locations[i][1]
    bottom = face_locations[i][2]
    left = face_locations[i][3]
    start = (left, top)
    end = (right, bottom)
    color = (255,0,0)
    thickness = 2
    img=cv2.rectangle(org, start, end, color, thickness)
    plt.imshow(img)
    plt.axis('off')  
plt.show()

运行结果:??

?

?②CNN算法(卷积神经网络)

“CNN” is a more accurate deep-learning model which is GPU/CUDA accelerated (if available).?

完整代码:

import face_recognition
import cv2
import matplotlib.pyplot as plt

image = face_recognition.load_image_file("calorie.JPG")
face_locations_useCNN = face_recognition.face_locations(image,model='cnn')    #model默认为'hog'
face_num1=len(face_locations_useCNN)
print('人脸数量:',face_num1)     
org = cv2.imread("calorie.JPG")

for i in range(0,face_num1):
    top = face_locations_useCNN[i][0]
    right = face_locations_useCNN[i][1]
    bottom = face_locations_useCNN[i][2]
    left = face_locations_useCNN[i][3]
    start = (left, top)
    end = (right, bottom)
    color = (0,255,255)
    thickness = 2
    img=cv2.rectangle(org, start, end, color, thickness)  
    plt.imshow(img)
    plt.axis('off')  
plt.show()

运行结果:???

③问题记录与总结

dlib安装失败:

在安装dlib库时,采用pip install dlibpip install dlib-19.17.99-cp37-cp37m-win_amd64.whl两种方法均失败,部分报错信息如下:

You must use Visual Studio to build a python extension on windows. If you?are getting this error it means you have not installed Visual C++. Note?that there are many flavors of Visual Studio, like Visual Studio for C#? development. You need to install Visual Studio for C++.

最终,通过安装cmake、boost、Visual Studio 2019的方式解决问题

下载速度缓慢:

1、使用whl文件:通过网站https://pypi.org/project,下载whl第三方库安装文件(与Python版本一致),将其放置在Python安装目录下;在当前目录下,运行命令pip install xxx.whl

2、临时使用清华镜像源:运行命令pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xxx

3、永久配置清华镜像源:在Users目录中创建pip目录,再新建文件pip.ini;打开pip.ini文件,复制粘贴以下内容并保存

[global]
?index-url = https://pypi.tuna.tsinghua.edu.cn/simple[global]
?index-url = https://pypi.tuna.tsinghua.edu.cn/simple


二、人脸特征点标定

操作步骤:

  1. 获取人脸框位置的检测器与人脸关键点检测器
  2. 读取图像,进行图像的灰度化
  3. 使用detector进行人脸检测,获得人脸框的位置信息
  4. 遍历检测到的框,寻找人脸的68个标定点;遍历所有点,打印出其坐标,并圈出来

完整代码:

import cv2
import dlib
import matplotlib.pyplot as plt

detector = dlib.get_frontal_face_detector()    #获取人脸分类器
predictor = dlib.shape_predictor(r"D:\Python\Lib\site-packages\face_recognition_models\models\shape_predictor_68_face_landmarks.dat")    #获取人脸检测器

path = "Martina.JPEG"
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

dets = detector(gray, 1)    #使用detector进行人脸检测,dets为返回的结果,(gray, 1)=(灰度图,1个通道)
for face in dets:
    shape = predictor(img, face)    #寻找人脸的68个标定点
    for pt in shape.parts():
        pt_pos = (pt.x, pt.y)
        img=cv2.circle(img, pt_pos, 2, (255, 0, 0), 1)        #遍历所有点,打印出其坐标,并圈出来

plt.imshow(img)
plt.axis('off')  
plt.show()

运行结果:

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:59:01  更:2021-09-19 08:01:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 14:27:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码