首页 > 编程语言 >uniapp微信小程序 [AI算法识别] camera拍摄 实时帧的实现

uniapp微信小程序 [AI算法识别] camera拍摄 实时帧的实现

时间:2024-09-24 11:21:38浏览次数:13  
标签:uniapp const context index AI 微信 listener rgb rgba

<template>
	<view class="con">
		<camera
			device-position="back"
			frame-size="small"
			resolution="high"
			@initdone="startListener"
			@stop="endListener"
			@error="error"
			mode="scanCode"
			class="camera"
		></camera>
	</view>
</template>


<style lang="scss" scoped>
.con {
	width: 100vw;
	height: 100vh;
	.camera {
		width: 100%;
		height: calc(920rpx + 180rpx);
	}
}
</style>

红色的框根据业务要求调整吧,帧数和分辨率越高最终生成的BASE64越大(小程序里BASE64压缩我还没有实现,有大佬实现的可以留个路子,蟹蟹).蓝色框指定camera为scanCode(扫码模式)

在这里插入图片描述

<script>

export default {
	data() {
		return {
			video
			context: null,
			listener: null,
			processing_flag: false
		}
	},
	methods: {
		startListener() {
			let that = this
			console.log('初始化完成********************************************')
			//camera回调
			if (this.context == null && this.listener == null) {
				const context = uni.createCameraContext()
				const listener = context.onCameraFrame(async (frame) => {
					if (that.processing_flag == false) {
						that.processing_flag = true
						const unit8Arr = new Uint8ClampedArray(frame.data.slice(0)) //数组拷贝,因为frame是个共享地址
						const thisFrameWidth = frame.width
						const thisFrameHeight = frame.height
						//计算rgb图
						const rgb = new Uint8Array(thisFrameWidth * thisFrameHeight * 3)
						that.rgba2rgb(unit8Arr, rgb, thisFrameWidth, thisFrameHeight)
						const base64Data = that.btoa(rgb)
						console.log(base64Data, '<===============base64Data ')
						// TODO 接口请求.......
						// await xxxxxxx
						that.processing_flag = false
					}
				})
				this.context = context
				this.listener = listener
			}
			this.listener.start()
		},
		endListener() {
			this.listener && this.listener.stop()
			this.context = null
		},
		error(e) {
			console.log(e.detail)
		},
		rgba2rgb(rgba, rgb, width, height) {
			let x
			let y
			let index
			let rgba_index
			let rgb_index
			for (y = 0; y < height; y++) {
				for (x = 0; x < width; x++) {
					index = y * width + x
					rgba_index = index * 4
					rgb_index = index * 3
					rgb[rgb_index] = rgba[rgba_index]
					rgb[rgb_index + 1] = rgba[rgba_index + 1]
					rgb[rgb_index + 2] = rgba[rgba_index + 2]
				}
			}
		},
		btoa(gray) {
			const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
			var bitmap
			var a
			var b
			var c
			var result = ''
			var i = 0
			var rest = gray.length % 3 // To determine the final padding
			for (; i < gray.length; ) {
				if ((a = gray[i++]) > 255 || (b = gray[i++]) > 255 || (c = gray[i++]) > 255) {
					throw new TypeError(
						"Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range."
					)
				}
				bitmap = (a << 16) | (b << 8) | c
				result +=
					b64.charAt((bitmap >> 18) & 63) +
					b64.charAt((bitmap >> 12) & 63) +
					b64.charAt((bitmap >> 6) & 63) +
					b64.charAt(bitmap & 63)
			}

			// If there's need of padding, replace the last 'A's with equal signs
			return rest ? result.slice(0, rest - 3) + '==='.substring(rest) : result
		},
	}
}

标签:uniapp,const,context,index,AI,微信,listener,rgb,rgba
From: https://blog.csdn.net/weixin_47675705/article/details/142484623

相关文章

  • GEE APP:Best Available Pixel (BAP)APP Landsat系列最佳影像的筛选应用
    目录简介参数说明像素评分功能场景中最大云层覆盖率大气不透明度Landsat-7ETM+SLC-off惩罚高级参数应用去尖峰算法Applyde-spikingalgorithm填充数据间隙执行进展library代码UI代码 web界面提示引用BAPcompositesassessmentBAPpracticaldemonstrat......
  • 领域驱动设计(Domain-Driven Design, DDD)
    目录核心概念实践原则领域驱动设计(Domain-DrivenDesign,DDD)是一种软件开发方法论,它强调将业务领域知识与软件实现紧密结合,以提高软件对于复杂业务需求的适应性和可维护性。DDD由埃里克·埃文斯(EricEvans)在其2003年出版的同名书籍《领域驱动设计》中首次提出,并逐渐成为处理复......
  • 《大模型应用开发极简入门》学习成为善用 AI 的人!看完懂得90%的大模型!{含pdf版电子书}
    ......
  • 月薪30k起,AI产品经理门槛揭秘:零基础转行真的可能吗?
    01什么是AI产品经理AI产品经理是对AI技术应用和功能落地负责,并为公司带来商业价值的一群人,主要集中在计算机视觉、语音、策略。cv:计算机视觉的AI产品,主要负责一些手势、肢体和其他部分检测的相关产品岗nlp:语音的AI产品,涉及nlp(自然语言处理)、asr(语音识别)、tts(语音合成)的......
  • 中电金信多模态鉴伪技术抵御AI造假威胁
    AI换脸技术,属于深度伪造最常见方式之一,是一种利用人工智能生成逼真的虚假人脸图片或视频的技术。基于深度学习算法,可以将一个人的面部特征映射到另一个人的面部,创造出看似真实的伪造内容。近年来,以AI换脸为代表的AIGC技术被用于诈骗活动呈显著增长趋势,给金融行业带来了巨大的安全风......
  • Google 提供基于AI的模糊测试框架
    人工智能驱动的OSS-Fuzz工具可以帮助发现漏洞,并与自动修补管道相结合。    模糊测试可以成为找出软件中零日漏洞的宝贵工具。为了鼓励开发人员和研究人员使用它,谷歌周三宣布,免费提供其模糊测试框架OSS-Fuzz。    根据谷歌的说法,通过使用该框架在大型语言......
  • async await执行顺序
    asyncawait执行顺序async/await 是用于编写异步代码的语法糖,它允许你以类似于同步代码的方式写异步操作。async 关键字声明的函数会返回一个Promise,而 await 关键字用于等待一个Promise完成。执行顺序如下:调用 async 函数。函数会继续执行,遇到 await 时,控制......
  • 使用Copilot AI解决openwrt 19.07 nas samba在Windows网络[网上邻居]中无法看到的问题
    1.问题缘由我的一台openwrt路由可以在Win11的网络中看到,另一台自己刷的openwrt19.07nas却在win11网络中看不到,但直接用IP可以访问其samba3.6共享的文件夹。为何这台不能被Windows发现呢?2.问题解决自己搜索了下,找不到解决方案,问了下Googlegemini,回答不能解决,有点答非所闻......
  • 排查Linux中free -h 显示的 available 小于 free 值
    一、服务器上使用free-h命令显示如下 正常情况下:total=free+used+buff/cacheavailable=free+可回收的buff/cache理论上 available至少应该等于free,free尚未使用内存,available:可用内存,可用内存=尚未使用内存+可回收的buff/cache但是上面显示的available大大小于free值。......
  • 安装阿里图文融合AI - AnyText心路历程(安装失败告终,心痛!)
    Windows环境下安装AnyText。大致的安装流程:参考:https://zhidao.baidu.com/question/636353961646106444.htmlwindows打开终端:参考:https://baijiahao.baidu.com/s?id=1792666163328932147&wfr=spider&for=pc安装Ubuntu:参考:https://baijiahao.baidu.com/s?id=1......