首页 > 其他分享 >主体分割技术,提升图像信息提取能力

主体分割技术,提升图像信息提取能力

时间:2025-01-10 15:12:24浏览次数:1  
标签:主体 分割 subjectSegmentation 信息提取 let 0x0000 图像 hilog outputString

在智能设备普及和AI技术进步的推动下,用户对线上互动的质量、个性化以及沉浸式体验的追求日益增强。例如,对于热衷于图片编辑或视频制作的用户来说,他们需要一种快速而简便的方法来将特定主体从背景中分离出来。
HarmonyOS SDK 基础视觉服务(Core Vision Kit)提供主体分割能力,可以检测出图片中区别于背景的前景物体或区域(即"显著主体"),并将其从背景中分离出来,适用于需要识别和提取图像主要信息的场景,广泛使用于前景目标检测和前景主体分离的场景。

image

适用场景

主体贴纸:从图片中提取显著性的主体,去掉背景。

背景替换:替换并提取出主体对象的背景。

显著性检测:快速定位图片中显著性区域。

辅助图片编辑:例如单独对主体进行美化处理。

开发步骤

1.引用相关类添加至工程。

import { subjectSegmentation } from '@kit.CoreVisionKit';

2.准备预处理的图片资源,将图片转换为PixelMap,并添加初始化和释放方法。

async aboutToAppear(): Promise<void> {
  const initResult = await subjectSegmentation.init();
  hilog.info(0x0000, 'subjectSegmentationSample', `Subject segmentation initialization result:${initResult}`);
}

async aboutToDisappear(): Promise<void> {
  await subjectSegmentation.release();
  hilog.info(0x0000, 'subjectSegmentationSample', 'Subject segmentation released successfully');
}

private async selectImage() {
  let uri = await this.openPhoto()
  if (uri === undefined) {
    hilog.error(0x0000, TAG, "uri is undefined");
  }
  this.loadImage(uri);
}

private openPhoto(): Promise<Array<string>> {
  return new Promise<Array<string>>((resolve, reject) => {
    let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
    PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
    PhotoSelectOptions.maxSelectNumber = 1;
    let photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker();
    hilog.info(0x0000, TAG, 'PhotoViewPicker.select successfully, PhotoSelectResult uri: ');
    photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult) => {
      hilog.info(0x0000, TAG, `PhotoViewPicker.select successfully, PhotoSelectResult uri: ${PhotoSelectResult.photoUris}`);
      resolve(PhotoSelectResult.photoUris)
    }).catch((err: BusinessError) => {
      hilog.error(0x0000, TAG, `PhotoViewPicker.select failed with errCode: ${err.code}, errMessage: ${err.message}`);
      reject();
    });
  })
}

private loadImage(names: string[]) {
  setTimeout(async () => {
    let imageSource: image.ImageSource | undefined = undefined
    let fileSource = await fileIo.open(names[0], fileIo.OpenMode.READ_ONLY)
    imageSource = image.createImageSource(fileSource.fd)
    this.chooseImage = await imageSource.createPixelMap()
    hilog.info(0x0000, TAG, `this.chooseImage===${this.chooseImage}`);
  }, 100
  )
}

3.实例化待分割的入参项VisionInfo,并传入待检测图片的PixelMap。

let visionInfo: subjectSegmentation.VisionInfo = {
  pixelMap: this.chooseImage,
};

4.配置通用文本识别的配置项SegmentationConfig,包括最大分割主体个数、是否输出每个主体的分割信息,以及是否输出分割后的前景图。

let config: subjectSegmentation.SegmentationConfig = {
  maxCount: parseInt(this.maxNum),
  enableSubjectDetails: true,
  enableSubjectForegroundImage: true,
};

5.调用imageSegmentation的ai.vision.doSegmentation接口,实现主体分割。

let data: subjectSegmentation.SegmentationResult = await subjectSegmentation.doSegmentation(visionInfo, config);
let outputString = `Subject count: ${data.subjectCount}\n`;
outputString += `Max subject count: ${config.maxCount}\n`;
outputString += `Enable subject details: ${config.enableSubjectDetails ? 'Yes' : 'No'}\n\n`;
let segBox : subjectSegmentation.Rectangle = data.fullSubject.subjectRectangle;
let segBoxString = `Full subject box:\nLeft: ${segBox.left}, Top: ${segBox.top}, Width: ${segBox.width}, Height: ${segBox.height}\n\n`;
outputString += segBoxString;

if (config.enableSubjectDetails) {
  outputString += 'Individual subject boxes:\n';
  if (data.subjectDetails) {
    for (let i = 0; i < data.subjectDetails.length; i++) {
      let detailSegBox: subjectSegmentation.Rectangle = data.subjectDetails[i].subjectRectangle;
      outputString += `Subject ${i + 1}:\nLeft: ${detailSegBox.left}, Top: ${detailSegBox.top}, Width: ${detailSegBox.width}, Height: ${detailSegBox.height}\n\n`;
    }
  }
}

了解更多详情>>

访问基础视觉服务联盟官网

获取主体分割开发指导文档

标签:主体,分割,subjectSegmentation,信息提取,let,0x0000,图像,hilog,outputString
From: https://www.cnblogs.com/HarmonyOSSDK/p/18664022

相关文章

  • ISP各模块功能介绍和图像成像过程
    --------声明,本文为转载整理-------ISP各个模块功能介绍图像成像过程:景物通过Lens生成的光学图像投射到sensor表面上,经过光电转换为模拟电信号,消噪声后经过A/D转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理。所以,从sensor端过来的图像......
  • 医学图像分析工具06:MNE-Python || EEG/MEG数据分析
    MNE-Python是一款专为处理和分析脑电图(EEG)、脑磁图(MEG)以及功能性磁共振成像(fMRI)数据而设计的开源Python库。得益于Python的灵活性和可扩展性,MNE-Python不仅可以满足基础分析的需求,还能通过其强大的社区生态实现高度定制化。在本教程中,我们将深入探讨MNE-Python的功......
  • 图标点选验证码识别及分割
    图标点选验证码是一种防止自动化攻击的手段,要求用户点击指定的图标进行验证。本文介绍如何使用Swift结合ONNX模型和Siamese神经网络来实现图标点选验证码的识别和分割。一、技术背景图标点选验证码的破解分为两部分:图标分割和相似度对比。图标分割用于检测并裁剪出验证码图片中......
  • Python代码实现了一个图像匹配系统的图形用户界面(GUI)应用程序
    importtkinterastkfromtkinterimportfiledialog,messagebox,ttkfromPILimportImage,ImageTkimportosimportcv2importmatplotlib.pyplotaspltimportnumpyasnpfromdatetimeimportdatetimeimportsysclassImageMatcherApp:def__init_......
  • python 代码主要实现了两个功能:分析参数`η`和`r`不同取值对生产商在产品捆绑和解绑两
    #!/usr/bin/envpython#coding:utf-8#(1)η不同取值下最优利润的大小关系比较#In[22]:importmatplotlib.pyplotaspltimportsympyasspimportmathimportnumpyasnpfrommatplotlibimportpyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dimpo......
  • 基于麻雀算法的Otsu图像多阈值分割(python)
    基于麻雀算法的Otsu图像多阈值分割(python)文章目录基于麻雀算法的Otsu图像多阈值分割(python)1.Otsu阈值分割法原理2.基于麻雀优化的多阈值分割3.算法结果:4.参考文献:5.Python代码:摘要:Otsu方法是应用最广泛的图像分割法之一,该方法也叫最大类间方法阈值分割法,选择分割阈......
  • leetcode131 分割回文串
    leetcode131思路:回溯比如说aab,对于每个元素currentNum,有两种选择:1.如果currentNum<len-1,可以将当前元素加入到currentStr中,然后dfs(start,currentNum+1)。而currentNum==len-1时不能dfs(start,currentNum+1),这样下一轮循环就执行以下代码了if(currentNum==len){ ans.add......
  • [rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(03):图像的导入、显示、调整(暨image
    前言本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。环境配置系统:window10平台:visualstudiocode语言:rust......
  • 分割等和子集(动态规划)
    给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例1:输入:nums=[1,5,11,5]输出:true解释:数组可以分割成[1,5,5]和[11]。示例2:输入:nums=[1,2,3,5]输出:false解释:数组不能分割成两个元......
  • 【数字图像处理】一篇搞定数字图像处理(带山东大学往年题)
    ......