【一步步开发AI运动小程序】二十、AI运动小程序如何适配相机全屏模式?

embedded/2024/10/18 16:41:49/

引言小程序camera组件预览和抽帧图像不一致的特性影响,一直未全功能支持全屏模式,详见本系列文件第四节小程序如何抽帧;随着插件在云上赛事、健身锻炼、AI体测、AR互动场景的深入应用,各开发者迫切的希望能在全屏模式下应用,以便获得更合理的UI布局和更佳的用户体验,经过我们的努力摸索小程序camera组件的预览处理逻辑,优化更新插件特性,现在已完美支持相机全屏模式应用。

一、全屏模式下产生的问题?

1.1、入镜检测与预览不一致。

camera组件的宽高比与相机输出的图像不一致时,会对预览图像进行裁切,这便有可能会导致检测到了人体,但是预览图像看不到人体的现象。

1.2、骨骼图与人体不重合。

还是由于camera对相机输出图像进行裁切预览的问题,可能会导致输出的骨骼图,人体关键点点位与预览图像不重合的现象。

二、camera如何裁剪预览图像?

经过我们的实测分析,小程序camera组件在宽高比与相机输出图像宽高比不一致时,采用的是长边按比缩放,短边居中裁切的模式进行缩放,如下图所示:
image

这是在相机输出帧大小640px480px/480px640px,camera组件在iPhone 8 plus(屏大小414px*736px)横竖屏下的裁切效果。

三、如何适配处理全屏模式的问题?

根据上面camera的预览裁切模式效果观察,我们只要计算出被裁剪缩放比例及短边两边的留白,并进行相应的缩放及偏移即可,代码如下:

function fullScreenFit(width, height) {const winfo = uni.getWindowInfo();this.previewWidth = winfo.windowWidth;this.previewHeight = winfo.windowHeight;if (winfo.windowHeight > winfo.windowWidth) {//竖屏console.log('竖屏');this.previewRate = winfo.windowHeight / height;this.previewOffsetX = winfo.windowWidth - width * this.previewRate;this.previewOffsetX /= 2;this.previewOffsetY = 0;} else {//横屏console.log('横屏');this.previewRate = winfo.windowWidth / width;this.previewOffsetX = 0;this.previewOffsetY = winfo.windowHeight - height * this.previewRate;this.previewOffsetY /= 2;}
}//配置骨骼图偏移,需升级插件版本至1.5.5以上
this.poseGraphs = new PoseGraphs(ctx, canvas.width, canvas.height, that.previewRate);
this.poseGraphs.offsetX = that.previewOffsetX;
this.poseGraphs.offsetY = that.previewOffsetY;

当然实际使用中,还需要适配横竖屏的样式等,完整代码代码请参考我们提供的Demo项目。

三、全屏模式的副作用及建议。

上面便适配处理好了全屏模式,当然在此模式也可能会带来一些副作用,具体跟相机的输出帧图像和屏幕大小有关。

3.1、人体可视区域变小

由于全屏模式下,会对短边进行裁切,而用户根据的是可视区域进行调整人体站位,所以人体区域便变小了,可能会降低人体识别效果;建议提高camera的分辨率和帧大小至中级,将人体检测范围提高,具体请参考本系列文章相关章节。

3.2、人体检测范围变化

若您在运动时进行了人体远、近站位预检,那相应的range坐标也需进行偏移。

3.2、抽帧帧率下降

由于提高了分辨率和帧大小来应对可视区域变小的问题,在一些偏老机型可能会导致帧率下降问题。

当然以上问题,根据我们的实测,大部分情况和机型不会影响使用。

好了,全屏适配问题就为您介绍到这里,未尽问题可以联系我们进行咨询,插件将致力为您提供全面的AI运动识别解决方案,助力您快速落地AI运动AI体育AI健身AI体测AR互动等运动应用。


http://www.ppmy.cn/embedded/126884.html

相关文章

Apache Flink编译用时日志

环境:MacBook Pro (13-inch, M1, 2020) 16G [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for Flink : 2.0-SNAPSHOT: [INFO] [INFO] Flink : ............................................ SUCCES…

【10086网上营业厅-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

matlab不小心删除怎么撤回

预设项——>删除文件——>移动至临时文件夹 tem临时文件夹下

基于深度学习的手术中的增强现实导航

基于深度学习的手术中的增强现实(AR)导航技术是一种结合了先进的计算机视觉算法、深度学习模型与增强现实技术的创新应用。其主要目的是为外科手术提供实时的、精确的手术指导,帮助医生在复杂的手术过程中更好地理解患者的解剖结构&#xff0…

数据仓库中的维度建模:深入理解与案例分析

数据仓库中的维度建模:深入理解与案例分析 维度建模是数据仓库设计中最常用的一种方法,旨在简化数据访问、提高查询效率,特别适用于需要对数据进行多维分析的场景。本文将深入探讨维度建模的核心概念、设计步骤以及如何将其应用于实际案例中…

Sample Size Estimation 样本量估算(1)

Sample Size Estimation 样本量估算 Original Author: Jonathan Berkowitz PhD 原作者:Jonathan Berkowitz博士 PERC Reviewer: Timothy Lynch MD PERC审核人:Timothy Lynch医学博士 Objectives 目标 To understand the issues related to sample size and to be able to est…

微信小程序不支持font-weight:500

小程序的font-weight只支持:normal、bold、bolder和lighter。 normal 正常粗细。与 400 等值。 bold 加粗。与 700 等值。 lighter 比从父元素继承来的值更细 (处在字体可行的粗细值范围内)。 bolder 比从父元素继承来的值更粗 (处在字体可行的粗细值范围内…

C语言内存函数详解

文章目录 memcpy函数memmove函数memset函数memcmp函数 memcpy函数 void * memcpy ( void * destination, const void * source, size_t num );内存函数头文件是#include<string.h> 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 这…