把喜欢的动漫变成涂色本:用 C# + Vulkan 做了一个线稿生成器

之前做老动画超分辨率工具时,我就觉得,把小时候喜欢的动画整理得更清楚,再拿给现在的小朋友看,是一件很有意思的事。

这次换个玩法:把喜欢的动漫图片变成黑白线稿,打印出来,让小朋友自己涂颜色。

可以是一张喜欢的角色插画,也可以是几张挑选好的动漫截图。提取线稿,调整深浅,拼成 A4 页面,最后导出一份 PDF------一份自己挑选内容的涂色册就做好了。

围绕这个想法,我做了一款 Windows 桌面小工具:

动漫线稿与涂色页工坊 · Anime2Sketch Vulkan。

它使用 C# WinForms 做界面,C++ Vulkan 负责神经网络推理,提供可以直接运行的部署包,也整理了完整的 VS2022 解决方案。

软件实际运行界面

从一张动漫图片,到一张可以涂色的线稿

先看一张实际处理结果。下面的输入来自 Anime2Sketch 官方测试示例,线稿由本工具的 Vulkan 后端生成。

原始图片:

Anime2Sketch 官方示例原图

生成的线稿:

本工具生成的默认线稿

这版采用的是 Anime2Sketch 官方项目(github.com/Mukosame/An... default U-Net 模型。原项目面向动漫、插画和漫画的线稿提取,提供了预训练权重和测试代码。

在此基础上,我们把模型推理、可视化调整、批量处理和打印排版放进了同一个桌面程序。

对于想做涂色素材的朋友,处理完就能保存、排版;对于做 C# 和 GPU 推理的朋友,也有一套完整工程可以继续研究。

线稿生成之后,还可以继续调整

不同素材适合的线条深浅不一样。有的原图线条已经很清楚,有的会留下一些浅灰色阴影,还有的适合进一步处理成纯黑白。

因此,界面里保留了几项直接影响成图的设置:

功能 可以用来做什么
线条深浅 加深或减淡线条,方便适应屏幕查看和打印
对比度 调整灰度层次,让线条与背景更分明
净白背景 减弱浅灰色残留,让纸面更干净;过高也可能损失细线
纯黑白 按阈值转换为黑白两色
白色背景 直接生成常见的白底线稿
透明背景 导出带透明度的 PNG,方便叠加到其他设计里
自选底色 给线稿配上自己喜欢的底色

调整这些参数,不需要重新跑一遍神经网络。

软件会保留最近一张图的原始灰度线稿。拖动滑块时,只重新计算线条和背景的显示效果;调好之后,再点击"保存当前效果"。

这样可以比较从容地试几种效果,而不用每改一个参数就等待一次模型推理。

批量生成,再拼成自己的 A4 涂色册

只处理一张图时,选择"单张图片"即可。如果已经整理了一个素材文件夹,可以切换到"文件夹批量"。

批量处理支持包含子目录、跳过已有结果,并保留输入的目录结构。遇到无法解码的图片,会记录错误并继续处理其他图片。

输出文件名包含原图内容和处理参数的摘要。换了一张原图,或者修改了线条参数,会生成对应的新结果,避免误把之前的图片当成这次的成品。

涂色页排版支持:

  • 每页 1、2、4、6 或 9 张图片。
  • A4 纵向、横向布局。
  • 150 DPI 或 300 DPI。
  • 可选显示图片名称。
  • 导出逐页 PNG 和多页 PDF。

下面是一张实际生成并渲染检查过的 A4 页面示例:

A4 双图涂色页示例

可以在批量处理时勾选"处理后同时生成涂色册",也可以把已经生成的线稿放到一个文件夹,单独点击"已有线稿文件夹 → 涂色册"。

已有线稿排版会读取所选目录本层的图片,按文件名排序。提前把文件命名成 001.png、002.png、003.png,就比较容易控制页面顺序。

生成的 PDF 可以用常见 PDF 阅读器打开。打印时选择 A4、实际大小或 100% ,就能按设计的纸张尺寸输出。

逐页 PNG 保存无损版本;PDF 中使用质量 95 的 JPEG 控制文件体积。透明线稿在排版时会合成白底,适合直接打印。

怎么使用?先从默认设置开始

普通使用不需要配置开发环境。

第一步:完整解压部署包。

双击 Run.cmd 或 Anime2Sketch.WinForms.exe。运行环境为 Windows x64、.NET Framework 4.8,以及支持 Vulkan 的显卡驱动。

部署包已经带好模型,运行时不需要 Python、CUDA、OnnxRuntime,也不需要另外安装 Vulkan SDK。图像推理在本机完成。

第二步:选择输入和输出。

选择单图或文件夹,设置保存位置。软件自带一张测试图片,可以先用它熟悉操作。

第三步:模型输入先保留 512。

这是本版默认值,也与官方测试的默认尺寸一致。软件还提供 256、768、1024 选项,可以针对素材尝试;输入尺寸变大不代表效果一定更好。

模型内部会把图片缩放成正方形处理,生成线稿后再恢复原图宽高。输出尺寸恢复了,但线条的细节仍然受模型输入和原始素材影响。

第四步:生成线稿,调整效果。

先用默认参数查看结果,再按需要调整深浅、对比度、背景。满意后点击"保存当前效果"。

如果勾选"跳过已有结果",而这次图片已经处理过,软件显示的是保存好的成图。需要重新调整这张图时,取消勾选后再生成一次,让软件建立原始线稿缓存。

第五步:导出涂色册。

选择每页张数、方向和 DPI,生成 PNG 页面及 PDF,打印即可。

自带资源、默认输出、设置和 GPU 缓存都以 exe 所在目录 定位,默认使用相对路径。把完整软件文件夹换个位置,也能继续找到随包提供的模型和示例。

实测速度:512 输入,稳定推理约 24 毫秒

这次也记录了实际耗时,方便大家了解软件运行时各部分的开销。

测试设备为 NVIDIA GeForce RTX 4060 Laptop GPU ,使用 Release x64、Vulkan FP32,输入为官方 madoka.jpg 示例,模型输入设置为 512×512。

连续执行 6 次,取会话和尺寸计划准备完成后的后 5 次:

测试项目 本机实测
Vulkan Run 平均耗时 24.02 毫秒/张
引擎处理平均耗时 53.49 毫秒/张
512 执行计划张量工作区 74 MiB

这里的口径需要说清楚。

Vulkan Run 包含原生调用中的数据上传、GPU 执行、同步和下载。引擎处理还包含缩放、归一化、灰度转换和恢复原尺寸。两者都不能直接当作"从磁盘读图到保存 PDF"的完整耗时。

74 MiB 是计划中的张量工作区,不是整个程序的显存占用。 权重、传输缓冲、驱动管线等还会占用额外资源。

首次无管线缓存时,本机准备管线约用了 45 秒。这部分主要发生在初始化阶段,之后会尝试复用磁盘缓存;批量处理还会复用同一个 GPU 会话和相同尺寸的执行计划。因此,第一次点击和后续连续处理的等待时间会有明显差别。

这些数据来自本机示例测试,大家也可以结合自己的显卡、素材大小和磁盘速度观察实际表现。

技术上,C# 是怎样调用 Vulkan 完成推理的?

界面负责选择文件、收集参数、展示进度;真正的网络计算交给 C++ Vulkan 核心。

一次处理大致经过下面几个步骤:

bash 复制代码
读取动漫图片
    ↓
缩放到模型输入尺寸,转换为 RGB 浮点张量
    ↓
C# 根据图描述生成执行计划
    ↓
通过 C ABI 调用 C++ Vulkan 运行时
    ↓
GPU 执行卷积、实例归一化、激活和上采样等计算
    ↓
下载单通道线稿,恢复原图宽高
    ↓
调整线条和背景,保存 PNG 或排版为 A4 涂色册

Vulkan 除了图形渲染,也支持计算工作负载。本项目使用计算着色器执行网络算子,并在 C++ 侧管理缓冲区、管线、命令提交和同步。相关基础概念可以参考 Khronos Vulkan 官方指南(docs.vulkan.org/guide/lates...

选择 Vulkan,也是为了继续复用我们前面几个图像工具积累的运行时。现有部署流程可以保持较少的外部运行依赖。这版软件当前提供的是 Windows x64 实现,实际验证使用的是上面列出的 NVIDIA 显卡。

模型适配中有两个值得交流的细节。

一个是转置卷积。默认模型使用的 4×4、步长 2 转置卷积,被精确拆成四个输出奇偶相位,每个相位复用 2×2 卷积,再交织写回结果。这样可以利用已有卷积内核,也避免构造大片插零张量。

另一个是跳跃连接中的原地操作。官方实现的 LeakyReLU 会原地修改张量,影响 skip 分支实际参与拼接的数据。导出时需要保留这个行为,才能对齐原网络。

我们将 C# 实际预处理后的同一个浮点张量交给官方 PyTorch 模型,对比 Vulkan 原始输出。512 输入下,最大绝对误差约为 0.00000417 ,平均绝对误差约为 0.000000092。

这项比较检查的是网络计算。文件解码和缩放分别使用 GDI+、PIL 时,仍可能产生一些端到端像素差异。

完整 VS2022 工程,方便继续修改

这次交付包含两个项目:C# WinForms 界面和 C++ Vulkan 核心。

C# 使用 .NET Framework 4.8,界面采用标准 MainForm.Designer.cs,可以在 VS2022 设计器里继续调整。

源码包还包含模型图描述、转换后的权重、原始 checkpoint、模型转换脚本、着色器源码、预编译 SPIR-V 和第三方许可说明。

安装 VS2022 的".NET 桌面开发""使用 C++ 的桌面开发"及配套 .NET Framework 4.8 开发组件后,打开解决方案,选择 Release | x64 ,将 Anime2Sketch.WinForms 设为启动项目,即可编译运行。现有模型已经导出好,正常编译和使用不需要 Python。

交付内容 压缩包大小
可直接运行的部署包 约 194 MiB
单卷完整源码包 约 388 MiB

部署包已做过异目录解压、从其他工作目录启动的检查;源码 ZIP 解压后也完成了独立编译验证。

做一点可以拿来用的小东西

这类项目有趣的地方,在于它很容易从电脑屏幕走到生活里。

选几张喜欢的动漫图片,生成线稿,排成两三页 A4,拿起彩笔,就能开始涂色。也可以把透明线稿放进自己的手账、卡片或排版练习里。

当然,最终效果还是要看素材:线条清楚、主体明确的图片比较方便整理;复杂背景和细碎纹理可能留下残线,净白或纯黑白设置过强也可能删掉细节。可以先试一张,调好参数再批量处理。

如果你也喜欢 C#、图像处理、Vulkan GPU 推理,或者想体验这款小工具,欢迎一起交流。

QQ群:天天代码码天天

群号:264292622

软件体验和后续改进,都欢迎在群里讨论。感谢 Anime2Sketch 作者公开模型与测试代码,也希望这次整理的桌面工具,能让这些技术变成大家用得上的小东西。

相关推荐
挖掘狂人2 小时前
AI 写代码越来越快,我们的代码能力却在悄悄退化
人工智能·程序员·ai编程
HackTwoHub3 小时前
免 Root 安卓渗透工具 Stryker|把 Kali 装进手机!随身无线渗透工作站,内置 Nmap/Nuclei/Metasploit 全套武器库
android·linux·运维·人工智能·web安全·macos·智能手机
Anhty3 小时前
新手实测|叮咚变声器上手体验测评,普通用户娱乐参考
人工智能·智能手机·娱乐
梦想的初衷~3 小时前
AI-Agent融合的无人机农林生态遥感科研实践
人工智能·无人机·生态·遥感·高光谱
Maplesoft3 小时前
柔印行业如何通过数字化样机、虚拟调试提升企业盈利能力
人工智能·数学建模·系统仿真
一切皆是因缘际会3 小时前
同源世界物理系统
人工智能·ai·同源世界·同源系统
大模型真好玩3 小时前
DeepSeek Harness 进阶——认识DeepSeek Harness插件机制,并从0到1实现一个插件
人工智能·agent·deepseek
ar01233 小时前
AR眼镜设备管网巡检:从人工看管线走向AI空间智能巡检
人工智能·ar
howdoyoudo2026063 小时前
AI审计手记 #30:从“政府网站”到“商业平台”——腾讯云沙箱AI代理越界事件的审计分析
大数据·人工智能·安全·机器学习·语言模型·云计算·腾讯云