【一步步开发AI运动小程序】十九、运动识别中如何解析RGBA帧图片?
1.【一步步开发AI运动小程序】一、准备工作2. 【一步步开发AI运动小程序】二、引入插件3.【一步步开发AI运动小程序】三、运动识别处理流程4.【一步步开发AI运动小程序】四、小程序如何抽帧5.【一步步开发AI运动小程序】五、帧图像人体识别6.【一步步开发AI运动小程序】六、人体骨骼图绘制7.【一步步开发AI运动小程序】七、进行运动计时、计数8.【一步步开发AI运动小程序】八、利用body-calc进行姿态识别9.【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用10.【一步步开发AI运动小程序】十、姿态动作相似度比较11.【一步步开发AI运动小程序】十一、人体关键点跳跃追踪12.【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数0113.【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数0214.【一步步开发AI运动小程序】十四、主包超出2M大小限制,如何将插件分包发布?15.【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?16.【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?17.【一步步开发AI运动小程序】十八、如何识别用户上传图片中的人体、运动、动作、姿态?18.【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
19.【一步步开发AI运动小程序】十九、运动识别中如何解析RGBA帧图片?
20.【一步步开发AI运动小程序】二十、AI运动小程序如何适配相机全屏模式?21.AI运动小程序开发常见问题集锦一22.AI运动小程序开发常见问题集锦二23.【更新日志】新发布的1.5.0版本插件中的增强模式,作用几何?24.【一步步开发AI运动小程序】二十一、如果将AI运动项目配置持久化到后端?引言 最近有不少开发者向我们咨询,像体测、赛事等应用场景中,需要保存运动过程的图像,如何将相机抽取的RGBA帧图像解析成
.jpg
或.png
格式的图像?今天我们就为您介绍相应的解决方案。
一、RGBA图像结构。
RGBA图像为一维数组,每四个元素描写一个图像像素,前三元素为颜色值,第四个元素为透明度值,按列扫描顺序分布,如下图所示,为一个宽2px、高3px的结果,如下图所示:
二、相关API。
根据上面的图像结构,我们把相应的像素点在canvas上画出来即可。为了减少绘制时对界面的干扰,我们使用uni.createOffsetScreen()创建离屏画布绘制。
三、代码实现。
实现代码如下,抽帧代码见前面的抽帧章节。
...
onCameraReady(e) {
const context = wx.createCameraContext();
const listener = context.onCameraFrame(frame => {
this.parseToJpeg(frame);
});
listener.start();
}
parseToJpeg(){
const canvas = uni.createOffscreenCanvas({
width: frame.width,
height: frame.height,
type: '2d'
});
let offset = 0;
let gl = canvas.getContext('2d');
const buffer = frame.data;
for (let y = 0; y < frame.height; y++) {
for (let x = 0; x < frame.width; x++) {
let r = buffer[offset].toString(16).padStart(2, '0');
let g = buffer[offset + 1].toString(16).padStart(2, '0');
let b = buffer[offset + 2].toString(16).padStart(2, '0');
let a = buffer[offset + 3].toString(16).padStart(2, '0');
let color = `#${r}${g}${b}${a}`;
//console.log(color, offset);
gl.fillStyle = color;
gl.fillRect(x, y, 1, 1);
offset += 4;
}
}
}
...
四、后记
4.1、为什么不直接使用拍照API?
这主要出于两个原因,一是在抽帧的同时无法调用
CameraContext.takePhoto()
API进行拍照; 二是由于抽帧是异步的,所以无法同步调用,可能会导致识别时机的图像与拍摄的一不致。
4.2、图像转换调用频率。
由于图像转换是比较消耗计算资源的,所以建议不要在抽帧时同步调用图像转换,建议先暂存要转换的帧,等运动结束是再进行转换、上传等操作。

提供信息系统、公众号、小程序、APP订制开发服务
QQ:316455841
欢迎通过各种渠道咨询了解,免费提供信息系统建设咨询服务。
合集:
一步步开发AI运动小程序
分类:
多端移动应用
, 多端移动应用 / 小程序开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?