
使用计算机视觉将中文字符转换为单线字体
诸如好时字体之类的单线字体对于制作凉爽的程序图形和雕刻非常有用。对于神经网的学习也可以说是更容易的。
此工具将自动生成中文单线字体,并给定常规的真实字体文件(TTF/TTC)。它可以输出经典的好时格式,也可以输出包含所有polyline的JSON文件。
该算法在许多不同角度扫描了角色的栅格渲染,以找到最有可能是中风的线段的线段。然后,它通过连接,合并和清理线段来估计中风。

pip install pillow ) 以下是该软件可以生成的文件类型来编码单线字体。
一个带有一个对象的JSON文件。对象的键是字符的Unicode索引。每个密钥映射到一系列各个群。多线线是一个点。一个点是一个包含X和Y坐标的2个元素阵列。坐标是0.0至1.0之间的浮子,(0,0)是左上角。例如:
{
"U+4E00" :[[[ 0.0 , 0.55 ], [ 1.0 , 0.55 ]]],
"U+4E01" :[[[ 0.02 , 0.02 ], [ 0.99 , 0.02 ]], [[ 0.51 , 0.02 ], [ 0.53 , 0.925 ], [ 0.31 , 1.0 ]]]
}上面的编码包含Unicode中的前两个汉字,“一”和“丁”。
好时字体是开发的矢量字体的集合c。 1967年,由海军武器实验室的艾伦·文森特·赫尔希(Allen Vincent Hershey)博士撰写,最初旨在使用早期阴极射线管显示器上的向量渲染。这些字体是公开可用的,并且使用限制很少。矢量字体很容易在两个或三个维度上缩放和旋转;因此,好时字体已被广泛用于计算机图形,计算机辅助设计程序,以及最近也用于计算机辅助制造应用等激光雕刻等。 (维基百科)
此链接概述了如何解析好时字体。您还可以在lingdong-/p5-Hershey-js找到我自己的实现。
与中风文件相比,好时字体的紧凑程度更高,但准确的坐标也较少。
如果您只对使用预生成的单线字体感兴趣,则可以在以下位置捕获:
笔记:
Heiti.hf.txt和Kaiti.hf.txt最初基于专有的Macos System System Fonts STHeiti和STKaiti 。现在,它们被开源替代方案所取代。
如果您想从自定义TTF/TTC文件中生成新的单线字体,请首先使用以下命令生成JSON编码的stroke文件。
python char2stroke.py build path/to/font.ttf
可选参数:
--first [FIRST]
--height [HEIGHT]
--last [LAST]
--ngradient [NGRADIENT]
--output [OUTPUT]
--strw [STRW]
--width [WIDTH]
width和height决定要扫描字符的栅格图像的尺寸。这些数字越大,越详细,越慢。两者的默认值为100 。strw是近似的中风宽度(以像素为单位,在给定width和height )。合并笔触时使用。默认值为10 。first也是last指定要包括的Unicode字符的范围。默认值为0x4e00和0x9fef ,其中包含所有“ CJK意识形志”字形。ngradient是用于扫描图像的不同梯度的数量。在ngradient = 1 ,仅在0°,45°和90°的情况下扫描,而在2和4 ,也包括atan(1/2) 3 atan(1/3)和atan(1/4)的斜率。默认值为2 。output :编写输出文件的路径。如果未指定此程序,则该程序将写入stdout , > (info)和| (信息)可用于重定向输出。在生成大文件之前,对一小部分字符进行一些快速测试,比较不同字体的结果和调整参数很有帮助。以下命令通过并排可视化计算机视觉结果来促进此过程。
python char2stroke.py test path/to/font1.ttf path/to/font2.ttf ...
可选参数:
--corpus [CORPUS]
--height [HEIGHT]
--ngradient [NGRADIENT]
--nsample [NSAMPLE]
--strw [STRW]
--width [WIDTH]
corpus :进行测试的字符串。默认值是千字符经典的文字。nsample :从语料库随机挑选的字符数。默认值为8 。build模式的参数相同。以下命令从上一步中产生的中风文件生成一个好时字体。
python tohershey.py path/to/input.json > path/to/output.hf.txt
