目录

  • 前言
  • 图像识别技术介绍
  • 关于图像识别
  • 使用场景
  • 实现图像识别
  • 结束语

前言

在数字化时代,图像数据的识别与处理已成为智能应用的核心功能之一。而HarmonyOS作为新一代的智能终端操作系统,它提供了丰富的API和框架,使得开发者可以轻松实现图像数据的识别功能。那么本文就来详细介绍如何在HarmonyOS应用中识别图像数据,包括图像的获取、预处理、识别和结果处理。

图像识别技术介绍

图像识别技术涉及从图像中提取信息、识别对象和特征。在HarmonyOS中,可以通过集成华为机器学习服务(HMS Machine Learning Service)中的图像识别服务来实现这一功能,该服务提供了包括但不限于人脸检测、图像分类、对象识别等多种能力。

关于图像识别

其实图像数据识码能力支持对相机预览流数据中的码图进行扫描识别,并获取信息。在HarmonyOS中,图像识别通常涉及以下步骤:
1.获取图片:从本地存储或应用资源中获取图片。
2.预处理:对图片进行必要的预处理,如调整大小、增强对比度等。
3.处理结果:根据识别结果执行后续操作。

使用场景

关于图像识别的使用场景,图像数据识码能力支持对相机预览流数据中的条形码、二维码、MULTIFUNCTIONAL CODE进行识别,并获得码类型、码值、码位置信息和相机变焦比。该能力可用于一图单码和一图多码的识别,比如条形码、付款码等。

实现图像识别

图像数据识码能力支持对相机预览流数据中的条形码、二维码、MULTIFUNCTIONAL CODE进行识别,并返回码图的值、类型、码的位置信息(码图最小外接矩形左上角和右下角的坐标,QR码支持返回四个点坐标)和相机变焦比。下面介绍一个为调用detectBarcode.decodeImage接口获取码图信息的示例,具体如下所示。

1、导入接口模块

导入图像识码接口和相关接口模块,该模块提供了图像识码参数和方法,导入方法如下。

import { detectBarcode, scanBarcode, scanCore } from '@kit.ScanKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { camera } from '@kit.CameraKit';
import { image } from '@kit.ImageKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

2、使用Camera Kit

使用Camera Kit启动相机能力,实现双路预览功能。

3、实时获取预览图像数据

通过ImageReceiver实时获取预览图像数据,调用detectBarcode.decodeImage接口解析图像数据。但是需要在识别完成后再释放图像数据,具体示例如下所示:

// 从ImageReceiver获取imgComponent: image.Component,预览流设置的宽高: width, height
function decodeImageBuffer(imgComponent: image.Component, width: number, height: number) {
  let byteImg: detectBarcode.ByteImage = {
    byteBuffer: imgComponent.byteBuffer,
    // 相机预览流数据旋转90°
    width: height,
    height: width,
    format: detectBarcode.ImageFormat.NV21
  };
  let options: scanBarcode.ScanOptions = {
    scanTypes: [scanCore.ScanType.ALL],
    enableMultiMode: true,
    enableAlbum: false
  };
  try {
    detectBarcode.decodeImage(byteImg, options).then((result: detectBarcode.DetectResult) => {
     }).catch((error: BusinessError) => {
    })
  } catch (error) {

  }
}

4、处理识别结果

detectBarcode.DetectResult中返回的cornerPoints可参考以下说明使用,具体如下所示:

  • 因为屏幕自然方向和摄像头传感器方向不同,所以cornerPoints四个点的坐标需按屏幕自然方向对应的坐标系转换,其中,四个点的对应转换逻辑如下(假设创建的相机预览流宽高为1080 * 1920)。
  • 右下角(x, y):(1080 - cornerPoints[0].y, cornerPoints[0].x)
  • 左下角(x, y):(1080 - cornerPoints[1].y, cornerPoints[1].x)
  • 左上角(x, y):(1080 - cornerPoints[2].y, cornerPoints[2].x)
  • 右上角(x, y):(1080 - cornerPoints[3].y, cornerPoints[3].x)
  • 当创建的相机预览流宽高和实际预览组件XComponent的宽高不一致时,cornerPoints四个点的坐标需按缩放比例转换,比如相机预览流宽高为1080 1920,Xcomponent的宽高为width height,则坐标缩放比例ratio为:width / 1080, 最终转换后的坐标为(x ratio, y ratio)。

    结束语

    经过本文的介绍,不难看到图像识别是HarmonyOS开发中的一项强大功能,它为应用带来了更多的可能性和创新空间,而且带来的功能也是非常强大的。通过本文的介绍,想必大家都应该了解了如何在HarmonyOS应用中实现对图像数据的识别,在后面的鸿蒙开发中也能很好的运用这些技能。随着技术的不断发展,图像识别技术将在HarmonyOS生态中扮演越来越重要的角色,给用户带来更加丰富和便捷的体验。


灵芸小骏
4.7k 声望307 粉丝

移动开发者。