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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> face-recognition多人脸识别实时检测代码实例加精细化讲解 -> 正文阅读

[人工智能]face-recognition多人脸识别实时检测代码实例加精细化讲解

?

目录

完整代码(图片自己放)?

一.导库

二.加图片

三.BGR 转 RGB

四.检测人脸

face_locations(img, times_upsample=1, model="hog"):

五.人脸特征编码(将图片中的已知人脸图像编码成128维特征向量)

face_encodings(face_img, known_face_locations=None, num_jitters=1)

六.人脸组成“数据库”

七.打开摄像头,读取视频流

1.BGR 传 RGB

2.人脸检测

3.人脸特征编码

4.与数据库中的所有人脸进行匹配

循环结构(for-in)

(1)进行匹配

compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)

tolerance:容忍度,可调精度,越低越准。!!!!!解决精度问题!(2)计算距离

(3)判断:如果匹配,获取名字

(4)绘制人脸矩形框

(5)绘制、显示对应人脸的名字

(6)显示名字

putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

img :图像text :要绘制的文本字符串。org:文字添加到图片上的位置fontFace: 字体类型,参见#HersheyFontsfontScale :字体大小color:字体颜色thickness :字体粗细lineType :行类型。看?#LineTypesbottomLeftOrigin:为真时,图像数据源在左下角。反之,它就在左上角。

5.显示整个效果

6.判断 Q , 退出

八.关闭所有资源


完整代码(图片自己放)?

import cv2
import numpy as np
import face_recognition
name1 = cv2.imread("name1.jpg")
name2 = cv2.imread("name2.jpg")
name1_RGB = name1[:, :, ::-1]
name2_RGB = name2[:, :, ::-1]
name1_face = face_recognition.face_locations(name1_RGB)
name2_face = face_recognition.face_locations(name2_RGB)
name1_encoding = face_recognition.face_encodings(name1_RGB, name1_face)[0]
name2_encoding = face_recognition.face_encodings(name2_RGB, name2_face)[0]
encodings = [name1_encoding, name2_encoding]
names = ["name1", "name2"]
cap = cv2.VideoCapture(0)
if not cap.isOpened():
    raise  IOError("Camera Error !!!")

while True:
    ret, frame = cap.read()
    frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5)
    frame_RGB = frame[:, :, ::-1]
    faces_locations = face_recognition.face_locations(frame_RGB)
    faces_encodings = face_recognition.face_encodings(frame_RGB, faces_locations)
    for (top, right, bottom, left), face_encoding in zip(faces_locations, faces_encodings):
        matches = face_recognition.compare_faces(encodings, face_encoding)
        distances = face_recognition.face_distance(encodings, face_encoding)
        min_distance_index = np.argmin(distances) # 0, 1, 2
        name = "Unknown"
        if matches[min_distance_index]:
            name = names[min_distance_index]
        cv2.rectangle(frame, (left, top), (right, bottom), (0,255,0), 3)
        cv2.rectangle(frame, (left, bottom - 30),(right, bottom), (0,0,255), 3)
        cv2.putText(frame, name, (left+10 , bottom-10), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 1)
    cv2.imshow("face recognition", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

一.导库

import cv2
import numpy as np
import face_recognition

二.加图片

name1 = cv2.imread("name1.jpg")
name2 = cv2.imread("name2.jpg")

注意:name1.jpg/name2.jpg为自己要加入的图片

路径不要打错,文件名尽量不要用中文(请养成习惯)

路径错误:

 OpenCV(4.5.4-dev) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
TypeError: 'NoneType' object is not subscriptable

如果你的路径有中文:

python3中opencv读取中文名称的解决办法

import cv2
import numpy

def cv_imread(the_file_path):
    img = cv2.imdecode(np.fromfile(the_file_path,dtype=np.uint8),-1)
    return img

参考:Python 3.x 使用 opencv 无法读取中文路径如何解决? - 知乎

?附加:cv2的python版本中imwrite生成带有中文路径的图片

# python3版本
# imread
path_file = "....."
img = cv2.imdecode(np.fromfile(path_file,dtype=np.uint8),-1)

#imwrite
_path = "....."
cv2.imencode('.jpg',img)[1].tofile(_path)
# python 2版本
import cv2
import sys
reload(sys)
sys.setdefaultencoding('u8')
path_file = u"sample"
img = cv2.imread(path_file.decode('u8').encode('gbk'),-1)

参考:请教各位朋友cv2的python版本中imwrite无法生成带有中文路径的图片? - 知乎

三.BGR 转 RGB

name1_RGB = name1[:, :, ::-1]
name2_RGB = name2[:, :, ::-1]

四.检测人脸

name1_face = face_recognition.face_locations(name1_RGB)
name2_face = face_recognition.face_locations(name2_RGB)

face_locations:

face_locations(img, times_upsample=1, model="hog"):

img : 人脸位置的图像矩阵

times_upsample :查找次数

model :查找模式( 'hog' 不精确但是在CPU上运算速度快)( 'CNN' 是一种深度学习的精确查找,但是速度慢。需要GPU/CUDA加速。慎重选择!)

5.

五.人脸特征编码(将图片中的已知人脸图像编码成128维特征向量)

name1_encoding = face_recognition.face_encodings(name1_RGB, name1_face)[0]
name2_encoding = face_recognition.face_encodings(name2_RGB, name2_face)[0]

face_encodings(face_img, known_face_locations=None, num_jitters=1)

face_img?:人脸位置的图像矩阵

known_face_locations :指定人脸位置?

num_jitters:计算编码时重新采样面的次数。越高越准,但更慢。

六.人脸组成“数据库”

encodings = [name1_encoding, name2_encoding]
names = ["name1", "name2"]

七.打开摄像头,读取视频流

cap = cv2.VideoCapture(0)
if not cap.isOpened():
    raise  IOError("Camera Error !!!")
while True:
    ret, frame = cap.read()
    frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5)

cap = cv2.VideoCapture(0)

0——表示打开笔记本的内置摄像头

视频文件路径——打开视频,如cap = cv2.VideoCapture("name.mp4")

ret,frame = cap.read()

?cap.read()——按帧读取视频

ret,frame——获cap.read()方法的两个返回值。(ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False)(frame就是每一帧的图像,是个三维矩阵)

1.BGR 传 RGB

    frame_RGB = frame[:, :, ::-1]
    #请与上方的语句对齐,后方同。

注意:OpenCV读取的图片默认是BGR格式

2.人脸检测

    faces_locations = face_recognition.face_locations(frame_RGB)

3.人脸特征编码

    faces_encodings = face_recognition.face_encodings(frame_RGB, faces_locations)

4.与数据库中的所有人脸进行匹配

    for (top, right, bottom, left), face_encoding in zip(faces_locations, faces_encodings):

循环结构(for-in)

for x in y:

    循环体

执行流程:x依次表示y中的一个元素,遍历完所有元素循环结束

(1)进行匹配

        matches = face_recognition.compare_faces(encodings, face_encoding, tolerance=0.60)

compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)

known_face_encodings :已编码的人脸列表

face_encoding_to_check:要检测的单个人脸

tolerance:容忍度,可调精度,越低越准。!!!!!解决精度问题
(2)计算距离

        distances = face_recognition.face_distance(encodings, face_encoding)
        min_distance_index = np.argmin(distances) # 0, 1, 2
face_recognition.face_distance(face_encodings, face_to_compare)

给定面部编码列表,将它们与已知的面部编码进行比较,并获得每个比较面部的欧氏距离。距离告诉您脸部的相似程度。

(3)判断:如果匹配,获取名字

        name = "Unknown"
        if matches[min_distance_index]:
            name = names[min_distance_index]

(4)绘制人脸矩形框

        cv2.rectangle(frame, (left, top), (right, bottom), (0,255,0), 3)

?cv2.rectangle(image, start_point, end_point, color, thickness)

image:它是要在其上绘制矩形的图像。
start_point:它是矩形的起始坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
end_point:它是矩形的结束坐标。坐标表示为两个值的元组,即(X坐标值?坐标值)。
color:它是要绘制的矩形的边界线的颜色。
thickness:它是矩形边框线的粗细像素。厚度-1像素将以指定的颜色填充矩形形状。

(5)绘制、显示对应人脸的名字

        cv2.rectangle(frame, (left, bottom - 30),(right, bottom), (0,0,255), 3)

(6)显示名字

        cv2.putText(frame, name, (left+10 , bottom-10), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 1)

putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

img :图像
text :要绘制的文本字符串。
org:文字添加到图片上的位置
fontFace: 字体类型,参见#HersheyFonts
fontScale :字体大小
color:字体颜色
thickness :字体粗细
lineType :行类型。看?#LineTypes
bottomLeftOrigin:为真时,图像数据源在左下角。反之,它就在左上角。

5.显示整个效果

    cv2.imshow("face recognition", frame)

cv2.imshow(wname,img)

wname:窗口名字

img:图像

6.判断 Q , 退出

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

waitKey()——方法本身表示等待键盘输入

1——延时1ms切换到下一帧图像(对于视频而言);

0——只显示当前帧图像,相当于视频暂停,;

参数过大——会因为延时过久而卡顿感觉到卡顿。

八.关闭所有资源

cap.release()
cv2.destroyAllWindows()

release()——释放摄像头,调用destroyAllWindows()关闭所有图像窗口。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 13:02:40  更:2021-12-03 13:02:51 
 
开发: 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年10日历 -2024/10/27 18:20:13-

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