Skip to content

Commit 6152cfa

Browse files
committed
update mnnsr
1 parent fd41815 commit 6152cfa

File tree

8 files changed

+168
-93
lines changed

8 files changed

+168
-93
lines changed

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,8 @@
1212
/RealSR-NCNN-Android-CLI/MNN-SR/src/main/jni/.vs/jni
1313
/RealSR-NCNN-Android-CLI/MNN-SR/src/main/jni/.vs
1414
/RealSR-NCNN-Android-CLI/MNN-SR/src/main/jni/out
15+
RealSR-NCNN-Android-GUI/.idea/CopilotChatHistory.xml
16+
RealSR-NCNN-Android-GUI/.idea/easycode.ignore
17+
RealSR-NCNN-Android-GUI/.idea/misc.xml
18+
RealSR-NCNN-Android-GUI/.idea/easycode/codebase-v2.xml
19+
/RealSR-NCNN-Android-GUI/.idea/easycode

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ RealSR-NCNN-Android-GUI could load extra models from sdcard automatily in ver 1.
3939
refer to https://mnn-docs.readthedocs.io/en/latest/tools/convert.html , you could convert ONNX, TFLITE, TorchScript, Tensorflow models to mnn format.
4040
1. `pip install mnn`
4141
2. (for example, convert onnx to mnn) `MNNConvert -f ONNX --modelFile "{onnx_path}" --MNNModel "{mnn_path}" --bizCode biz --fp16 --info --detectSparseSpeedUp`
42+
3. modify mnn model filename, contains scale info just like`4xabcdefg.mnn` `abc-x4-def.mnn` or `abc_4x_def.mnn`, copy to your custom model folder.
4243

4344

4445
### Convert pth models to ncnn format by yourself

README_CHS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
转换模型的方法可以参考 https://mnn-docs.readthedocs.io/en/latest/tools/convert.html 模型转换工具能够将其他格式的模型(如:ONNX, TFLITE, TorchScript, Tensorflow等)转换为MNN模型
5252
1. (首先确认你已经安装了Python环境)`pip install mnn`
5353
2. (举例转换onnx模型到mnn格式)直接输入命令 `MNNConvert -f ONNX --modelFile "{onnx_path}" --MNNModel "{mnn_path}" --bizCode biz --fp16 --info --detectSparseSpeedUp`
54-
54+
3. 修改mnn模型文件名,使包含缩放倍率信息,如:`4xabcdefg.mnn`或者`abc-x4-def.mnn`或者者`abc_4x_def.mnn`,并复制mnn模型到设置的自定义模型目录中。
5555

5656
## 为 RealSR-NCNN-Android-GUI 增加更多ncnn模型
5757
RealSR-NCNN-Android-GUI 在 ver 1.7.6 以上的版本可以自动加载自定义模型。

RealSR-NCNN-Android-CLI/MNN-SR/src/main/jni/CMakeLists.txt

Lines changed: 38 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,43 @@
11
project(mnnsr-ncnn)
22

33
cmake_minimum_required(VERSION 3.4.1)
4-
#set(CMAKE_CXX_STANDARD 20)
5-
#set(CMAKE_CXX_STANDARD_REQUIRED ON)
4+
set(CMAKE_CXX_STANDARD 20)
5+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
66
set(CMAKE_BUILD_TYPE Debug)
77
#set(CMAKE_BUILD_TYPE Release)
88

99

10-
11-
if(MSVC) # Visual Studio
10+
if (MSVC) # Visual Studio
1211
message(STATUS "==Configuring for Visual Studio==")
1312

14-
if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
13+
if ("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
1514
set(TARGET_ARCH "x64")
16-
elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
15+
elseif ("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
1716
set(TARGET_ARCH "ARM64")
18-
elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
17+
elseif ("${CMAKE_GENERATOR}" MATCHES "ARM")
1918
set(TARGET_ARCH "ARM")
20-
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
19+
elseif ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
2120
set(TARGET_ARCH "x64")
22-
else()
21+
else ()
2322
set(TARGET_ARCH x86)
24-
endif()
23+
endif ()
2524

2625
# 设置目标属性,指定 MNN 库的路径
2726
set(mnn_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../3rdparty/mnn_windows_x64_cpu_opencl)
2827
find_library(MNN_LIB mnn HINTS "${mnn_DIR}/lib/${TARGET_ARCH}/Release/Dynamic/MD")
2928

30-
# add_library(MNN_Vulkan SHARED IMPORTED)
31-
# set_target_properties(MNN_Vulkan PROPERTIES IMPORTED_LOCATION
32-
# ${mnn_DIR}/${ANDROID_ABI}/libMNN_Vulkan.so)
29+
# add_library(MNN_Vulkan SHARED IMPORTED)
30+
# set_target_properties(MNN_Vulkan PROPERTIES IMPORTED_LOCATION
31+
# ${mnn_DIR}/${ANDROID_ABI}/libMNN_Vulkan.so)
3332

3433
set(OpenCV_DIR "C:/Lib/opencv/build")
35-
34+
3635
set(ncnn_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../3rdparty/ncnn-windows-vs2022-shared)
3736
find_library(NCNN_LIB ncnn HINTS ${ncnn_DIR}/${TARGET_ARCH}/lib)
38-
# set(ncnn_LIB ${ncnn_DIR}/${TARGET_ARCH}/lib/ncnn.lib)
37+
# set(ncnn_LIB ${ncnn_DIR}/${TARGET_ARCH}/lib/ncnn.lib)
3938

4039

41-
else() # Android Studio
40+
else () # Android Studio
4241
message(STATUS "Configuring for Android Studio")
4342
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -s -Wall -g -ggdb -Wl,-rpath=./")
4443
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wl,-rpath=./")
@@ -47,18 +46,18 @@ else() # Android Studio
4746

4847
# 设置目标属性,指定 MNN 库的路径
4948
set(mnn_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../3rdparty/mnn_android)
50-
49+
5150
include_directories(${mnn_DIR}/include)
52-
#include_directories(${mnn_DIR}/${ANDROID_ABI}/include/MNN)
51+
#include_directories(${mnn_DIR}/${ANDROID_ABI}/include/MNN)
5352
find_library(MNN_LIB mnn HINTS "${mnn_DIR}/${TARGET_ARCH}")
5453

5554
add_library(MNN SHARED IMPORTED)
5655
set_target_properties(MNN PROPERTIES IMPORTED_LOCATION
5756
${mnn_DIR}/${ANDROID_ABI}/libMNN.so)
5857

59-
# add_library(c++_shared SHARED IMPORTED)
60-
# set_target_properties(c++_shared PROPERTIES IMPORTED_LOCATION
61-
# ${mnn_DIR}/${ANDROID_ABI}/libc++_shared.so)
58+
add_library(c++_shared SHARED IMPORTED)
59+
set_target_properties(c++_shared PROPERTIES IMPORTED_LOCATION
60+
${mnn_DIR}/${ANDROID_ABI}/libc++_shared.so)
6261

6362
add_library(MNN_CL SHARED IMPORTED)
6463
set_target_properties(MNN_CL PROPERTIES IMPORTED_LOCATION
@@ -70,28 +69,21 @@ else() # Android Studio
7069

7170
set(OpenCV_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../3rdparty/OpenCV-android-sdk/sdk/native/jni/)
7271
set(ncnn_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../3rdparty/ncnn-android-vulkan-shared)
73-
# set(ncnn_LIB ${ncnn_DIR}/${ANDROID_ABI}/lib/libncnn.so)
72+
# set(ncnn_LIB ${ncnn_DIR}/${ANDROID_ABI}/lib/libncnn.so)
7473

75-
endif()
74+
endif ()
7675

7776
message(STATUS "TARGET_ARCH: ${TARGET_ARCH}")
78-
79-
80-
find_package(OpenCV REQUIRED)
81-
include_directories(${OpenCV_DIR}/include)
82-
message(STATUS "find opencv result: ${OpenCV_LIBS}")
83-
84-
8577
include_directories(${mnn_DIR}/include)
8678
#include_directories(${mnn_DIR}/${ANDROID_ABI}/include/MNN)
8779

8880

89-
if(EXISTS ${MNN_LIB})
81+
if (EXISTS ${MNN_LIB})
9082
message(STATUS "find mnn: ${MNN_LIB}")
91-
else()
83+
else ()
9284
message(STATUS "mnn library not found!")
9385
set(MNN_LIB "${mnn_DIR}/${ANDROID_ABI}/libMNN.so")
94-
endif()
86+
endif ()
9587
message(STATUS "find mnn result: ${MNN_LIB}")
9688

9789

@@ -101,27 +93,28 @@ include_directories(${ncnn_DIR}/${TARGET_ARCH}/include/ncnn)
10193

10294

10395
message(STATUS "find ncnn in: ${ncnn_DIR}/${TARGET_ARCH}/lib")
104-
find_library(NCNN_LIB NAMES ncnn libncnn PATHS "${ncnn_DIR}/${TARGET_ARCH}/lib")
105-
if(EXISTS ${NCNN_LIB})
96+
find_library(NCNN_LIB NAMES ncnn libncnn PATHS "${ncnn_DIR}/${TARGET_ARCH}/lib")
97+
if (EXISTS ${NCNN_LIB})
10698
message(STATUS "Found ncnn: ${NCNN_LIB}")
107-
else()
99+
else ()
108100
message(STATUS "ncnn library not found!")
109101
set(NCNN_LIB "${ncnn_DIR}/${TARGET_ARCH}/lib/libncnn.so")
110-
endif()
102+
endif ()
111103
message(STATUS "find ncnn result: ${NCNN_LIB}")
112104

105+
find_package(OpenCV REQUIRED)
106+
include_directories(${OpenCV_DIR}/include)
113107

114108
set(libwebp_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../3rdparty/libwebp)
115109

116110

117-
118111
#include_directories(${CMAKE_CURRENT_BINARY_DIR})
119112
option(USE_SYSTEM_WEBP "build with system libwebp" OFF)
120-
if(NOT USE_SYSTEM_WEBP)
113+
if (NOT USE_SYSTEM_WEBP)
121114
# build libwebp library
122-
if(NOT EXISTS "${libwebp_DIR}/CMakeLists.txt")
115+
if (NOT EXISTS "${libwebp_DIR}/CMakeLists.txt")
123116
message(FATAL_ERROR "Not find libwebp CMakeLists.txt!")
124-
endif()
117+
endif ()
125118

126119
option(WEBP_ENABLE_SIMD "" ON)
127120
option(WEBP_BUILD_ANIM_UTILS "" OFF)
@@ -137,16 +130,16 @@ if(NOT USE_SYSTEM_WEBP)
137130
option(WEBP_NEAR_LOSSLESS "" OFF)
138131
option(WEBP_ENABLE_SWAP_16BIT_CSP "" OFF)
139132

140-
add_subdirectory(${libwebp_DIR} ${CMAKE_BINARY_DIR}/libwebp)
133+
add_subdirectory(${libwebp_DIR} ${CMAKE_BINARY_DIR}/libwebp)
141134
include_directories(${CMAKE_BINARY_DIR}/libwebp/src)
142-
endif()
135+
endif ()
143136

144137

145138
add_executable(${PROJECT_NAME} main.cpp mnnsr.cpp)
146139

147-
target_link_libraries(${PROJECT_NAME} webp ${OpenCV_LIBS} ${MNN_LIB} ${NCNN_LIB})
140+
target_link_libraries(${PROJECT_NAME} webp MNN MNN_CL MNN_Vulkan ${OpenCV_LIBS} ${NCNN_LIB})
148141

149-
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
142+
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
150143
COMMAND ${CMAKE_COMMAND} -E copy_directory
151144
$<TARGET_FILE_DIR:${PROJECT_NAME}>
152145
${CMAKE_CURRENT_SOURCE_DIR}/../../../../../RealSR-NCNN-Android-GUI/app/src/main/assets/realsr

RealSR-NCNN-Android-CLI/MNN-SR/src/main/jni/main.cpp

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -293,11 +293,6 @@ void *load(void *args) {
293293

294294
toproc.put(v);
295295

296-
#if _WIN32
297-
fprintf(stderr, "load %ls finish\n", imagepath.c_str());
298-
#else // _WIN32
299-
fprintf(stderr, "load %s finish\n", imagepath.c_str());
300-
#endif // _WIN32
301296
}
302297

303298

@@ -446,7 +441,7 @@ int main(int argc, char **argv)
446441
{
447442

448443
high_resolution_clock::time_point prg_start = high_resolution_clock::now();
449-
MNNForwardType backend_type = MNN_FORWARD_OPENCL;
444+
int backend_type = MNN_FORWARD_OPENCL;
450445
path_t inputpath;
451446
path_t outputpath;
452447
int scale = 4;
@@ -511,7 +506,8 @@ int main(int argc, char **argv)
511506
break;
512507
case L'b':
513508
if(backend_type != MNN_FORWARD_CPU)
514-
backend_type = (MNNForwardType)_wtoi(optarg);
509+
backend_type =_wtoi(optarg);
510+
break;
515511
case L'h':
516512
default:
517513
print_usage();
@@ -561,7 +557,8 @@ int main(int argc, char **argv)
561557
break;
562558
case 'b':
563559
if (backend_type != MNN_FORWARD_CPU)
564-
backend_type = (MNNForwardType) atoi(optarg);
560+
backend_type = atoi(optarg);
561+
break;
565562
case 'h':
566563
default:
567564
print_usage();
@@ -684,7 +681,7 @@ int main(int argc, char **argv)
684681

685682
int prepadding = 0;
686683

687-
if (model.find(PATHSTR("models-")) != path_t::npos ||( model.size() >= 4 && model.compare(model.size() - 4, 4, ".mnn") == 0)) {
684+
if (model.find(PATHSTR("models-")) != path_t::npos||model.ends_with(".mnn")) {
688685
prepadding = 5;
689686
} else {
690687
fprintf(stderr, "unknown model dir type\n");
@@ -709,7 +706,7 @@ int main(int argc, char **argv)
709706
FILE* mp = _wfopen(modelfullpath.c_str(), L"rb");
710707
#else
711708
char modelpath[256];
712-
if (( model.size() >= 4 && model.compare(model.size() - 4, 4, ".mnn") == 0))
709+
if ( model.ends_with(".mnn"))
713710
sprintf(modelpath, "%s", model.c_str());
714711
else
715712
sprintf(modelpath, "%s/x%d.mnn", model.c_str(), scale);
@@ -779,20 +776,21 @@ int main(int argc, char **argv)
779776
{
780777
MNNSR mnnsr = MNNSR();
781778

782-
if (tilesize == 0){
779+
if (tilesize == 0) {
783780
tilesize = 128;
784-
tilesize =4000/ modelsize;
785-
if(tilesize>300)
786-
tilesize = 300;
781+
tilesize = 7000 / modelsize;
782+
if (tilesize > 400)
783+
tilesize = 400;
787784
}
788785
if (tilesize < 64)
789786
tilesize = 64;
790787
mnnsr.tilesize = tilesize;
791788
mnnsr.prepadding = prepadding;
792-
mnnsr.backend_type = backend_type;
789+
if (backend_type >= 0 && backend_type <= 14)
790+
mnnsr.backend_type = static_cast<MNNForwardType>(backend_type);
793791

794792
mnnsr.scale = scale;
795-
mnnsr.load(modelfullpath, modelsize>10);
793+
mnnsr.load(modelfullpath, modelsize > 10);
796794

797795
// main routine
798796
{

0 commit comments

Comments
 (0)