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

这篇具有很好参考价值的文章主要介绍了HarmonyOS学习路之开发篇—AI功能开发(图像超分辨率)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

基本概念

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

运作机制

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

约束与限制

  • 支持处理的图片格式包括JPEG、JPG、PNG,最终输出的图片仅支持JPEG格式。
  • 目前支持1x和3x超分。两种超分对图片规格的支持情况如下表所示。
    表1 1x和3x超分支持的图片规格

    超分类型

    效果

    支持图片较长边最大像素数

    支持图片较短边最大像素数

    1x

    不改变图片的尺寸,但可以智能识别、抑制图片本身的压缩噪声,令图片更加干净清晰。

    1920

    1080

    3x

    图片的边长放大3倍。

    1024

    768

  • 目前支持灰度图和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的常用设置:

    接口

    参数名

    类型

    参数说明

    setScale()

    scale

    float

    设置超分倍数。目前支持SisrConfiguration.SISR_SCALE_1X和SisrConfiguration.SISR_SCALE_3X。

    setScale()

    void

    void

    设置超分倍数为默认值SisrConfiguration.SISR_SCALE_1X。

    setQuality()

    quality

    int

    设置超分质量。目前支持的参数类别为SisrConfiguration.SISR_QUALITY_LOW、

    SisrConfiguration.SISR_QUALITY_MEDIUM和

    SisrConfiguration.SISR_QUALITY_HIGH。

    但该入参目前并未实际使用,无论如何设置都会执行当前能力下的最高质量超分。

    setQuality()

    void

    void

    设置返回图片的超分质量为SisrConfiguration.SISR_QUALITY_HIGH。

  • 调用IImageSuperResolution的doSuperResolution()方法,执行图像超分。
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()的参数接收。

结果码定义如下表:

结果码

说明

0

成功

-1

未知错误

-2

不支持的功能或接口

-3

内存分配失败或创建对象失败

-4

所需库加载失败

-10

引擎开关已经关闭

101

失败

102

超时

200

输入参数不合法(图片尺寸错误)

201

输入参数不合法(为空)

210

输入参数合法

500

服务绑定异常

521

服务绑定异常断开

522

服务已连接

600

模型文件异常

601

模型文件不存在

602

模型加载失败

700

异步调用请求发送成功

1001

神经网络处理单元错误

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

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

说明

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

调用VisionManager.destroy()方法,断开与能力引擎的连接。文章来源地址https://www.toymoban.com/news/detail-510275.html

VisionManager.destroy();

到了这里,关于HarmonyOS学习路之开发篇—AI功能开发(图像超分辨率)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS学习路之开发篇—AI功能开发(关键字提取)

    在日常生活中充满了各种各样的信息,这些信息千变万化。文本语言作为信息传递的一种载体,同样面临有用信息和无用信息糅杂在一起的问题。提取帮助用户在众多文本信息中快速提取出关键信息和核心内容,节省时间提高效率。 提取API提供了一个提取

    2024年02月11日
    浏览(53)
  • HarmonyOS学习路之开发篇—AI功能开发(二维码生成及文字识别)

    为应用提供丰富的AI(Artificial Intelligence)能力,支持开箱即用。开发者可以灵活、便捷地选择AI能力,让应用变得更加智能。 已开放的AI能力如下表所示: 能力 简介 二维码生成 根据开发者给定的字符串信息和二维码图片尺寸,返回相应的二维码图片字节流。调用方可以通过

    2024年02月11日
    浏览(70)
  • HarmonyOS学习路之开发篇—多媒体开发(图像开发 二)

    图像编码就是将PixelMap图像编码成不同存档格式图片,用于后续其他处理,比如保存、传输等。当前仅支持JPEG格式。 ImagePacker主要用于图像编码。 接口名 描述 create() 创建图像打包器实例。 initializePacking(byte[] data, PackingOptions opts) 初始化打包任务,将字节数组设置为打包后输

    2024年02月11日
    浏览(58)
  • HarmonyOS学习路之开发篇—多媒体开发(图像开发 一)

    HarmonyOS图像模块支持图像业务的开发,常见功能如图像解码、图像编码、基本的位图操作、图像编辑等。当然,也支持通过接口组合来实现更复杂的图像处理逻辑。 图像解码 图像解码就是不同的存档格式图片(如JPEG、PNG等)解码为无压缩的位图格式,以方便在应用或者系统

    2024年02月11日
    浏览(50)
  • 遥感图像应用:在低分辨率图像上实现洪水损害检测(迁移学习)

    对于卷积神经网络(CNN)等模型,通常包括一些卷积层和池化层,这些层的权重用于提取图像的特征。当这些层的参数被冻结时,这些权重将保持不变,不会在训练过程中进行更新。这意味着模型会继续使用预训练模型的 特征提取能力 。 如果模型还包含其他的预训练层,例

    2024年02月09日
    浏览(44)
  • AI数字人:让图片变高清的图像超分辨率模型 Real-ESRGAN

    Real-ESRGAN全名为 Enhanced Super-Resolution GAN: 增强的超分辨率的对抗生成网络,是由腾讯ARC实验室发布的一个盲图像超分辨率模型,它的目标是开发出实用的图像/视频修复算法,Real-ESRGAN 是在 ESRGAN 的基础上使用纯合成数据来进行训练的,基本上就是通过模拟高分辨率图像变低分

    2024年02月06日
    浏览(55)
  • HarmonyOS学习路之开发篇—流转

    随着全场景多设备生活方式的不断深入,用户拥有的设备越来越多,每个设备都能在适合的场景下提供良好的体验,例如:手表可以提供及时的信息查看能力,电视可以带来沉浸的观影体验。但是,每个设备也有使用场景的局限,例如:在电视上输入文本相对手机来说是非常

    2024年02月15日
    浏览(46)
  • 『CV学习笔记』图像超分辨率等图像处理任务中的评价指标PSNR(峰值信噪比)

    图像超分辨率等图像处理任务中的评价指标PSNR(峰值信噪比) 峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)是图像超分辨率等图像处理任务中常用的一个指标,用来评估图像质量。PSNR的值越高,表示失真越小,图像质量越好。 PSNR是通过对比原图像和处理后图像的每个像素的差异来

    2024年02月06日
    浏览(50)
  • HarmonyOS学习路之开发篇—设备管理(位置开发)

    移动终端设备已经深入人们日常生活的方方面面,如查看所在城市的天气、新闻轶事、出行打车、旅行导航、运动记录。这些习以为常的活动,都离不开定位用户终端设备的位置。 当用户处于这些丰富的使用场景中时,系统的位置能力可以提供实时准确的位置数据。对于开发

    2024年02月16日
    浏览(47)
  • 计算机毕设 基于深度学习的图像超分辨率重建 - opencv python cnn

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包