目录
- 前言
- 图像识别概述
- 使用场景
- 业务流程逻辑
- 实现图像识别
结束语
前言
在移动应用开发中,图像处理和识别是一项常见而重要的功能,而且随着移动开发的技术革新,越来越多的好用的功能都在被推出来。而HarmonyOS提供了强大的图像识别能力,允许开发者轻松实现对本地图片的识别和处理。那么本文就来详细介绍如何在HarmonyOS应用中识别本地图片,包括图片的加载、处理和识别流程,方便大家了解和学习使用。
图像识别概述
图像识别技术涉及从图像中提取信息、识别对象和特征。在HarmonyOS中,可以通过集成华为机器学习服务中的图像识别服务来实现这一功能,该服务提供了包括但不限于人脸检测、图像分类、对象识别等多种能力。图片识码能力支持对图库中的码图进行扫描识别,并获取信息。在HarmonyOS中,图像识别通常涉及以下步骤:
1.获取图片:从本地存储或应用资源中获取图片。
2.预处理:对图片进行必要的预处理,如调整大小、增强对比度等。
3.处理结果:根据识别结果执行后续操作。使用场景
在日常开发和实际使用过程中,图片识码能力支持对图库中的条形码、二维码、MULTIFUNCTIONAL CODE进行识别,并获得码类型、码值、码位置信息,该能力可用于一图单码和一图多码的识别,比如条形码、付款码等。
业务流程逻辑
接下来分享一下关于图像识别的业务流程逻辑,具体流程图如下所示:
通过上图可以看到,用户向开发者的应用发起图片识码请求,具体如下所示:
1.应用通过调用Scan Kit的decode接口启动图片识码。
2.Scan Kit通过回调返回图片识码结果。
3.应用向用户返回扫码结果。实现图像识别
关于实现图像识别,图片识码接口支持识别图库中的条形码,二维码以及MULTIFUNCTIONAL CODE,并返回图片中码图的值,类型以及码的位置信息(码图最小外接矩形左上角和右下角的坐标)。那么下面就通过一个完整的示例来分享,下面示例为调用图片识码的detectBarcode.decode接口获取码图信息,具体实现步骤如下所示。
1、导入图片识码接口和相关接口模块
导入图片识码接口和相关接口模块,这个接口提供了图片识码参数和方法,导入方法如下所示:
// 导入图片识码需要的日志和picker模块
import { scanCore, scanBarcode, detectBarcode } from '@kit.ScanKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
2、调用detectBarcode.decode接口
接着是通过Promise回调函数得到扫码结果,InputImage对象中uri参数推荐通过picker方式获取,具体示例如下所示:
@Entry
@Component
struct DetectPage {
build() {
Column() {
Button('Promise with options')
.backgroundColor('#0D9FFB')
.fontSize(20)
.fontColor('#FFFFFF')
.fontWeight(FontWeight.Normal)
.align(Alignment.Center)
.type(ButtonType.Capsule)
.width('90%')
.height(40)
.margin({ top: 5, bottom: 5 })
.onClick(() => {
// 定义识码参数options
let options: scanBarcode.ScanOptions = {
scanTypes: [scanCore.ScanType.ALL],
enableMultiMode: true,
}
// 通过picker拉起图库的图片
let photoOption = new photoAccessHelper.PhotoSelectOptions();
photoOption.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
photoOption.maxSelectNumber = 1;
let photoPicker = new photoAccessHelper.PhotoViewPicker();
photoPicker.select(photoOption).then((result) => {
// 定义识码参数inputImage,其中uri为picker选择图片
let inputImage: detectBarcode.InputImage = { uri: result.photoUris[0] };
try {
// 调用图片识码接口
detectBarcode.decode(inputImage, options).then((result: Array<scanBarcode.ScanResult>) => {
}).catch((error: BusinessError) => {
});
} catch (error) {
}
})
});
}
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)
}
}
然后是通过Callback回调函数得到扫码结果,InputImage对象中uri参数推荐通过picker方式获取,具体示例代码如下所示:
@Entry
@Component
struct DetectPage {
build() {
Column() {
Button('Callback with options')
.backgroundColor('#0D9FFB')
.fontSize(20)
.fontColor('#FFFFFF')
.fontWeight(FontWeight.Normal)
.align(Alignment.Center)
.type(ButtonType.Capsule)
.width('90%')
.height(40)
.margin({ top: 5, bottom: 5 })
.onClick(() => {
// 定义识码参数options
let options: scanBarcode.ScanOptions = {
scanTypes: [scanCore.ScanType.ALL],
enableMultiMode: true,
enableAlbum: true
}
// 通过选择模式拉起photoPicker界面,用户可以选择一个图片
let photoOption = new photoAccessHelper.PhotoSelectOptions();
photoOption.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
photoOption.maxSelectNumber = 1;
let photoPicker = new photoAccessHelper.PhotoViewPicker();
photoPicker.select(photoOption).then((result) => {
// 定义识码参数inputImage,其中uri为picker选择图片
let inputImage: detectBarcode.InputImage = { uri: result.photoUris[0] };
try {
// 调用图片识码接口
detectBarcode.decode(inputImage, options,
(error: BusinessError, result: Array<scanBarcode.ScanResult>) => {
if (error && error.code) {
return;
}
});
} catch (error) {
}
})
});
}
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)
}
}
3、关于模拟器使用
关于识别本地图片的测试,是支持模拟器开发的,使用指导请参见使用模拟器运行应用/服务:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides... 。
结束语
通过本文的详细介绍,可以看到图像识别是HarmonyOS开发中的一项强大功能,它为应用带来了更多的可能性和创新空间。通过上面的详细介绍,大家想必应该了解了如何在HarmonyOS应用中实现对本地图片的识别。然而随着技术的不断发展,个人觉得图像识别技术将在HarmonyOS生态中扮演越来越重要的角色,给所有用户带来更加丰富和便捷的体验,非常不错的技术。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。