Waifu2x 是一个图片超分的网站,某些图片鄙人经对比发现效果比 Stable Diffusion 的附加功能要好。而 Waifu2x 后续上线的 Unlimited Waifu2x 不仅支持 4 倍超分,而且是使用电脑本地的 CPU/GPU 运行的,也就是通过 WASM 的方式运行的。
但是直接访问 Unlimited Waifu2x 的话,模型和 JS 都是从网络上加载的,速度很慢。这里决定在本地搭建一个 Unlimited Waifu2x,这样就不用每次都从网络上加载了,所有资源都是在本地加载。这里稍微参考了一下 Waifu2x 的 GitHub 说明,但是发现说明里面说的要下载一个上百兆的压缩包,再次劝退。干脆直接从网站加载的网址把需要的最精简的 onnx 模型弄来。
从浏览器的 F12 开发者工具的网络找到原来网站加载的 onnx 的模型地址,将这几个 onnx 的模型先下载到本地,然后再把网站上的 HTML、JS、CSS 都 down 下来。然后按照他加载的路径整理成对应的文件结构。(具体文件结构看下面的代码片段)
这样再看一下站点的大小,只有不到 60MB。如果只想尝试某一种模型的话,甚至可以不用下载其余的超分模型,而只需要下载用的那一个模型,和其他的 util 模型就行,这样需要下载的文件还更少。
网站原来使用的 cdn.jsdelivr 速度也很慢,目前找到了一个 jsdelivr 的反代,可以很好的适用于本场景。把 index.html 里面 11 行的那个 jsdelivr 的网址域名换成反代的域名。
按照 GitHub 上的说明,这里需要将该目录作为一个静态的 HTTP 服务运行。但是这里查了不少资料都没找到如何在 PowerShell 里面搭建静态服务器。后来从 ChatGPT 上找到了使用 PowerShell 的方法, 这样就不需要单独整一个第三方框架来设立静态服务器了。先把整来的文件整理成下面的结构。
PS E:\Downloads\nginx-1.25.3\html> tree /f
卷 Data2 的文件夹 PATH 列表
卷序列号为 6E72-D95F
E:.
│ blank.png
│ index.html
│ script.js
│ style.css
│
└─models
├─cunet
│ └─art
│ noise3_scale2x.onnx
│
├─swin_unet
│ ├─art
│ │ noise3_scale4x.onnx
│ │
│ ├─art_scan
│ │ noise3_scale4x.onnx
│ │
│ └─photo
│ noise3_scale4x.onnx
│
└─utils
create_seam_blending_filter.onnx
pad.onnx
然后随便找一个目录新建一个 server.ps1
的文件,添加这些程序:
$port = 8080 # 指定要使用的端口
$root = "E:\Downloads\nginx-1.25.3\html" # 改成整理好文件结构的目录的路径
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add("http://localhost:$port/")
$listener.Start()
Write-Host "Server is running at http://localhost:$port"
while ($listener.IsListening) {
$context = $listener.GetContext()
$response = $context.Response
$filename = $context.Request.Url.LocalPath.TrimStart('/')
$filepath = Join-Path $root $filename
if (Test-Path $filepath -PathType Leaf) {
$fileBytes = [System.IO.File]::ReadAllBytes($filepath)
$response.OutputStream.Write($fileBytes, 0, $fileBytes.Length)
} else {
Write-Host "Request url [$filename]"
if ($filename -eq '') {
$filepath = Join-Path $root 'index.html'
if (Test-Path $filepath -PathType Leaf) {
$fileBytes = [System.IO.File]::ReadAllBytes($filepath)
$response.OutputStream.Write($fileBytes, 0, $fileBytes.Length)
} else {
$response.StatusCode = 404
}
} elseif ($filename -eq 'shutdown') {
$response.StatusCode = 200
$responseContent = ''
$responseBytes = [System.Text.Encoding]::UTF8.GetBytes($responseContent)
$response.OutputStream.Write($responseBytes, 0, $responseBytes.Length)
$response.Close()
$listener.Stop()
break
} else {
$response.StatusCode = 404
}
}
$response.Close()
}
$listener.Stop()
保存后打开一个 PowerShell 的窗口,cd
到这个 server.ps1
的所在目录,执行 ./server.ps1
。
看到类似于 Server is running at http://localhost:8080
的提示后打开浏览器访问 http://localhost:8080
(这里的 8080 为 server.ps1
程序第一行指定的端口号,下同。如果指定的是 80 的话就是 http://localhost
),放上去需要使用的图片,选择要使用的模型。
- swin_unet / art 立绘模型
- swin_unet / art scan 扫描的纸质立绘模型
- swin_unet / photo 照片模型
- cunet / art (201811) 另一种立绘模型
选择降噪程度,选择超分倍率,然后就可以点击开始来执行超分了。用完以后别忘了访问 http://localhost:8080/shutdown
停止服务。