HarmonyOS学习路之开发篇—AI功能开发(图像超分辨率)

简介: 针对图片分辨率不足的问题,传统的解决方案是使用双线性或双三次插值的方法来放大图像;而针对图片压缩噪声的问题,传统的解决方案则是通过各种算法实现平滑、去噪。

针对图片分辨率不足的问题,传统的解决方案是使用双线性或双三次插值的方法来放大图像;而针对图片压缩噪声的问题,传统的解决方案则是通过各种算法实现平滑、去噪。


本SDK使用智能的方法,基于深度神经网络,依托硬件的神经网络加速器,提供适用于移动终端的1x和3x超分能力;1x超分可以去除图片的压缩噪声,3x超分在有效抑制压缩噪声的同时,提供3倍的边长放大能力。


基本概念

“超分”,即单张图片空间域超分辨率(SISR:Single Image Super-Resolution),指给定单张图片,使用智能方法将其放大,令其分辨率更高,得到比传统放大更加清晰的细节纹理;或者在分辨率不变的情况下,去除压缩噪声,获得更加锐利、干净的图片。


运作机制

图像超分引擎内置于手机中,应用程序可以通过本SDK访问超分能力,降低图片超分应用的开发门槛,减小应用程序大小。


约束与限制

支持处理的图片格式包括JPEG、JPG、PNG,最终输出的图片仅支持JPEG格式。

目前支持1x和3x超分。两种超分对图片规格的支持情况如下表所示。

表1 1x和3x超分支持的图片规格

image.png

目前支持灰度图和RGB图像。在Java中为PixelMap的ALPHA_8和ARGB_8888两种PixelFormat格式。其中,如果ARGB_8888格式的输入图片的Alpha通道没有做超分或放大处理,输出图片的Alpha通道将被置为255。

正如其他智能算法存在着准确率的限制,本SDK并不能解决所有图片的放大和噪声抑制问题。对于某些成像质量特别差或者存在着除压缩噪声外其他种类噪声的图片,本SDK并不一定总能得到令人满意的结果。

图像超分辨率开发

场景介绍

图像超分在实际应用中有广泛的前景,比如提升网络图片的画质,在阅读新闻时获得更加清晰的大图等等。


图像超分可能的应用场景包括但不限于:


抑制压缩噪声:1x的超分可以去除高压缩率图片的压缩噪声。

节省存储和流量:可加大图片压缩率,有助于存储及传送高压缩率的图片。

高质量放大:3x超分将图片放大3倍,还能有效抑制压缩噪声。

开放能力介绍

图像超分提供了setVisionConfiguration()和doSuperResolution()两个函数接口。


setVisionConfiguration是IImageSuperResolution接口的成员,通过传入的SisrConfiguration,选择具体的超分参数。

void setVisionConfiguration(SisrConfiguration config);

下表列出了SisrConfiguration的常用设置:



image.png

image.png


调用IImageSuperResolution的doSuperResolution()方法,执行图像超分。

int doSuperResolution(VisionImage image, ImageResult result,

int doSuperResolution(VisionImage image, ImageResult result, VisionCallback<ImageResult> visionCallback);

其中:


image为待超分的输入图片。


如果visionCallback为null,执行同步调用,结果码由方法返回,超分结果由result返回。


如果visionCallback为有效的回调函数,则该函数为异步调用,函数返回时result中的结果无效,实际超分结果由回调函数返回。


同步模式调用成功时,该函数返回结果码0;异步模式调用请求发送成功时,该函数返回结果码700。


开发步骤

在使用图像超分SDK时,先将相关的类添加至工程。

import ohos.ai.cv.common.ConnectionCallback;
import ohos.ai.cv.common.VisionCallback;
import ohos.ai.cv.common.VisionImage;
import ohos.ai.cv.common.VisionManager;
import ohos.ai.cv.common.ImageResult;
import ohos.ai.cv.sr.IImageSuperResolution;
import ohos.ai.cv.sr.SisrConfiguration;
import ohos.app.Context;
import ohos.media.image.PixelMap;

定义ConnectionCallback回调,实现连接能力引擎成功与否后的操作。

ConnectionCallback connectionCallback = new ConnectionCallback() {
    @Override
    public void onServiceConnect() {
        // 定义连接能力引擎成功后的操作。
    }
    @Override
    public void onServiceDisconnect() {
        // 定义连接能力引擎失败后的操作。
    }
};

调用VisionManager.init()方法,将此工程的context和和已经定义的connectionCallback回调作为入参,建立与能力引擎的连接,context应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。

int result = VisionManager.init(context, connectionCallback);

在收到onServiceConnect回调连接服务成功后,实例化IImageSuperResolution接口,将此工程的context作为入参,context应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。


IImageSuperResolution imageSuperResolution = VisionManager.getSisr(context);

实例化VisionImage对象image,并传入待超分图片pixelMap。


VisionImage image = VisionImage.fromPixelMap(pixelMap);

实例化ImageResult对象imageResult,该对象用于在同步模式下存放doSuperResolution()方法传出的超分后图片结果。

ImageResult imageResult = new ImageResult();

可选)定义VisionCallback<ImageResult>回调。

VisionCallback<ImageResult> callback= new VisionCallback<ImageResult>() {
    @Override
    public void onResult(ImageResult imageResult) {
        // 对正确获得图片超分结果进行处理。
    }
    @Override
    public void onError(int i) {
        // 处理错误返回码。
    }
    @Override
    public void onProcessing(float v) {
        // 返回处理进度。
    }
};

说明


在异步模式下,该类的onResult()方法用于获得超分的结果imageResult(内含超分后图片结果);onError()方法用于处理错误返回码;onProcessing()方法用于返回处理进度,目前没有实现此接口的功能。

同步与异步模式区别在于doSuperResolution()的最后一个参数visionCallback是否为空。若非空则为异步模式,此时会忽略自定义的ImageResult输入result,接口调用结果一律从回调类visionCallback获得。

通过SisrConfiguration配置超分参数,可选择超分倍数、质量、调用模式(推荐使用MODE_IN同进程模式)等。跨进程模式(MODE_OUT)下调用方与能力引擎处于不同进程;同进程模式(MODE_IN)下,能力引擎在调用方进程中实例化,调用方通过反射的方式调用引擎里的图像超分能力。以下以同进程调用,3x最高质量超分为例:


SisrConfiguration.Builder builder = new SisrConfiguration.Builder();
builder.setProcessMode(VisionConfiguration.MODE_IN);
SisrConfiguration config = builder.build();
config.setScale(SisrConfiguration.SISR_SCALE_3X);
config.setQuality();
imageSuperResolution.setVisionConfiguration(config);

(可选)调用IImageSuperResolution的prepare方法。

result = imageSuperResolution.prepare();

说明


如果返回的result不为0,说明当前超分能力准备失败,需要处理错误,不再执行之后的动作。在doSuperResolution()方法中会首先调用prepare()启动引擎,如果引擎已经启动则不会再次启动。


调用IImageSuperResolution的doSuperResolution方法。


result = imageSuperResolution.doSuperResolution(image, imageResult, null); // 同步

或者:


result = imageSuperResolution.doSuperResolution(image, null, callback); // 异步

说明


同步模式调用完成时,该函数立即返回结果码。

异步模式调用请求发送成功时,该函数返回结果码700。如果返回其他的值,说明异步调用请求不成功,需要先处理错误,回调函数不会被调用。

如果异步模式调用请求发送成功,则超分完成后,相应的回调函数会被自动调用:

如果onResult()回调被调用,说明超分成功,相当于同步模式结果码为“0”的情况。

如果onError()方法被调用,说明超分发生了错误,具体的调用结果码将由onError()的参数接收。

结果码定义如下表:


image.png

image.pngimage.png


调用IImageSuperResolution的release()方法,释放模型资源;调用pixelMap的release()方法,释放图片内存。


result = imageSuperResolution.release();
if (pixelMap != null) {
    pixelMap.release();
    pixelMap = null;
}

说明


不再使用图像超分能力时,调用release()方法释放资源。


调用VisionManager.destroy()方法,断开与能力引擎的连接。


VisionManager.destroy();


相关文章
|
7月前
|
人工智能 安全 API
20 万奖金池就位!Higress AI 网关开发挑战赛参赛指南
本次赛事共设三大赛题方向,参赛者可以任选一个方向参赛。本文是对每个赛题方向的参赛指南。
632 66
|
7月前
|
人工智能 运维 安全
加速智能体开发:从 Serverless 运行时到 Serverless AI 运行时
在云计算与人工智能深度融合的背景下,Serverless 技术作为云原生架构的集大成者,正加速向 AI 原生架构演进。阿里云函数计算(FC)率先提出并实践“Serverless AI 运行时”概念,通过技术创新与生态联动,为智能体(Agent)开发提供高效、安全、低成本的基础设施支持。本文从技术演进路径、核心能力及未来展望三方面解析 Serverless AI 的突破性价值。
|
7月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
7733 108
|
人工智能 自然语言处理 前端开发
产品经理也能“开发”需求?淘宝信息流从需求到上线的AI端到端实践
淘宝推荐信息流业务,常年被“需求多、技术栈杂、协作慢”困扰,需求上线周期动辄一周。WaterFlow——一套 AI 驱动的端到端开发新实践,让部分需求两天内上线,甚至产品经理也能“自产自销”需求。短短数月,已落地 30+ 需求、自动生成 5.4 万行代码,大幅提升研发效率。接下来,我们将揭秘它是如何落地并改变协作模式的。
1175 37
产品经理也能“开发”需求?淘宝信息流从需求到上线的AI端到端实践
|
7月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
1976 74
|
8月前
|
人工智能 安全 中间件
阿里云 AI 中间件重磅发布,打通 AI 应用落地“最后一公里”
9 月 26 日,2025 云栖大会 AI 中间件:AI 时代的中间件技术演进与创新实践论坛上,阿里云智能集团资深技术专家林清山发表主题演讲《未来已来:下一代 AI 中间件重磅发布,解锁 AI 应用架构新范式》,重磅发布阿里云 AI 中间件,提供面向分布式多 Agent 架构的基座,包括:AgentScope-Java(兼容 Spring AI Alibaba 生态),AI MQ(基于Apache RocketMQ 的 AI 能力升级),AI 网关 Higress,AI 注册与配置中心 Nacos,以及覆盖模型与算力的 AI 可观测体系。
1579 85
|
7月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
785 30
|
7月前
|
设计模式 人工智能 自然语言处理
3个月圈粉百万,这个AI应用在海外火了
不知道大家还记不记得,我之前推荐过一个叫 Agnes 的 AI 应用,也是当时在 WAIC 了解到的。
784 2
|
7月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
7月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
493 3