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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 人工智能导论:人脸识别系统——Dlib人脸识别 -> 正文阅读

[人工智能]人工智能导论:人脸识别系统——Dlib人脸识别

最前面的话

感谢弦弦子的一位粉丝

注意:本博客仅供参考!

第一关:dlib人脸检测的基本原理

任务描述

本关任务:

1.理解如何计算特征向量;

2.理解如何计算向量与向量间的欧氏距离;

3.理解如何识别人脸。

编程要求

请在右侧编辑器中的BEGIN-END之间编写代码,使用Dlib识别人脸并输出识别结果:

·计算已知图片所有人脸特征向量;

·计算待识别图片与已知图片特征向量间的欧氏距离;

·打印识别结果。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

代码

import os
import dlib
import glob
import numpy as np
import cv2

predictor_path = 'step1/model/shape_predictor_5_face_landmarks.dat'
face_rec_model_path = 'step1/model/dlib_face_recognition_resnet_model_v1.dat'
known_image_path = 'step1/image/known_image'
test_image_path = "step1/image/test_image"

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(predictor_path)

'''****************BEGIN****************'''
# 加载人脸识别模型
facerec = dlib.face_recognition_model_v1(face_rec_model_path)
'''**************** END ****************'''

descriptors = []
names = ["TongDaWei","XiaYu","ZhangYiShan"]

# 计算已知图片的特征向量
for f in glob.glob(os.path.join(known_image_path, "*.jpg")):
    img = dlib.load_rgb_image(f)
    # 1.人脸检测
    dets = detector(img, 1)
    for k, d in enumerate(dets):
        '''****************BEGIN****************'''
        # 2.关键点检测
        shape = predictor(img, d)
        # 3.特征向量
        face_descriptor = facerec.compute_face_descriptor(img, shape)
        # 转换为numpy array
        v = np.array(face_descriptor)
        descriptors.append(v)
        '''**************** END ****************'''

for f in glob.glob(os.path.join(test_image_path, "*.jpg")):
    img = dlib.load_rgb_image(f)
    dets = detector(img, 1)
    for k, d in enumerate(dets):
        '''****************BEGIN****************'''
        shape = predictor(img, d)
        face_descriptor = facerec.compute_face_descriptor(img, shape)
        # 当前待识别的图片特征向量为current
        current = np.array(face_descriptor)
        '''**************** END ****************'''
        # 计算欧式距离,识别人脸
        tolerance = 0.4
        current_name = "Unknow"
        '''****************BEGIN****************'''
        # 输出识别的结果
        for i in range(len(descriptors)):
            distance = np.linalg.norm(descriptors[i]-current)
            if distance<tolerance:
               #names用于存放于已知人脸特征向量对应的名字
                current_name = names[i]
                break
        print("当前图片识别结果为:"+current_name)
        '''**************** END ****************'''

第二关:绘制人脸识别结果

任务描述

本关任务:绘制人脸识别结果。

编程要求

请在右侧编辑器中的BEGIN-END之间编写代码,使用OpenCV绘制人脸识别结果,并保存图片到指定路径:

·绘制人脸区域,边框颜色为(0,0,255),边框粗度为2;
·将文字内容放在(d.left(),d.bottom+13)处;
·文字内容为识别的结果;
·字体为cv2.FONT_HERSHEY_PLAIN;
·字体颜色为(255,0,0);
·字体倍数为0.5;
·字体厚度为1。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

代码

import os
import dlib
import glob
import numpy as np
import cv2

predictor_path = 'step1/model/shape_predictor_5_face_landmarks.dat'
face_rec_model_path = 'step1/model/dlib_face_recognition_resnet_model_v1.dat'
known_image_path = 'step1/image/known_image'
test_image_path = "step1/image/test_image"

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(predictor_path)
facerec = dlib.face_recognition_model_v1(face_rec_model_path)

descriptors = []
names = ["TongDaWei","XiaYu","ZhangYiShan"]

for f in sorted(glob.glob(os.path.join(known_image_path, "*.jpg"))):
    img = dlib.load_rgb_image(f)
    # 1.人脸检测
    dets = detector(img, 1)
    for k, d in enumerate(dets):
        # 2.关键点检测
        shape = predictor(img, d)
        # 3.描述子提取,128D向量
        face_descriptor = facerec.compute_face_descriptor(img, shape)
        # 转换为numpy array
        v = np.array(face_descriptor)
        descriptors.append(v)

count = 0
for f in sorted(glob.glob(os.path.join(test_image_path, "*.jpg"))):
    img = dlib.load_rgb_image(f)
    dets = detector(img, 1)
    for k, d in enumerate(dets):
        shape = predictor(img, d)
        face_descriptor = facerec.compute_face_descriptor(img, shape)
        # 当前待识别的图片特征向量为current
        current = np.array(face_descriptor)
        # 计算欧式距离,识别人脸
        tolerance = 0.4
        current_name = "Unknow"
        for i in range(len(descriptors)):
            distance = np.linalg.norm(descriptors[i]-current)
            if distance<tolerance:
                #names用于存放于已知人脸特征向量对应的名字
                current_name = names[i]
                break

        '''****************BEGIN****************'''
        # 绘制人脸区域
        cv2.rectangle(img,(d.left(), d.top()),(d.right(), d.bottom()),(0,0,255),2)
        # 在图片上添加文字
        font = cv2.FONT_HERSHEY_DUPLEX
        cv2.putText(img, current_name, (d.left(), d.bottom() + 13), font, 0.5, (255, 0, 0), 1)
        '''**************** END ****************'''

    # 保存图片
    count = count+1
    cv2.imwrite("step2/image/out/"+str(count)+".jpg",cv2.cvtColor(img,cv2.COLOR_RGB2BGR))
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:09:34  更:2021-12-26 22:12:08 
 
开发: 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/26 23:39:24-

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