今天给大家讲讲身体的检测及关键点。依旧先给大家展示下最终的效果:
此处为视频效果截图,完整视频请点击此处查看
人体关键点检测
下一步,我们就要讲讲这最终效果是怎么得到的呢!下面我来为大家讲解一下:
第一步,老样子,先跑去抖音找一个漂亮妹妹的跳舞视频,这次不一样了,是视频呢!
第二步,拆解视频。怎么去拆解视频呢,这里就用到一个工具ffmpeg。
cmd = "Path/ffmpeg.exe " +"-i " + name +" -f image2 -vf fps=fps=25 Image/%03d.png"
os.popen(cmd)
通过第二步,视频已经被拆解成了一张张图片。然后我们对每一张图片都进行身体的检测及关键点的识别。
先初始化TengineKit:
KitCore.init(
this,
AndroidConfig
.create() // 创建
.setNormalMode() // 由于这次用的图片,所以用Normal模式
.openFunc(AndroidConfig.Func.BlazePose)
.openFunc(AndroidConfig.Func.BlazePoseLandmark)
.setInputImageFormat(AndroidConfig.ImageFormat.RGBA)// 输入图像格式
.setInputImageSize(Image_w, Image_h)// 设置输入的图片大小
.setOutputImageSize((int)Image_w,(int)Image_h)// 设置输出的图像大小
);
第四步,进行身体的检测和关键点:
Body.BodyDetect bodyDetect = Body.detect(data);
List<BodyDetectInfo> bodyDetectInfos = new ArrayList<>();
List<BodyLandmarkInfo> landmarkInfos = new ArrayList<>();
if (bodyDetect.getFaceCount() >0) {
bodyDetectInfos = bodyDetect.getDetectInfos();
landmarkInfos = bodyDetect.landmark2d();
}
Log.d("#####","Body Num: "+ bodyDetectInfos.size());
if (bodyDetectInfos ! = null && bodyDetectInfos.size() > 0) {
List<List<TenginekitPoint>> body_landmarks = newArrayList<>();
for (int i = 0; i <bodyDetectInfos.size(); i++) {
Rect rect=new Rect();
rect = bodyDetectInfos.get(i).asRect();
for (int j = 0; j < landmarkInfos.get(i).landmarks.size() ; j++) {
// x 为关键点X坐标, y为关键点Y坐标
float x = landmarkInfos.get(i).landmarks.get(j).X;
float y = landmarkInfos.get(i).landmarks.get(j).Y;
}
}
}
看到上面这串代码是不是有种熟悉的感觉,没错!我们设计成了跟人脸一样的结构,方便大家去使用。有没有很贴心~
第五步,有了身体检测框及关键点,当然是进行绘制啦
你可以通过Android的Canvas进行人脸检测框及关键点的绘制,具体绘制方法,可以代码见!
第六步, 老样子!释放!
KitCore.release();
这样就结束啦。都是熟悉的配方,都是熟悉的味道,为了无限制降低您在开发过程中的成本,我们极力设计方便您使用。希望得到您的支持。有什么问题可以QQ群见,或者评论区见。
链接见下方咯:
https://github.com/OAID/Tengi...
https://github.com/Crusoekid/...
我是小O妹,一个热爱技术的长腿美少女,更多技术文章记得关注Tengine开发者社区公众号哦~啾咪
推荐阅读
更多Tengine相关内容请关注Tengine-边缘AI推理框架专栏。