闲暇之余做了一个简单的单人的脸部关键点检测,使用的pytorch框架,别人训练好的现成模型。其中人脸检测模型是YOLOface5(onnx格式的权重),关键点检测模型是PFLD(能检测98个关键点),是别人在原论文中用MobileOne改了骨干网训练好的,我直接拿来用了。这里感谢AnthonyF333,其训练和pytorch转onnx代码均已给出,地址为GitHub - AnthonyF333/PFLD_GhostOne。最终我的项目放到了github上,地址为:https://github.com/luoyoutao/FaceKeyPoints。
废话不多说,我直接上代码了(这个代码可以直接运行,不过有些路径参数需要根据自己的实际项目来更改一下)。
首先,导入需要的包:
import cv2
import time
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import torch
import onnxruntime
import torchvision.transforms as transforms
下面是检测的主函数(会调用一些其他函数,在后面):
整体的流程是:
1、设置一些路径参数;
2、加载模型;
3、onnx的预热,即模型第一次预测需要花费大量的时间启动GPU,为了让真实检测时顺畅,先给模型喂一个数据。
检测的流程:
1、将原图复制一份,缩放到640*640。如果直接让输入视频或者摄像头的尺寸为640*640,那么检测就更快,且更方便。
2、送入yolo5face模型,输出shape是(12500, 16),即有12500个box,每个box16个数据,分别是center_x, center_y, w, h, threse, ....。然后将center_x, center_y, w, h转换成x1, y1, x2, y2,即对角线坐标。可能会检测到多个人脸,我这里由于检测单人的,所有直接取检测分数值最大的box,nms函数就简单得多。先sort排序,返回第一个box即可。我参考的这个项目,他是按照多人检测的,你可以根据自己的需求来即可。

本文介绍了一种基于PyTorch框架的人脸关键点检测方法,采用YOLOFace进行人脸检测及PFLD模型进行关键点定位,实现了高效的单人脸关键点检测。
最低0.47元/天 解锁文章
1703

被折叠的 条评论
为什么被折叠?



