HarmonyOS鸿蒙Next中直接识别物体的接口有吗
HarmonyOS鸿蒙Next中直接识别物体的接口有吗 【问题描述】:我想做一个卡路里记录的app,主要特色是可以拍照识别饭菜的种类然后自动计算卡路里。测试了手机自带的小艺是可以直接识别物体的,请问是否有提供接口给我们开发者使用呢?
开发者您好,可以参考多目标识别服务,多目标识别服务提供了从图像中识别多个目标的能力。通过拍照、录像等光学输入方式,把各种场景下的图像转化为数字图像信息,再利用AI底层能力对图像进行分析,从中定位并识别出多个感兴趣的目标对象,如人脸、动物、植物等,便于用户提取目标的类别、边框位置、置信度等信息。
目前本服务支持识别的目标类型包括:风景,动物,植物,建筑,人脸,表格,文本,人头,猫头,狗头,食物,汽车,人体,文档,卡证。
也可以参考示例中的demo:多目标识别-Core Vision Kit(基础视觉服务)-AI - 华为HarmonyOS开发者
更多关于HarmonyOS鸿蒙Next中直接识别物体的接口有吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

import { image } from '@kit.ImageKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo } from '@kit.CoreFileKit';
import { objectDetection, visionBase } from '@kit.CoreVisionKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
@Entry
@Component
struct Index {
private imageSource: image.ImageSource | undefined = undefined;
@State chooseImage: PixelMap | undefined = undefined
@State dataValues: string = ''
build() {
Column() {
Image(this.chooseImage)
.objectFit(ImageFit.Fill)
.height('60%')
Text(this.dataValues)
.copyOption(CopyOptions.LocalDevice)
.height('15%')
.margin(10)
.width('60%')
Button('选择图片')
.type(ButtonType.Capsule)
.fontColor(Color.White)
.alignSelf(ItemAlign.Center)
.width('80%')
.margin(10)
.onClick(() => {
// 拉起图库
this.selectImage()
})
Button('开始多目标识别')
.type(ButtonType.Capsule)
.fontColor(Color.White)
.alignSelf(ItemAlign.Center)
.width('80%')
.margin(10)
.onClick(async () => {
if(!this.chooseImage) {
hilog.error(0x0000, 'objectDetectSample', `Failed to choose image.`);
return;
}
let request: visionBase.Request = {
inputData: { pixelMap: this.chooseImage }
};
try {
let data: objectDetection.ObjectDetectionResponse =
await (await objectDetection.ObjectDetector.create()).process(request);
let objectJson = JSON.stringify(data);
hilog.info(0x0000, 'objectDetectSample', `Succeeded in object detection: ${objectJson}`);
this.dataValues = objectJson;
} catch (error) {
hilog.error(0x0000, 'objectDetectSample', `Failed to get result. Error: ${error}`);
}
})
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
private async selectImage() {
try {
let uri = await this.openPhoto();
if (uri === undefined) {
hilog.error(0x0000, 'objectDetectSample', "Failed to define uri.");
return;
}
this.loadImage(uri);
} catch (err) {
hilog.error(0x0000, 'objectDetectSample', `Failed to get photo image uri. code: ${err.code}, message: ${err.message}`);
}
}
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(err);
})
})
}
private loadImage(name: string) {
setTimeout(async () => {
try {
let fileSource = await fileIo.open(name, fileIo.OpenMode.READ_ONLY);
this.imageSource = image.createImageSource(fileSource.fd);
this.chooseImage = await this.imageSource.createPixelMap();
await fileIo.close(fileSource);
} catch (error) {
hilog.error(0x0000, 'objectDetectSample', `Failed to open file. Error: ${error}`);
}
}, 100)
}
}
参考地址
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/core-vision-object-detection
AI能力:objectDetection(多目标识别)
多目标识别服务提供了从图像中识别多个目标的能力。通过拍照、录像等光学输入方式,把各种场景下的图像转化为数字图像信息,再利用AI底层能力对图像进行分析,从中定位并识别出多个感兴趣的目标对象,如人脸、动物、植物等,便于用户提取目标的类别、边框位置、置信度等信息。
目前本服务支持识别的目标类型包括:风景,动物,植物,建筑,人脸,表格,文本,人头,猫头,狗头,食物,汽车,人体,文档,卡证。
示例:
import { objectDetection, visionBase } from '@kit.CoreVisionKit';
import { image } from '@kit.ImageKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo } from '@kit.CoreFileKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
let imageSource: image.ImageSource | undefined = undefined;
let chooseImage: image.PixelMap | undefined = undefined;
// 创建对象检测器
let detector: objectDetection.ObjectDetector | undefined = undefined;
async function createDetector() {
detector = await objectDetection.ObjectDetector.create();
hilog.info(0x0000, 'objectDetectionSample', 'Object detector created successfully');
}
@Entry
@Component
struct Page {
build() {
Column(){
Button('Start').onClick(() => {
// 将图片转换为PixelMap,可以通过图库获取
let photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker();
photoPicker.select({
MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
maxSelectNumber: 1
}).then((res: photoAccessHelper.PhotoSelectResult) => {
let uri = res.photoUris[0];
if (uri === undefined) {
hilog.info(0x0000, 'objectDetectionSample', 'uri is undefined');
return
}
setTimeout(async () => {
let file = await fileIo.open(uri, fileIo.OpenMode.READ_ONLY);
imageSource = image.createImageSource(file.fd);
chooseImage = await imageSource.createPixelMap();
hilog.info(0x0000, 'objectDetectionSample', 'chooseImage:', chooseImage);
if (!chooseImage) {
return
}
// 创建检测器
await createDetector();
if (!detector) {
hilog.error(0x0000, 'objectDetectionSample', 'Detector is not initialized');
return;
}
// 调用对象检测接口
let request: visionBase.Request = {
inputData: { pixelMap: chooseImage },
scene: visionBase.SceneMode.FOREGROUND
};
let response: objectDetection.ObjectDetectionResponse = await detector.process(request);
if (response.objects.length === 0) {
hilog.info(0x0000, 'objectDetectionSample', 'No objects detected in the image.');
} else {
let objectString = JSON.stringify(response.objects);
hilog.info(0x0000, 'objectDetectionSample', 'Detected objects: ' + objectString);
}
// 清理资源
if (chooseImage && imageSource) {
chooseImage.release();
imageSource.release();
}
if (file) {
try {
await fileIo.close(file);
} catch (err) {
hilog.error(0x0000, 'objectDetectionSample', `Failed to close fileSource. Code: ${err.code},message: ${err.message}`);
}
}
if (detector) {
await detector.destroy();
hilog.info(0x0000, 'objectDetectionSample', 'Object detector destroyed successfully');
}
}, 100);
}).catch((err: BusinessError) => {
hilog.error(0x0000, 'objectDetectionSample', `Failed to get photo image uri. code: ${err.code},message: ${err.message}`);
});
})
}
}
}
但是无法实现你所说的计算卡路里功能。
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17,
没有。小艺的是联网的,应该不会开放。 有识别物体类别的,但只有大类: https://developer.huawei.com/consumer/cn/doc/harmonyos-references/core-vision-object-detection-api
HarmonyOS Next物体识别能力
HarmonyOS Next提供物体识别能力,主要通过AI框架的计算机视觉套件实现,支持对多种常见物体进行识别和分类。
主要特性
- 设备端AI计算:基于设备端AI计算,无需依赖网络连接。
- API接口支持:开发者可调用相应的API接口获取识别结果。
使用方式
具体接口定义和调用方式需查阅HarmonyOS官方API参考文档中“图像识别”或“计算机视觉”相关章节。
目前HarmonyOS Next暂未提供直接的通用物体识别接口。小艺的识别能力属于系统级功能,未开放给第三方应用调用。
建议考虑以下替代方案:
- 集成第三方AI服务:可接入百度AI、阿里云、华为云等提供的图像识别API,这些平台通常有食物识别专项服务。
- 使用设备本地AI能力:通过HarmonyOS的AI框架调用设备NPU,但需要自行训练或转换食物识别模型。
- 结合多模态输入:可配合文字输入、手动选择等方式作为补充交互方案。
若未来HarmonyOS开放相关视觉能力接口,通常会通过ArkTS/ArkUI的API形式提供,建议关注官方文档的更新。

