EduCoder平台:人脸识别系统——Dlib人脸识别

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

编程要求:

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

    • 计算已知图片所有人脸特征向量;
    • 计算待识别图片与已知图片特征向量间的欧氏距离;
    • 打印识别结果。

代码如下:

import os
import dlib
import glob
import numpy as np
import cv2predictor_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 arrayv =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)# 当前待识别的图片特征向量为currentcurrent =np.array(face_descriptor)'''**************** END ****************'''# 计算欧式距离,识别人脸tolerance = 0.4current_name = "Unknow"'''****************BEGIN****************'''# 输出识别的结果for i in range(len(descriptors)):distance = np.linalg.norm(descriptors[i]-current)if distance<tolerance:#names用于存放于已知人脸特征向量对应的名字current_name = names[i]breakprint("当前图片识别结果为:"+current_name)'''**************** END ****************'''

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

编程要求:

请在右侧编辑器中的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 cv2predictor_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 arrayv = 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)# 当前待识别的图片特征向量为currentcurrent = np.array(face_descriptor)# 计算欧式距离,识别人脸tolerance = 0.4current_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_PLAINcv2.putText(img, current_name, (d.left(), d.bottom()+13), font, 0.5, (255,0,0), 1)'''**************** END ****************'''# 保存图片count = count+1cv2.imwrite("step2/image/out/"+str(count)+".jpg",cv2.cvtColor(img,cv2.COLOR_RGB2BGR))

人脸识别系统——Dlib人脸识别相关推荐

  1. 人脸识别系统——Dlib人脸检测

    EduCoder平台:人脸识别系统--Dlib人脸检测 第1关:HOG特征描述方法 编程要求: 请在右侧编辑器中的BEGIN-END之间编写代码,完成如下要求: 声明OpenCV中的HOG特征描述方法 ...

  2. 人脸识别系统——OpenCV人脸检测

    EduCoder:人脸识别系统--OpenCV人脸检测 第1关:图片基本操作 编程要求: 请在右侧编辑器中的BEGIN-END之间编写代码,完成如下要求: 导入openCV库(cv2): 读取路径 s ...

  3. 【EduCoder答案】人脸识别系统——OpenCV人脸检测

    简介 答案查询的入口网页版 其他各类实训答案的目录见这里 答案获取的方法简介见这里 并不是所有的关卡都有答案,有些只有部分关卡有 不要直接复制答案哦 人脸识别系统 -- OpenCV人脸检测 > ...

  4. c语言产生式系统动物识别系统,简单动物识别系统的知识表示实验报告

    简单动物识别系统的知识表示实验报告 一. 实验目的: 1. 2. 理解和掌握产生式知识表示方法. 能够用选定的编程语言实现产生式系统的规则库. 二. 实验内容和要求: 1.以动物识别系统的产生式规则为 ...

  5. 车牌识别系统服务器安装,车牌识别系统安装流程及注意事项

    原标题:车牌识别系统安装流程及注意事项 一套完整的车牌识别系统包含车牌识别一体机.停车场收费显示屏.智能道闸.车牌识别软件等.这些设备的安装是否规范,很大程度上影响着整套车牌识别系统的工作性能. 在车 ...

  6. 基于神经网络的花卉识别系统,可以识别10种花的类型:向日葵、月季、玫瑰、仙人掌、牡丹等

    基于神经网络的花卉识别系统,可以识别10种花的类型:向日葵.月季.玫瑰.仙人掌.牡丹等,精度可达95. 系统可手动自主选择图片导入识别,识别结果可通过标签形式标注在图片上生成到本地,便于归档和实时验证 ...

  7. Python 基于 opencv 的车牌识别系统, 可以准确识别车牌号

    大家好,我是程序员徐师兄,6 年大厂程序员经验,点击关注我 简介 毕业设计基于Opencv的车牌识别系统 车牌搜索识别找出某个车牌号 对比识别车牌系统 车牌数据库认证系统 车牌图文搜索系统 车牌数据库 ...

  8. pkr车牌识别系统服务器,车牌识别系统车牌录入的操作步骤

    录入车牌是很简单的,车牌识别系统基本都需要配合电脑用,打开录入界面后在车牌信息一栏输入车牌号码就行了.有些车牌识别系统是不用录入车牌前面的汉字的,有些车牌识别系统需要将车牌前面的汉字录入. 非常多商场 ...

  9. 基于TensorFlow和mnist数据集的手写数字识别系统 ,可识别电话号码,识别准确率高,有对比实验,两组模型,可讲解代码

    基于TensorFlow和mnist数据集的手写数字识别系统 ,可识别电话号码,识别准确率高,有对比实验,两组模型,可讲解代码

最新文章

  1. oracle0级备份和全备份实录_蓝光硬盘备份管理系统在档案系统的应用
  2. PAT (Advanced Level) 1003 Emergency(最短路+动态规划)
  3. typeScript的函数实例
  4. python函数的封装调用_Python封装一个函数来打印到变量
  5. ansible的参数及常用模块
  6. Eclipse 编译C++
  7. Android 4.2蓝牙介绍
  8. 服务器有些系统更新不能卸载,微软 Win10 更新 KB4577586 发布:永久删除 Adobe Flash Player,补丁无法卸载...
  9. 计算机Excel设置透视图,excel共享表格数据-EXCEL在共享模式中,如何让数据透视表能够自动刷新?...
  10. 【PHP练习】每日词汇,随机产生10个单词,方便备考随时背诵(php+html+css)
  11. (翻译)线框图和设计原型图之间的区别是什么?
  12. iphone4s 关于大于400M的视频无法拷贝的问题
  13. 欢迎中文社区新版主@刘文艺
  14. 推荐几个亲测好用高质量学习SQL的网站(建议收藏)
  15. Expert 诊断优化系列------------------内存不够用么?
  16. DJ3-3 进程调度
  17. 【分享】git clone 提示 unable to access ‘http://gitlab.xxxx/gateway.git/‘: Could not resolve host xxxx
  18. EduCoder-Web程序设计基础-html5—移动端电商页面制作-(第1关:移动端电商页面制作)
  19. ubuntu上pip安装pytorch1.1.0和torchvision0.4
  20. 对数据结构中共享栈减少上溢的理解

热门文章

  1. 揭秘橙子钱包拥有40万+用户的背后
  2. 刚刚重做系统的计算机开机时间很慢,U盘重装系统后电脑开机慢该怎么解决?解决电脑开机慢的方法...
  3. Element和Node的区别你造吗?
  4. Vue:获取当前定位城市名
  5. 个人介绍及未来学习规划
  6. 鸿蒙系统怎么调用其他摄影头,鸿蒙分布式技术突破摄像头空间使用想象
  7. 基于单片机蓄电池充放电检测系统设计-毕设资料
  8. ASP调用存储过程中与SQL对应的数据类型
  9. 网络安全实验室---解密关
  10. 一篇文章读懂JSON