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

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

时间:2024-07-09 14:20:41浏览次数:12  
标签:AI frame offset buffer let RGBA 图像 运动

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

一、RGBA图像结构。

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

二、相关API。

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

三、代码实现。

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

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

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

标签:AI,frame,offset,buffer,let,RGBA,图像,运动
From: https://www.cnblogs.com/alphaair/p/18272288

相关文章

  • AI工具,如何通过 GPT-4o 提高工作效率
    文章目录引言一、理解GPT-4o及其功能二、如何利用GPT-4o提高工作效率1.代码生成与优化2.自动化测试与调试3.技术文档撰写与知识管理三、实际案例与成功应用1.GitHub协作与问题解决2.敏捷开发与迭代优化四、GPT-4o的挑战与应对策略五、未来展望与发展方向六、结论......
  • 14-45 剑和诗人19 - 一个负责任的 AI 成熟度 端到端 框架
    介绍人工智能有望改变企业和社会,但如果部署不当也会带来风险。最近围绕有偏见和不可靠的人工智能系统的争议表明,需要严格的治理来建立公众信任。这对于语言模型尤其重要——语言模型是在大量文本数据集上训练的高级人工智能模型,可以生成类似人类的写作。让我分享一个负责......
  • 使用langchain与你自己的数据对话(三):检索(Retrieval)_langchain 数据收集
    今天我们来继续讲解deepleaning.AI的在线课程“LangChain:ChatwithYourData”的第四门课:检索(Retrieval)。Langchain在实现与外部数据对话的功能时需要经历下面的5个阶段,它们分别是:DocumentLoading->Splitting->Storage->Retrieval->Output,如下图所示:在上一篇博客......
  • 新智能:巨日禄AI创作平台实现让普通人自由创作AI漫画故事视频
    巨日禄官方网站(https://ai.jurilu.com/)迎来大版本更新。船新版本,铆足马力,打开新页面即可看见两大优化:「快速入口+作品画廊」,让创作者更加方便进行操作!面向初中阶AI创作者,巨日禄AI首度为用户们发布「AI故事+AI视频+表情包推文+AI绘画」模式,同样的操作,不同的效果,等你体验!这次版......
  • Java智能之Spring AI:5分钟打造智能聊天模型的利器
    前言尽管Python最近成为了编程语言的首选,但是Java在人工智能领域的地位同样不可撼动,得益于强大的Spring框架。随着人工智能技术的快速发展,我们正处于一个创新不断涌现的时代。从智能语音助手到复杂的自然语言处理系统,人工智能已经成为了现代生活和工作中不可或缺的一部分。在这样......
  • 拆解LangChain的大模型记忆方案
    之前我们聊过如何使用LangChain给LLM(大模型)装上记忆,里面提到对话链ConversationChain和MessagesPlaceholder,可以简化安装记忆的流程。下文来拆解基于LangChain的大模型记忆方案。1.安装记忆的原理1.1.核心步骤给LLM安装记忆的核心步骤就3个:在对话之前调取之前的历史消息。......
  • 职场人该如何学习使用AI大模型(非常详细)零基础入门到精通,收藏这一篇就够了
    非技术背景的职场人想要学习和使用AI大模型,可以遵循以下步骤:基础学习:首先,需要掌握人工智能的基础知识,包括但不限于机器学习、深度学习等领域。可以通过阅读《ArtificialIntelligence:AModernApproach》和《MachineLearning》等书籍来了解这些概念[1]。此外,高等数学、......
  • ScreenAI ——能理解从信息图表到用户界面的图像和文本算法解析
    概述论文地址:https://arxiv.org/pdf/2402.04615.pdf信息图表(图表、示意图、插图、地图、表格、文档布局等)能够将复杂的数据和想法转化为简单的视觉效果,因此一直以来都被视为传播的重要元素。这种能力来自于通过布局和视觉线索使信息直观易懂。在当今日益数字化的世界中,移......
  • 9个用于测试自动化的最佳AI测试工具(2024)
    选择一款优质的基于生成式AI人工智能的测试工具能够确保测试过程的准确性和效率,从而加速整个软件测试周期。相反,设计不佳的测试工具可能无法发现错误,并可能存在安全问题。它们可能产生误报或漏报,误导开发与测试团队,导致潜在的软件故障。  1、testRigortestRigor是一个基......
  • 解决RuntimeError: Numpy is not available
    解决RuntimeError:Numpyisnotavailable首先遇到问题界面:在vscode首次运行importnumpyasnp报错:大致含义:模块不兼容:这个错误信息表示你当前运行的环境中,某些模块是使用NumPy1.x版本编译的,而你当前的NumPy版本是2.0.0。由于版本不兼容,这些模块可能会崩溃或产......