
Konvertieren Sie chinesische Zeichen mit Computer Vision in Single-Line-Schriftarten
Einzelzeilen-Schriftarten wie die Hershey-Schriftarten sind massiv nützlich, um coole prozedurale Grafiken zu erstellen und zu gravieren. Sie sind auch wohl einfacher für neuronale Netze zu lernen.
Dieses Tool generiert automatisch chinesische Single-Line-Schriftarten bei einer regelmäßigen typischen Schriftart (TTF/TTC). Es kann entweder das klassische Hershey -Format oder eine JSON -Datei mit allen Polylines ausgeben.
Der Algorithmus scannt in vielen verschiedenen Blickwinkeln eine Raster -Renderung eines Charakters, um Liniensegmente zu finden, die höchstwahrscheinlich Teil eines Schlaganfalls sind. Anschließend schätzt die Striche, indem die Liniensegmente angeschlossen, zusammengefügt und gereinigt werden.

pip install pillow ) Im Folgenden finden Sie Arten von Dateien, die diese Software produzieren kann, um einzelne Schriftarten zu codieren.
Eine JSON -Datei mit einem Objekt. Die Schlüssel des Objekts sind Unicode -Indizes von Zeichen. Jeder Schlüssel kartiert zu einer Reihe von Polylines. Eine Polylinie ist eine Reihe von Punkten. Ein Punkt ist ein 2-Element-Array, das X- und Y-Koordinaten enthält. Eine Koordinate ist ein Schwimmer zwischen 0,0 und 1,0 und (0,0) ist der obere linke Eckeln. Zum Beispiel:
{
"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 ]]]
}Die obige Codierung enthält die ersten beiden chinesischen Zeichen in Unicode "一" und "丁".
Die Hershey -Schriftarten sind eine Sammlung von Vektor -Schriftarten, die c entwickelt wurden. 1967 von Dr. Allen Vincent Hershey im Naval Weapons Laboratory, das ursprünglich mit Vektoren auf frühen Kathodenröhren -Displays ausgelegt werden soll. Die Schriftarten sind öffentlich verfügbar und haben nur wenige Nutzungsbeschränkungen. Vektor -Schriftarten können leicht skaliert und in zwei oder drei Abmessungen gedreht; Infolgedessen wurden die Hershey-Schriftarten in Computergrafiken, computergestützten Designprogrammen und in jüngerer Zeit auch in computergestützten Fertigungsanwendungen wie Lasergravur verwendet. (Wikipedia)
Dieser Link gibt einen Überblick darüber, wie man Hershey -Schriftarten analysiert. Sie können auch meine eigene Implementierung bei Lingdong-/P5-Herd-Js-Js finden.
Im Vergleich zu Schlaganfalldateien sind Hershey -Schriftarten um ein Vielfaches kompakter, weist aber auch weniger genaue Koordinaten auf.
Wenn Sie nur an der Verwendung vorgenerierter Einzelzeilenschriften interessiert sind, können Sie sie an den folgenden Stellen greifen:
Notiz:
Heiti.hf.txt und Kaiti.hf.txt basierten ursprünglich auf proprietären MacOS -Systemschriften STHeiti und STKaiti . Sie werden jetzt durch Open -Source -Alternativen ersetzt.
Wenn Sie neue Single-Line-Schriftarten aus benutzerdefinierten TTF/TTC-Dateien generieren möchten, verwenden Sie zunächst den folgenden Befehl, um eine JSON-kodierte Schlaganfalldatei zu generieren.
python char2stroke.py build path/to/font.ttf
Optionale Argumente:
--first [FIRST]
--height [HEIGHT]
--last [LAST]
--ngradient [NGRADIENT]
--output [OUTPUT]
--strw [STRW]
--width [WIDTH]
width und height bestimmt die Dimension der Rasterbilder von Zeichen, die gescannt werden sollen. Je größer diese Zahlen, desto detaillierter und desto langsamer. Standard ist 100 für beide.strw ist die ungefähre Schlaganfallbreite (in Pixeln bei gegebener width und height ). Dies wird beim Zusammenführen von Strichen verwendet. Standard ist 10 .first und last gibt der Bereich der Unicode -Zeichen an, die enthalten sind. Standardwerte sind 0x4e00 und 0x9fef , die alle "CJK -Ideograf" -Glyphen enthält.ngradient ist die Anzahl der verschiedenen Gradienten, die zum Scannen des Bildes verwendet werden. Bei ngradient = 1 werden nur Schlaganfälle bei 0 °, 45 ° und 90 ° gescannt, während bei 2 , 3 und 4 Steigungen von atan(1/2) , atan(1/3) und atan(1/4) auch enthalten sind. Standard ist 2 .output : Pfad zum Schreiben der Ausgabedatei. Wenn dies nicht angegeben ist, schreibt das Programm an stdout und > (info) und | (Info) kann verwendet werden, um die Ausgabe umzuleiten.Bevor große Dateien generiert werden, ist es hilfreich, einige schnelle Tests an kleinen Zeichensätzen durchzuführen, zu vergleichen, wie unterschiedliche Schriftarten ausgehen, und die Optimierungsparameter. Der folgende Befehl erleichtert diesen Vorgang mit der Seite der Side-Side-Visualisierung von Computernisionsergebnissen.
python char2stroke.py test path/to/font1.ttf path/to/font2.ttf ...
Optionale Argumente:
--corpus [CORPUS]
--height [HEIGHT]
--ngradient [NGRADIENT]
--nsample [NSAMPLE]
--strw [STRW]
--width [WIDTH]
corpus : String zum Testen. Standard ist der Text von Tausend Character Classic.nsample : Anzahl der Zeichen, die zufällig aus dem Korpus ausgewählt werden sollen. Standard ist 8 .build -Modus.Der folgende Befehl generiert eine Hershey -Schrift aus einer im vorherigen Schritt erstellten Schlaganfalldatei.
python tohershey.py path/to/input.json > path/to/output.hf.txt
