当前位置: 首页 > news >正文

使用dlib进行人脸检测和对齐

最近在配置人脸属性识别的服务,用过faceboxes_detector(faster rcnn的包),也用过face_recognition的,但是她们都没有做人脸对齐,而且检测人脸的范围也不太一样。

没有做人脸对齐的时候,使用属性识别模型,效果会较差。

后面查怎么进行人脸对齐,知道dlib可以做,而且这个包也能做人脸检测,那我就不需要再配置那么多用不到的包了,只用这个工具就行。

参考https://blog.csdn.net/superdont/article/details/126300274所写的

因为服务资源有限,不能上传太大的图像到model里,所以我对图像的尺寸做了限制。这就需要最后的结果要把真实坐标还原。

不过脸部的图像还是去原图里截取,可以更加清晰,不浪费高像素。

修改如下

步骤1:初始化

import dlib# 构造检测器detector = dlib.get_frontal_face_detector()# 载入模型predictor  = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')# 模型链接:https://pan.baidu.com/s/1Hp7IZnf2Wez_kYOYfToc_w 提取码:p8ps 

步骤2:获取人脸框集合

def face_detect(image):"""进行人脸检测Args:img:array输入:原图,opencv读取的bgr图片输出:人脸检测框位置,resize倍数"""h,w = image.shape[:2]scale = max(h,w)/1000  # 上服务必须限制尺寸,太小的人脸可丢弃image = cv2.resize(image, (int(w/scale), int(h/scale)))detections = detector(image, 1)return detections, scale

步骤3:根据原始图像、人脸检测框位置,还原原图的人脸检测框坐标位置

步骤4:根据原始图像、人脸关键点获取人脸对齐结果

步骤5:查看对齐后的人脸图像

以上步骤全写在下面这个函数里

def get_face_attributes(image):result = []image_height, image_width, _ = image.shapedetections, scale = face_detect(image)#构建一个dlib.rectangles对象#因为需要把计算好的原图坐标,做成rectangles格式,输入dlib.get_face_chipsfaceBoxs = dlib.rectangles() face_dect_list = []#步骤3:根据原始图像、人脸检测框位置,还原原图的人脸检测框坐标位置for i in range(len(detections)):det_xmin = int(detections[i].left() * scale)det_ymin = int(detections[i].top() * scale)det_xmax = int(detections[i].right() * scale)det_ymax = int(detections[i].bottom() * scale)face_dect_list.append([det_xmin,det_ymin,det_xmax,det_ymax]) #原图坐标rectangle = dlib.rectangle(det_xmin, det_ymin, det_xmax, det_ymax)faceBoxs.append(rectangle) #新的rectangles格式坐标#构造容器faces = dlib.full_object_detections()#将所获取的人脸框集合,逐个放入容器faces中。for faceBox in faceBoxs:faces.append(predictor(image, faceBox)) # 调用函数get_face_chips完成对人脸图像的对齐(倾斜校正)faces = dlib.get_face_chips(img, faces, size=256)i = 0for face in faces:face_image = np.array(face).astype(np.uint8)#可保存查看cv2.imwrite("result"+str(i)+".jpg",face_image)attributes_dict = {}#我需要做的人脸属性检测,这里不展开attributes_dict = dete_attributes1(face_image,attributes_dict)attributes_dict = dete_attributes2(face_image,attributes_dict)attributes_dict = dete_attributes3(face_image,attributes_dict)person_dict = {"face_loc":face_dect_list[i],"face_attributes":attributes_dict}result.append(person_dict)i+=1return result

相关文章:

使用dlib进行人脸检测和对齐

最近在配置人脸属性识别的服务,用过faceboxes_detector(faster rcnn的包),也用过face_recognition的,但是她们都没有做人脸对齐,而且检测人脸的范围也不太一样。没有做人脸对齐的时候,使用属性识…...

将python代码封装成c版本的dll动态链接库

前言 将python程序打包成DLL文件,然后用C调用生成的DLL文件,这是一种用C调用python的方法,这一块比较容易遇到坑。网上关于这一块的教程不是很多,而且大部分都不能完全解决问题。我在傻傻挣扎了几天之后,终于试出了一个…...

AI技术网关如何用于安全生产监测?有什么优势?

现代工业生产和运营的规模越来越庞大、系统和结构越来越复杂,现场的风险点多面广,给作业一线的安全监管带来极大的挑战。 针对工地、煤矿、危化品、加油站、烟花爆竹、电力等行业的安全生产监管场景,可以借助AI智能与物联网技术,…...

2|数据挖掘|关联规则|Association Rules|Apriori算法|Frequent-pattern tree和FP-growth算法|11.11

...

刷题记录:牛客NC53370 Forsaken的三维数点

传送门:牛客 题目描述: Forsaken现在在一个三维空间中,空间中每个点都可以用(x,y,z)表示。突然,三维空间的主人出现 了,如果Forsaken想要继续在三维空间中呆下去,他就必须回答三维空间主人的问题.主人会在空间 中坐标为(x,y,z)处…...

lombok的原理 和 使用

原理Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。其实并没有改变字节码文件的任何内容,只是简化的程序员编写代码的方式。不使用lombok:使用lombok:lombok常用注解Setter :注解在类或字段&#x…...

UDP网络编程

UDP和TCP 前几节我们提到了计算机网络编程中的TCP编程,TCP和UDP都是计算机机网络通信的传输层中的传输协议,今天我们来学习计算机网络编程中的基于UDP传输协议的网络编程 首先我们要了解TCP和UDP的区别 它们是同属于计算机网络传输层的传输协议 TCP&…...

“合并区间”问题解析及其思考

合并区间题目以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。解析本题思路相对比较容易想先对各个区间按左…...

2023年理想新能源汽车核心部件解密

理想主要硬件清单(L9车型) 汽车结构 设置名称 规格 备注 价格 供应商 感知层...

C++ 将一个vector内容赋值给另一个vector,及swap与assign的区别

在本文中&#xff0c;我们将主要介绍5种将一个vector内容赋值给另一个vector的方式&#xff0c;顺便讨论下swap与assign的区别。 赋值 方式一、申明时赋值 vector<int> v2; v2.push_back(0); v2.push_back(1);vector<int> v1(v2); //声明方式二、使用assign赋值…...

PMP的价值有哪些?

我个人认为&#xff0c;考证只有两个出发点是正确的。一是为了提升自己或者满足自己的兴趣&#xff0c;另一个是和自己的职业规划相关。 比如&#xff0c;有同学想提升自己英语能力&#xff0c;可以考四六级&#xff0c;或者更厉害一点的考雅思、托福。比如&#xff0c;有的同…...

OnGUI label 控件||Unity 3D GUI教程||OnGUI Background Color 控件

Unity 3D Label 控件用于在设备的屏幕上创建文本标签和纹理标签&#xff0c;和Box 控件类似&#xff0c;可以显示文本内容或图片。Label 控件一般用于显示提示性的信息&#xff0c;如当前窗口的名称、游戏中游戏对象的名字、游戏对玩家的任务提示和功能介绍等。具体使用方法如下…...

从 JavaScript 中的数组中删除空对象

从数组中删除空对象&#xff1a; 使用 Array.filter() 方法遍历数组。将每个对象传递给 Object.keys() 方法并检查键的长度是否不等于 0。filter 方法将返回一个不包含空对象的新数组。 const arr [{}, {id: 1}, {}, {id: 2}, {}];const results arr.filter(element > {…...

【C++】AVL树和红黑树(插入和测试详解)

文章目录1、AVL树1.1 AVL树的插入1.2 总结与测试AVL树2、红黑树2.1 红黑树的插入2.2 红黑树的测试了解AVL树是为了了解红黑树&#xff0c;了解红黑树是为了更好的理解set和map。 1、AVL树 AVL树是在二叉搜索树的基础上进行了严格的平衡&#xff0c;能做到平衡的关键是通过平衡…...

Centos7 安装 Mysql 8.0.32,详细完整教程(好文章!!)

mysql5.7的安装方式参考之前的文章&#xff1a; centos7 安装 Mysql 5.7.27&#xff0c;详细完整教程&#xff08;好文章&#xff01;&#xff01;&#xff09;_HD243608836的博客-CSDN博客 一、检查mysql版本冲突 先检查是否已经存在mysql&#xff0c;若存在卸载&#xff0…...

Apache Beanutils为什么被禁止使用?

收录于热门专栏Java基础教程系列&#xff08;进阶篇&#xff09; 在实际的项目开发中&#xff0c;对象间赋值普遍存在&#xff0c;随着双十一、秒杀等电商过程愈加复杂&#xff0c;数据量也在不断攀升&#xff0c;效率问题&#xff0c;浮出水面。 问&#xff1a;如果是你来写…...

sql server执行md5加密的时候,字符串前带N和不带N的结果是不一样的

最近因为项目的需要&#xff0c;报表中需要对数据进行MD5加密&#xff0c;结果报表系统得出来的sql语句&#xff0c;字符串前都自动带了N&#xff0c;执行时&#xff0c;发现得到的结果跟在数据库中执行的sql&#xff08;字符串不带N&#xff09;得的值不一样&#xff0c;最后自…...

01Python编译器和编辑器下载

Python下载 通过python官网下载:https://www.python.org/因为python官网的服务器在国外,我们可以通过腾讯软件中心下载https://pc.qq.com/search.html#!keyword=python 腾讯软件中心下载请使用普通下载,其他什么下载会自动帮你下个电脑管家(没必要) python简单描述 python…...

CHAPTER 5 自动发现、自动注册、分布式监控、SNMP监控

自动发现与自动注册5.1 自动发现与自动注册5.1.1 简介5.1.2 两种模式5.2 自动发现--被动模式5.3 自动注册--主动模式5.4 分布式监控5.4.1 介绍5.4.2 配置zabbix proxy5.5 SNMP监控5.5.1 使用范围5.5.2 安装snmp程序5.5.3 配置snmp程序5.5.4 测试snmp5.5.5 在web界面进行配置5.1…...

P5311 [Ynoi2011] 成都七中

题目描述 给你一棵 nnn 个节点的树&#xff0c;每个节点有一种颜色&#xff0c;有 mmm 次查询操作。 查询操作给定参数 lrxl\ r\ xl r x&#xff0c;需输出&#xff1a; 将树中编号在 [l,r][l,r][l,r] 内的所有节点保留&#xff0c;xxx 所在连通块中颜色种类数。 每次查询操…...

汉字拼音转换工具选型与实战指南:用pinyinjs解决多场景字符处理难题

汉字拼音转换工具选型与实战指南&#xff1a;用pinyinjs解决多场景字符处理难题 【免费下载链接】pinyinjs 一个实现汉字与拼音互转的小巧web工具库&#xff0c;演示地址&#xff1a; 项目地址: https://gitcode.com/gh_mirrors/pi/pinyinjs 在数字化产品开发中&#xf…...

记录下在Windows中如何远程将当前Windows部署成PVE

背景&#xff1a; 做这件事实属无奈&#xff0c;公司另外一个分支的一个服务器(目前是Windows)需要跑多个平台的服务&#xff0c;目前Windows Server上部署虚拟机&#xff0c;直接装VMware workstation性能实在是糟糕&#xff0c;迫不得已考虑远程(无显示器、无KVM)将Windows …...

3分钟掌握Windows音频路由:让每个程序都有专属音频输出 [特殊字符]

3分钟掌握Windows音频路由&#xff1a;让每个程序都有专属音频输出 &#x1f3a7; 【免费下载链接】audio-router Routes audio from programs to different audio devices. 项目地址: https://gitcode.com/gh_mirrors/au/audio-router 你是否曾经遇到过这样的烦恼&…...

PP-DocLayoutV3快速调用:10行Python代码实现文档解析

PP-DocLayoutV3快速调用&#xff1a;10行Python代码实现文档解析 你是不是经常遇到一堆扫描的PDF或者图片文档&#xff0c;想快速提取里面的文字、表格和图片&#xff0c;却不知道从何下手&#xff1f;手动整理不仅费时费力&#xff0c;还容易出错。今天&#xff0c;我就来分享…...

TI C2000 DSP新手必看:用CCS建第一个工程时,如何避免头文件找不到的坑?

TI C2000 DSP开发避坑指南&#xff1a;从零构建CCS工程的正确姿势 第一次打开Code Composer Studio(CCS)时&#xff0c;那个充满按钮和菜单的界面就像面对一架航天飞机的控制台——每个开关都看起来很重要&#xff0c;但完全不知道从哪下手。特别是当你在教程指导下创建了第一个…...

探索视频采集技术:OBS Studio实现高效直播录制的创新方法

探索视频采集技术&#xff1a;OBS Studio实现高效直播录制的创新方法 【免费下载链接】obs-studio OBS Studio - 用于直播和屏幕录制的免费开源软件。 项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio 在当今内容创作领域&#xff0c;视频采集技术是直播与…...

手把手教你给RK3588开发板添加RTL8188EUS USB无线网卡驱动(附完整配置流程)

RK3588开发板实战&#xff1a;RTL8188EUS无线网卡驱动移植全指南 在嵌入式开发领域&#xff0c;为特定硬件平台添加第三方外设驱动是开发者常遇到的挑战。本文将详细介绍如何在Rockchip RK3588开发板上为RTL8188EUS USB无线网卡移植驱动&#xff0c;从环境准备到功能验证&#…...

【权威认证|Pydantic v2+Starlette v1.12+FastAPI 2.0深度兼容报告】:为什么你的async generator在/ai/chat接口里静默失败?

第一章&#xff1a;FastAPI 2.0 异步 AI 流式响应 避坑指南FastAPI 2.0 对异步流式响应&#xff08;StreamingResponse&#xff09;的底层行为进行了关键调整&#xff0c;尤其在事件循环绑定、响应体缓冲策略及客户端断连检测方面与 1.x 版本存在显著差异。若沿用旧版流式生成器…...

CLIP Prompt Tuning实战指南:如何用少量样本优化多模态模型性能

最近在做一个多模态内容理解的项目&#xff0c;用到了CLIP模型。大家都知道CLIP很强大&#xff0c;但真到了要让它适应我们自己的业务数据时&#xff0c;传统全量微调&#xff08;Full Fine-tuning&#xff09;那套方法就有点让人头疼了——动辄几十GB的显存需求&#xff0c;还…...

多维尺度变换(MDS)实战指南:从原理到Python实现

1. 多维尺度变换&#xff08;MDS&#xff09;是什么&#xff1f; 多维尺度变换&#xff08;Multidimensional Scaling&#xff0c;简称MDS&#xff09;是一种经典的降维算法&#xff0c;它的核心思想是通过保持数据点之间的距离关系&#xff0c;将高维数据映射到低维空间。想象…...