Real-ESRGAN icon indicating copy to clipboard operation
Real-ESRGAN copied to clipboard

realesrgan-ncnn-vulkan cant work if use 'full_path_to_binary/realesrgan-ncnn-vulkan' instead of './realesrgan-ncnn-vulkan'

Open blacklein opened this issue 2 years ago • 1 comments

I am using M1 Max Macbook pro

enter following cmd in terminal, it shows error and cant work properly

/Users/username/Desktop/realesrgan/realesrgan-ncnn-vulkan -i /Users/username/Desktop/Untitled.png -o /Users/username/Desktop/Untitled-x4.png

I must cd to binary working directory first, then use './realesrgan-ncnnn-vulkan', it works properly

cd /Users/username/Desktop/realesrgan/ # step1 ./realesrgan-ncnn-vulkan -i /Users/username/Desktop/Untitled.png -o /Users/username/Desktop/Untitled-x4.png # step2

How to solve this bug?

终端输入/Users/username/Desktop/realesrgan/realesrgan-ncnn-vulkan后回车,是可以启动realesrgan-ncnn-vulkan进程跳出--help信息,但输入/Users/username/Desktop/realesrgan/realesrgan-ncnn-vulkan -i /Users/username/Desktop/Untitled.png -o /Users/username/Desktop/Untitled-x4.png却会报错,无法放大图像,必须先cd /Users/username/Desktop/realesrgan/./realesrgan-ncnn-vulkan -i /Users/username/Desktop/Untitled.png -o /Users/username/Desktop/Untitled-x4.png才能正常运行放大图像。 同样的方法,用waifu2x-ncnn-vulkan测试,终端输入/Users/username/Desktop/realesrgan/waifu2x-ncnn-vulkan -i /Users/username/Desktop/Untitled.png -o /Users/username/Desktop/Untitled-x4.png是可以正常运行放大图像的。 迫切希望作者能尽快修正realesrgan-ncnn-vulkan的上述问题,谢谢作者!

blacklein avatar Jul 01 '22 10:07 blacklein

这个问题是因为 realesrgan-ncnn-vulkan 尝试在工作路径 ($PWD, %CD%) 读取预训练模型,而通常做法应该在标准路径(平台标准软件安装路径、用户数据路径,或兜底到可执行文件所在路径)读取应用程序安装随附的数据。


临时解决方案是运行 realesrgan-ncnn-vulkan 时同时提供模型完整路径,使用 -m 参数:

/usr/local/RealESRGAN/realesrgan-ncnn-vulkan -m /usr/local/RealESRGAN/models -i ... -o ...

模型完整路径默认应该在 realesrgan-ncnn-vulkan 所在文件夹拼接上 /models。如果你把 realesrgan-ncnn-vulkan 放在了 $PATH,UNIX 下使用 which、Windows 下使用 where 能够获得 realesrgan-ncnn-vulkan 可执行文件,然后获取其父文件夹并拼接上 /models 作为 -m 参数即可。

Edit: 备用解决方法是像楼上一样 cdrealesrgan-ncnn-vulkan 所在文件夹(因为 cd 改变了工作路径),但建议使用 pushd 替代 cd,等运行完后 popd 即可回到原来终端或脚本的工作路径。


另外,建议作者友好地处理并报告异常。如果模型未找到(models 丢失,或 -m-n 参数有误),输出调试信息并以错误码退出,而不是触发 [1] 3515 segmentation fault realesrgan-ncnn-vulkan。否则看起来像是个粗心导致的编程错误,并不能让调用者明白是参数有误。

VaslD avatar Jul 30 '22 06:07 VaslD