
使用計算機視覺將中文字符轉換為單線字體
諸如好時字體之類的單線字體對於製作涼爽的程序圖形和雕刻非常有用。對於神經網的學習也可以說是更容易的。
此工具將自動生成中文單線字體,並給定常規的真實字體文件(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 ,還包括atan(1/2) , atan(1/3)和atan(1/4)的2 3 4時,僅在0°,45°和90°下衝程。默認值為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
