
复刻笔迹、批量成字、定制字库SDT 手写风格生成实战指南【免费下载链接】SDTThis repository is the official implementation of Disentangling Writer and Character Styles for Handwriting Generation (CVPR 2023)项目地址: https://gitcode.com/gh_mirrors/sd/SDTSDT 是一个开源的手写风格生成项目论文发表于 CVPR 2023。它能将笔迹的书写风格与文字内容解耦处理给你几张参考字图就能用同一种笔迹写出任意文字。设计师、内容创作者和算法研究者都能直接上手。下面我们沿着六个真实场景把 SDT 从环境准备到结果验收完整走一遍。它凭什么能换手写字SDT 的核心创新是把一个人的笔迹拆成两个维度书写者级风格整体运笔习惯与单字级风格同一人写不同字时的细微差别。传统 RNN 类方法只捕捉整体风格容易让生成的字千人一面。SDT 改用风格解耦的 Transformer 同时建模两层风格模仿单个字符时明显更贴近原笔迹。模型同时建模书写者级与单字级风格这是高保真模仿的关键理解了这一点后面的每个场景就都顺理成章了。出发前先把环境和代码备齐SDT 建议用 conda 管理依赖Python 3.8 起步。四步即可完成环境搭建git clone https://gitcode.com/gh_mirrors/sd/SDT cd SDT conda env create -f environment.yml conda activate sdt-env环境装好后再按 README 把数据与权重放到约定位置数据集进data/预训练编码器与分类器进model_zoo/。这一步做扎实后面几乎不会踩坑。场景一照着某人的笔迹生成单字 ✍️最典型的需求是让 AI 模仿某人的字去写字。整个过程分两步。先准备风格样本新建style_samples目录放入同一个人手写的参考字图。配置文件configs/CHINESE_USER.yml里的MODEL.NUM_IMGS默认取 15 张参考图样本越贴近目标笔迹效果越稳定。再运行生成脚本python user_generate.py --cfg configs/CHINESE_USER.yml \ --pretrained_model model_zoo/chinese_content_iter30k_acc95.pth \ --style_path style_samples \ --dir Generated/Chinese_User脚本会逐字渲染出 256×256 的 PNG 存入输出目录。看看真实样本与生成结果的对比左为真实笔迹右为 SDT 手写风格生成结果场景二同一风格需要几百个字批量产出 手写信只要几十字但做字库、做训练数据集时通常要一次性生成大量样本。这时改用test.py它按书写者 × 字符成批输出。输出有两种形态用--store_type切换online保存笔画坐标到 lmdb方便后续分析与动态展示img直接渲染成 PNG每个文件命名为书写者ID_字符.png。python test.py --cfg configs/CHINESE_CASIA.yml \ --pretrained_model path/to/checkpoint.pth \ --store_type img \ --sample_size 500 \ --dir Generated_img/Chinese--sample_size控制每位书写者随机生成的样本数数字越大产出越多。仓库中的在线动图还保留了笔顺信息可以看到每个字的运笔顺序。场景三想跨语言切换换份配置就行 做完中文样本你可能想试试日文、英文。好消息是不需要改任何代码只换配置文件。语言配置文件用途中文configs/CHINESE_CASIA.yml论文实验 / 批量测试中文自定义风格configs/CHINESE_USER.yml配合 user_generate.py英文configs/English_CASIA.ymlCASIA 英文数据日文configs/Japanese_TUATHANDS.ymlTUATHANDS 日文数据训练或测试时把--cfg指向对应文件即可例如python train.py --cfg configs/Japanese_TUATHANDS.yml --log Japanese_log同一套框架在多种文字系统上都验证过效果下图可见一斑同一框架在不同文字系统上的生成效果场景四想训练只属于自己的风格模型️官方数据不够用、或想用私有笔迹数据时可以从头训练。流程分三步将带书写者标注的数据集解压到data/目录把预训练内容编码器权重放进model_zoo/执行训练脚本观察saved/下的产物。python train.py --cfg configs/CHINESE_CASIA.yml --log Chinese_log训练节奏在配置里调SOLVER.MAX_ITER控制总迭代次数TRAIN.SNAPSHOT_ITERS决定隔多少步保存一次 checkpointTRAIN.IMS_PER_BATCH影响显存占用。想快速验证效果把MAX_ITER调小即可。场景五把生成的字变成能用的字体 PNG 只能看不能排版。社区贡献者已打通从生成到打印的链路先把 SDT 输出转成 SVG/TTF 字体文件再用配套软件微调字间距、行距与段落间距。配套软件可直观调整字距、行距与段落间距调整完成后直接打印效果足以以假乱真打印输出效果几乎看不出机器痕迹场景六生成得像不像用三个指标验收 肉眼判断容易主观。SDT 在evaluate.py中内置了三个量化指标用--metric切换指标衡量内容适用数据DTW笔画轨迹时序距离越小越贴近在线坐标Content_score内容保真度识别正确率在线坐标Style_score风格相似度渲染图片python evaluate.py --data_path Generated/Chinese --metric DTW python evaluate.py --data_path Generated/Chinese --metric Content_score --pretrained_model model_zoo/chinese_content_iter30k_acc95.pth python evaluate.py --data_path Generated_img/Chinese --metric Style_score --pretrained_model model_zoo/chinese_style_iter60k_acc999.pth后两个指标依赖model_zoo/下的预训练分类器记得先下载放好再跑。常见问题速查 ❓环境装不上先建 Python 3.8 的 conda 环境再执行conda env create -f environment.yml一次装齐依赖。显存吃紧调小TRAIN.IMS_PER_BATCHSDT 目前单卡即可完成训练。线条太细看不清渲染参数在utils/util.py的coords_render中width、height、thickness分别控制画布尺寸与笔画粗细。换语言后报错检查数据集目录结构与配置中DATA_LOADER.DATASET是否一致。至此从模仿笔迹、批量成字到跨语言切换、训练模型与量化验收SDT 的完整闭环你已经走了一遍。挑一个场景动手试试看你会发现手写风格生成比想象中更简单。【免费下载链接】SDTThis repository is the official implementation of Disentangling Writer and Character Styles for Handwriting Generation (CVPR 2023)项目地址: https://gitcode.com/gh_mirrors/sd/SDT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考