Skip to content

Latest commit

 

History

History
279 lines (240 loc) · 15 KB

README_CHS.md

File metadata and controls

279 lines (240 loc) · 15 KB

RealSR-NCNN-Android

English

超分辨率是指将低质量压缩图片恢复成高分辨率图片的过程,用更常见的讲法就是放大图片并降噪。
随着移动互联网的快速发展,智能设备逐渐普及到生活的每个角落。随之而来的是大量的图像数据。有的图片本身分辨率就比较低,难以看清楚细节;有的在存储和传输的过程中被反复压缩和劣化,最终不再清晰。
为了获得更加高质量的视觉体验,或者出于更为基本的目的看清楚图片,图像恢复/超分辨率算法应运而生。而手机作为目前我们生活中最常使用的智能设备,显然有使用这一技术的迫切需求。

这个仓库正是为安卓设备构建的一个图像超分辨率的应用。具有如下特点:
✅ 内置超分算法和模型多。最初使用了RealSR-NCNNReal-ESRGAN的成果,后来又添加了SRMD-NCNNRealCUGAN-NCNN。同时也内置了waifu2x-ncnn(但是没有内置模型和预设命令,如有需求自行下载并添加)
✅ 兼顾传统插值算法。包括常见的nearest、bilinear、bicubic算法,以及imagemagick的二十多种filter。
✅ 内置缩小算法。除使用用户指定倍率和算法的缩小方式外,resize-ncnn设计了一种自动缩小的算法de-nearest。参见笔记
✅ 支持图形界面和命令行两种操作方式使用。
✅ 转换结果先预览,满意再导出,不浪费存储空间。
✅ 导出文件自动按照模型和时间命名,方便管理。
✅ 自定义优先选用的超分算法和模型。
✅ 自定义预设命令。
✅ 图片处理过程完全在本地运行,无需担心隐私泄漏、服务器排队、服务收费;处理耗时取于决选择的模型、图片大小以及设备的性能。

下载地址

酷安Github Release

Web UI

https://huggingface.co/spaces/tumuyan/RealSR 上方链接仓库集成了Windows和Linux平台下的ncnn版本超分程序,可以clone仓库,在python环境下打开一个web UI来使用(代替原版程序的命令行方式) 你也可以在线体验docker版本(由于使用双核CPU运算,速度相当慢)Hugging Face

仓库结构

  1. RealSR-NCNN-Android-GUI 可以编译出APK文件,这样用户可以在图形环境下操作。(不过他的本质就是在给命令行程序套壳,而不是通过JNI调用库文件)
  2. RealSR-NCNN-Android-CLI 可以编译出RealSR-NCNN命令行程序,可以在安卓设备的Termux等虚拟终端中使用。这个程序可以使用RealSR和Real-ESRGAN的模型。
  3. RealCUGAN-NCNN-Android-CLI 可以编译出SRMD-NCNN命令行程序,可以在安卓设备的Termux等虚拟终端中使用。
  4. SRMD-NCNN-Android-CLI 可以编译出SRMD-NCNN命令行程序,可以在安卓设备的Termux等虚拟终端中使用。
  5. Waifu2x-NCNN-Android-CLI 可以编译出Waifu2x-NCNN命令行程序,可以在安卓设备的Termux等虚拟终端中使用(考虑到应用的体积,程序本体已经内置到App内置了waifu2x可执行文件,但是没有内置对应模型,UI上也没有预设命令。可以参考教程)。
  6. Resize-NCNN-Android-CLI 可以编译出resize-ncnn命令行程序,可以在安卓设备的Termux等虚拟终端中使用,包含了nearest/最邻近bilinear/两次线性bicubic/两次立方三种经典放大(interpolation/插值)算法,以及Lanczos插值算法相似的avir/lancir。特别的,nearest和bilinear可以通过-n参数,不使用ncnn进行运算,得到点对点放大的结果;当不使用-n。参数时,-s参数可以使用小数
  7. Resize-CLI 可以编译出resize命令行程序,包含nearest/最邻近bilinear/两次线性两种算法,不需要ncnn,编译体积较大。此工程除Android使用外,也可使用VS2019编译,在PC端快速验证。

如何使用 RealSR-NCNN-Android-GUI

支持两种选择文件的方式:

  1. 从其他应用(比如图库)分享一个或多个图片到本应用
  2. 在本应用中,点击选图选择图片

支持两种操作方式:

  1. 点击放大(视图片大小和设备性能需要等待不同时间——毕竟原项目是使用电脑显卡运行的)- 查看放大效果是否满意,如果满意点击导出保存到相册。也可以在运行前切换使用的模型。切换模型后无需重新选择图片。运行过程中点击右上角进度可以终止运行;运行过程中切换模型并点击运行,或者直接输入命令并回车,可以终止上次任务并开始执行新的任务。
  2. 直接在输入框内输入命令完成调用(可以输入help查看更多信息)

应用依赖于vulkan API,所以对设备有如下要求(几年前游戏《光遇》上架时,很多人已经对vulkan有所了解了吧?):

  1. 使用了比较新的SOC。经过实际测试,骁龙853(GPU Adreno510)可以处理较小的图片
  2. 系统支持vulkan。(Google在Android7.0中增加了vulkan的集成,但是您的设备厂商不一定提供了这项支持)

为 RealSR-NCNN-Android-GUI 增加更多模型

RealSR-NCNN-Android-GUI 在 ver 1.7.6 以上的版本可以自动加载自定义模型。 你可以从 https://huggingface.co/tumuyan/realsr 下载更多模型:

  1. 在文件管理器里新建一个目录
  2. 在App的设置中,自定义模型路径的选项里填入刚才新建目录的路径,点击保存
  3. 下载模型并复制到刚才新建的目录里
  4. 返回App,可以看到下拉菜单增加了新的模型

你自己也可以把pth格式的模型转换为本应用可用的ncnn模型。

  1. https://upscale.wiki/wiki/Model_Database 下载模型并解压
  2. 下载 cupscale 并解压
  3. 打开 CupscaleData\bin\pth2ncnn, 用 pth2ncnn.exe 转换t pth 文件为 ncnn 文件
  4. 重命名文件,举例:
models-Real-ESRGAN-AnimeSharp  // 目录需要用 models-Real- 或 models-ESRGAN- 开头
├─x4.bin                       // 模型名称为 x[n], n 是放大倍率
├─x4.param

关于 Real-ESRGAN

Real ESRGAN是一个实用的图像修复算法,可以用来对低分辨率图片完成四倍放大和修复,化腐朽为神奇。

[论文]   [项目地址]   [YouTube 视频]   [B站讲解]   [Poster]   [PPT slides]
Xintao Wang, Liangbin Xie, Chao Dong, Ying Shan
Tencent ARC Lab; Shenzhen Institutes of Advanced Technology, Chinese Academy of Sciences

img 现在的 Real-ESRGAN 还是有几率失败的,因为现实中的图片的降质过程比较复杂。

关于 RealSR

[论文] [项目地址] [NTIRE 2020 Challenge on Real-World Image Super-Resolution: Methods and Results]

关于 SRMD

[论文] [项目地址]
demo demo

关于 Real-CUGAN

[项目地址] Real-CUGAN是一个使用百万级动漫数据进行训练的,结构与Waifu2x兼容的通用动漫图像超分辨率模型。

如何编译 RealSR-NCNN-Android-CLI

step1

https://github.com/Tencent/ncnn/releases
下载 ncnn-yyyymmdd-android-vulkan-shared.zip 或者你自己编译ncnn为so文件
https://github.com/webmproject/libwebp
下载libwebp的源码

step2

解压 ncnn-yyyymmdd-android-vulkan-shared.zip../3rdparty/ncnn-android-vulkan-shared
解压libwebp源码到../3rdparty/libwebp

RealSR-NCNN-Android\RealSR-NCNN-Android-GUI\app\src\main\assets\
├─3rdparty
│   ├─libwebp
│   └─ncnn-android-vulkan-shared
│       └─arm64-v8a
├─RealCUGAN-NCNN-Android-CLI  
├─SRMD-NCNN-Android-CLI
├─Waifu2x-NCNN-Android-CLI 
├─Resize-NCNN-Android-CLI  
└─RealSR-NCNN-Android-CLI

step3

用 Android Studio 打开工程, rebuild 然后你就可以在 RealSR-NCNN-Android-CLI\app\build\intermediates\cmake\release\obj\arm64-v8a 找到编译好的二进制文件

如何使用 RealSR-NCNN-Android-CLI

下载模型

你可以在终端 (termux) 中使用如下命令自动下载并解压程序和模型: curl https://huggingface.co/spaces/tumuyan/RealSR/raw/main/install_realsr_android.sh | bash

也可以直接下载压缩包,自行解压得到这些文件: https://huggingface.co/spaces/tumuyan/RealSR/resolve/main/assets.zip

命令范例

确认程序有执行权限,然后输入命令:

./realsr-ncnn -i input.jpg -o output.jpg

完整用法

用法: realsr-ncnn -i 输入的图片路径 -o 输出的图片路径 [其他可选参数]...

  -h                   显示帮助
  -v                   显示更多输出内容
  -i input-path        输入的图片路径(jpg/png/webp路径或者目录路径)
  -o output-path       输出的图片路径(jpg/png/webp路径或者目录路径)
  -s scale             缩放系数(默认4,即放大4倍)
  -t tile-size         tile size (>=32/0=auto, default=0) can be 0,0,0 for multi-gpu
  -m model-path        模型路径 (默认模型 models-Real-ESRGAN-anime)
  -g gpu-id            gpu,-1使用CPU,默认0 多GPU可选 0,1,2
  -j load:proc:save    解码/处理/保存的线程数 (默认1:2:2) 多GPU可以设 1:2,2,2:2
  -x                   开启tta模式
  -f format            输出格式(jpg/png/webp, 默认ext/png)

如何编译 RealSR-NCNN-Android-GUI

下载模型和CLI程序,放置到如下路径, 然后使用 Android Studio 进行编译。

RealSR-NCNN-Android-GUI\app\src\main\assets\
└─realsr
    │  colors.xml
    │  delegates.xml
    │  libc++_shared.so
    │  libncnn.so
    │  libomp.so
    │  magick
    │  realcugan-ncnn
    │  realsr-ncnn
    │  resize-ncnn
    │  srmd-ncnn
    │  waifu2x-ncnn
    │  
    ├─models-nose
    │      up2x-no-denoise.bin
    │      up2x-no-denoise.param
    │      
    ├─models-pro
    │      up2x-conservative.bin
    │      up2x-conservative.param
    │      up2x-denoise3x.bin
    │      up2x-denoise3x.param
    │      up2x-no-denoise.bin
    │      up2x-no-denoise.param
    │      up3x-conservative.bin
    │      up3x-conservative.param
    │      up3x-denoise3x.bin
    │      up3x-denoise3x.param
    │      up3x-no-denoise.bin
    │      up3x-no-denoise.param
    │      
    ├─models-Real-ESRGAN
    │      x4.bin
    │      x4.param
    │      
    ├─models-Real-ESRGAN-anime
    │      x4.bin
    │      x4.param
    │      
    ├─models-Real-ESRGANv2-anime
    │      x2.bin
    │      x2.param
    │      x4.bin
    │      x4.param
    │      
    ├─models-Real-ESRGANv3-anime
    │      x2.bin
    │      x2.param
    │      x3.bin
    │      x3.param
    │      x4.bin
    │      x4.param
    │      
    ├─models-se
    │      up2x-conservative.bin
    │      up2x-conservative.param
    │      up2x-denoise1x.bin
    │      up2x-denoise1x.param
    │      up2x-denoise2x.bin
    │      up2x-denoise2x.param
    │      up2x-denoise3x.bin
    │      up2x-denoise3x.param
    │      up2x-no-denoise.bin
    │      up2x-no-denoise.param
    │      up3x-conservative.bin
    │      up3x-conservative.param
    │      up3x-denoise3x.bin
    │      up3x-denoise3x.param
    │      up3x-no-denoise.bin
    │      up3x-no-denoise.param
    │      up4x-conservative.bin
    │      up4x-conservative.param
    │      up4x-denoise3x.bin
    │      up4x-denoise3x.param
    │      up4x-no-denoise.bin
    │      up4x-no-denoise.param
    │      
    └─models-srmd
            srmdnf_x2.bin
            srmdnf_x2.param
            srmdnf_x3.bin
            srmdnf_x3.param
            srmdnf_x4.bin
            srmdnf_x4.param
            srmd_x2.bin
            srmd_x2.param
            srmd_x3.bin
            srmd_x3.param
            srmd_x4.bin
            srmd_x4.param

本仓库中的其他工程

其他工程的编译和使用与RealSR-NCNN-Android-CLI完全相同,故不重复说明

感谢

原始超分辨率项目

ncnn项目以及模型

大部分C代码都来自nihui。由于Android直接编译比较困难,必须对项目目录做调整,因此破坏了原有Git。

使用的其他开源项目