收藏
回答

视觉算法VKSession.start真机调用2000004,使用预览小程序闪退

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug VKSession.start 微信安卓客户端 8.0.42 3.1.2
const that = this;
			uni.chooseImage({
				count: 1,
				success: function (res) {
					// 获取到相册的一张图片的本地路径
					const path = res.tempFilePaths[0];


					// 获取图片信息
					uni.getImageInfo({
						src: path,
						success: (imageInfo) => {
							// 压缩图片
							console.log(imageInfo, 135);
							that.ocrImg = imageInfo;
							uni.getFileSystemManager().readFile({
								filePath: path,
								encoding: 'binary',
								success: (readFileRes) => {
									const arrayBuffer = readFileRes.data;
									console.log('开始检测');
									const session = wx.createVKSession({
										track: {
											OCR: { mode: 2 } // mode: 1 - 使用摄像头;2 - 手动传入图像
										}
									});


									// 静态图片检测模式下,每调一次 runOCR 接口就会触发一次 updateAnchors 事件
									session.on('updateAnchors', (anchors) => {
										console.log('anchors.text', ''.concat(anchors.map((anchor) => anchor.text)));
									});


									// 需要调用一次 start 以启动
									session.start((errno) => {
										if (errno) {
											// 如果失败,将返回 errno
											console.log(errno, '检测失败');
										} else {
											// 否则,返回null,表示成功
											session.runOCR({
												frameBuffer: arrayBuffer, // 图片 ArrayBuffer 数据。待检测图像的像素点数据,每四项表示一个像素点的 RGBA
												width: that.ocrImg.width, // 图像宽度
												height: that.ocrImg.height // 图像高度
											});
										}
									});
								},
								fail: (readFileError) => {
									console.error('读取本地文件失败', readFileError);
									reject(readFileError);
								}
							});
						}
					});
				}
			});
回答关注问题邀请回答
收藏

2 个回答

  • Demons
    Demons
    2023-10-18

    你好,2000004是设备不支持,用的什么设备,换台看看呢?

    2023-10-18
    有用
    回复 2
    • 望青山
      望青山
      2023-10-18
      您好,我使用华为mate50会报这个错,ios设备和安卓设备在进行VKSession.runOCR这一步代码小程序会闪退
      2023-10-18
      回复
    • 师弟
      师弟
      2023-12-15
      换台设备也是一样
      2023-12-15
      回复
  • CRMEB
    CRMEB
    2023-10-18

    从代码中可以看出,你在调用`session.start()`时传入了一个回调函数。这个回调函数会在`session.start()`执行完毕后被调用,如果执行成功,它会接收一个`errno`参数,如果执行失败,它会接收一个错误对象。


    在你的代码中,你使用了`if (errno)`来判断`session.start()`是否执行成功。但是,这里的`errno`并不是一个错误码,而是一个表示状态的整数。在微信的视觉算法API中,`errno`为0表示成功,其他值表示失败。因此,你应该使用`if (errno !== 0)`来判断`session.start()`是否执行成功。


    另外,你的代码中使用了`session.runOCR()`来执行OCR识别。这个方法也有一个回调函数,它同样会在执行完毕后被调用。你需要确保在调用`session.runOCR()`之前已经调用了`session.start()`,并且`session.start()`执行成功。否则,`session.runOCR()`可能无法正确执行。


    最后,你的代码中使用了`session.on('updateAnchors', ...)`来监听更新锚点的事件。但是,这个事件是在静态图片检测模式下触发的,而不是在手动传入图像的情况下触发的。如果你希望在手动传入图像的情况下触发这个事件,你需要将`track`对象的`OCR`属性设置为`{ mode: 2, manualInput: true }`。

    2023-10-18
    有用
    回复 1
    • 望青山
      望青山
      2023-10-18
      是的,开发模式中我打印了,但是不知道为什么真机调试会直接2000004,然后在开发工具使用预览功能,再次跑到session.start代码的时候会闪退,请问这个是什么问题?手机设备是华为mate50
      2023-10-18
      回复
登录 后发表内容