【一步步开发AI运动小程序】十九、运动识别中如何解析RGBA帧图片?

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文介绍了如何将相机抽取的RGBA帧图像解析为`.jpg`或`.png`格式,适用于体测、赛事等场景。首先讲解了RGBA图像结构,其为一维数组,每四个元素表示一个像素的颜色与透明度值。接着通过`uni.createOffscreenCanvas()`创建离屏画布以减少绘制干扰,并提供代码实现,将RGBA数据逐像素绘制到画布上生成图片。最后说明了为何不直接使用拍照API及图像转换的调用频率建议,强调应先暂存帧数据,运动结束后再进行转换和上传,以优化性能。

引言 最近有不少开发者向我们咨询,像体测、赛事等应用场景中,需要保存运动过程的图像,如何将相机抽取的RGBA帧图像解析成.jpg.png格式的图像?今天我们就为您介绍相应的解决方案。

一、RGBA图像结构。

RGBA图像为一维数组,每四个元素描写一个图像像素,前三元素为颜色值,第四个元素为透明度值,按列扫描顺序分布,如下图所示,为一个宽2px、高3px的结果,如下图所示:
115969-20240709101019056-2026318129.png

115969-20240709102923126-2091689550.png

二、相关API。

根据上面的图像结构,我们把相应的像素点在canvas上画出来即可。为了减少绘制时对界面的干扰,我们使用uni.createOffsetScreen()创建离屏画布绘制。
115969-20240709103455070-660287959.png

三、代码实现。

实现代码如下,抽帧代码见前面的抽帧章节。

...
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、图像转换调用频率。

由于图像转换是比较消耗计算资源的,所以建议不要在抽帧时同步调用图像转换,建议先暂存要转换的帧,等运动结束是再进行转换、上传等操作。

相关文章
|
8天前
|
人工智能 程序员 测试技术
AI 时代,为什么编程能力≠ 开发门槛
在 2.0 阶段,我们目标是实现面向任务的协同编码模式,人的主要职责转变为任务的下发、干预以及最后结果的审查。在这个过程中,人的实际工作量开始减轻,AI 工作的占比显著提升。目前的 2.0 版本是我们最近上线的。
190 68
|
9天前
|
人工智能 开发框架 决策智能
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
谷歌开源的Agent Development Kit(ADK)是首个代码优先的Python工具包,通过多智能体架构和灵活编排系统,支持开发者在百行代码内构建复杂AI代理,提供预置工具库与动态工作流定义能力。
117 3
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
|
4天前
|
人工智能 JSON 小程序
【一步步开发AI运动APP】七、自定义姿态动作识别检测——之规则配置检测
本文介绍了如何通过【一步步开发AI运动APP】系列博文,利用自定义姿态识别检测技术开发高性能的AI运动应用。核心内容包括:1) 自定义姿态识别检测,满足人像入镜、动作开始/停止等需求;2) Pose-Calc引擎详解,支持角度匹配、逻辑运算等多种人体分析规则;3) 姿态检测规则编写与执行方法;4) 完整示例展示左右手平举姿态检测。通过这些技术,开发者可轻松实现定制化运动分析功能。
|
12天前
|
人工智能 Rust 自然语言处理
37.1K star!AI模型全能工具箱,这个开源项目让智能体开发更简单!
"Awesome MCP Servers 是当前最全面的模型上下文协议服务器集合,为AI开发者提供开箱即用的工具链支持。通过标准化协议实现AI模型与各类资源的无缝对接,堪称智能体开发的瑞士军刀!"
|
2天前
|
人工智能 Java 定位技术
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
本文详细讲解了Java开发者如何基于Spring AI Alibaba框架玩转MCP(Model Context Protocol),涵盖基础概念、快速体验、服务发布与调用等内容。重点包括将Spring应用发布为MCP Server(支持stdio与SSE模式)、开发MCP Client调用服务,以及在Spring AI Alibaba的OpenManus中使用MCP增强工具能力。通过实际示例,如天气查询与百度地图路线规划,展示了MCP在AI应用中的强大作用。最后总结了MCP对AI开发的意义及其在Spring AI中的实现价值。
|
10天前
|
人工智能 前端开发 物联网
【05】20250416优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-增加告警中心相关卡片页面WarningCardWidget相关-增加Canvas 绘制折线图-Canvas 绘制柱状图-首页-优雅草卓伊凡
【05】20250416优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-增加告警中心相关卡片页面WarningCardWidget相关-增加Canvas 绘制折线图-Canvas 绘制柱状图-首页-优雅草卓伊凡
30 0
【05】20250416优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-增加告警中心相关卡片页面WarningCardWidget相关-增加Canvas 绘制折线图-Canvas 绘制柱状图-首页-优雅草卓伊凡
|
15天前
|
人工智能 前端开发 Java
2025 开发必备:精选免费 AI 辅助工具,效率狂飙不停
2025年,AI技术深度融入编程领域,诞生了多款免费且功能强大的辅助工具。通义灵码精通200多种语言,可快速生成代码框架,提升开发效率超10%,还为新手提供学习指导。Google Gemini Code Assist每月完成18万次代码补全,支持智能交互与代码审查,优化团队协作。飞算JavaAI专注Java全流程开发,从需求分析到代码生成实现十倍提效。这些工具大幅降低编程门槛,助力开发者高效高质完成任务。
|
2天前
|
人工智能 自然语言处理 搜索推荐
Manus爆火,我发现平替开源项目OpenManus带你玩转AI智能体开发,无需邀请码!
在AI技术日新月异的今天,OpenManus像一把打开智能体开发大门的万能钥匙,让每个人都能轻松构建自己的AI助手!
|
2天前
|
人工智能 小程序 API
【一步步开发AI运动APP】八、自定义姿态动作识别检测——之姿态相似度比较
本文介绍了如何通过姿态相似度比较技术简化AI运动应用开发。相比手动配置规则,插件`pose-calc`提供的姿态相似度比较器可快速评估两组人体关键点的整体与局部相似度,降低开发者工作量。文章还展示了在`uni-app`框架下调用姿态比较器的示例代码,并提供了桌面辅助工具以帮助提取标准动作样本,助力开发者打造性能更优、体验更好的AI运动APP。
|
3天前
|
人工智能 Java 定位技术
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
本文以原理与示例结合的形式讲解 Java 开发者如何基于 Spring AI Alibaba 框架玩转 MCP。

热门文章

最新文章

推荐镜像

更多
下一篇
oss创建bucket