-
-
[原创]巧用多目标识别能力,帮助应用实现智能化图片解析
-
发表于: 2025-1-24 17:02 4280
-
为了提升用户体验,各类应用正通过融合人工智能技术,致力于提供更智能、更高效的服务。应用不仅能通过文字和语音的方式与用户互动,还能深入分析图片内容,为用户提供精准的解决方案。
在解析图片之前,应用首先需要准确识别图片中包含的元素,基于此,HarmonyOS SDK 基础视觉服务(Core Vision Kit)提供了多目标识别功能,可以同时检测出给定图片中的各种物体,包括风景、动物、植物、建筑、树、人脸、表格、文本等位置,并框选出物体,在有需要的情况下,也可将识别结果展示在界面上。
多目标识别功能是一项应用范围较为广泛的基础能力,在搜索引擎应用场景中,应用可借助该能力实现图像的搜索和分类;在AR游戏中,多目标识别功能可以识别出摄像头前的玩家,从而与虚拟游戏内容产生互动;此外,多目标识别功能还可应用于安防监控系统中,通过识别行人、车辆等等目标进行安全分析和紧急响应。
开发步骤
1.在使用多目标识别时,将实现多目标识别相关的类添加至工程。
1 2 | import { BusinessError } from '@kit.BasicServicesKit' ; import { objectDetection, visionBase } from '@kit.CoreVisionKit' ; |
2.简单配置页面的布局,并在Button组件添加点击事件,拉起图库,选择图片。
1 2 3 4 5 6 7 8 9 10 | Button( '选择图片' ) . type (ButtonType.Capsule) .fontColor(Color.White) .alignSelf(ItemAlign.Center) .width( '80%' ) .margin( 10 ) .onClick(() = > { / / 拉起图库,获取图片资源 this.selectImage(); }) |
3.通过图库获取图片资源,将图片转换为PixelMap。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | private async selectImage() { let uri = await this.openPhoto() if (uri = = = undefined) { hilog.error( 0x0000 , 'objectDetectSample' , "Failed to defined uri." ); } this.loadImage(uri) } private openPhoto(): Promise<string> { return new Promise<string>((resolve, reject) = > { let photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker(); photoPicker.select({ MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE, maxSelectNumber: 1 }).then(res = > { resolve(res.photoUris[ 0 ]) }).catch((err: BusinessError) = > { hilog.error( 0x0000 , 'objectDetectSample' , `Failed to get photo image uri. code:${err.code},message:${err.message}`); reject('') }) }) } private loadImage(name: string) { setTimeout(async () = > { let fileSource = await fileIo. open (name, fileIo.OpenMode.READ_ONLY); this.imageSource = image.createImageSource(fileSource.fd); this.chooseImage = await this.imageSource.createPixelMap(); }, 100 ) |
4.实例化Request对象,并传入待检测图片的PixelMap,调用多目标识别的实现多目标识别功能。
1 2 3 4 5 | / / 调用多目标检测接口 let request: visionBase.Request = { inputData: { pixelMap: this.chooseImage } }; let data: objectDetection.ObjectDetectionResponse = await (await objectDetection.ObjectDetector.create()).process(request); |
5.(可选)如果需要将结果展示在界面上,可以使用下列代码。
1 2 3 | let objectJson = JSON.stringify(data); hilog.info( 0x0000 , 'objectDetectSample' , `Succeeded in face detect:${objectJson}`); this.dataValues = objectJson; |
了解更多详情>>
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
赞赏
雪币:
留言: