
コンピュータービジョンを使用して、漢字をシングルラインフォントに変換します
ハーシーフォントなどのシングルラインフォントは、クールな手続きグラフィックを作成したり、彫刻にしたりするのに非常に役立ちます。また、間違いなく神経ネットについて学ぶことができます。
このツールは、通常の真のタイプフォントファイル(TTF/TTC)を与えられた中国のシングルラインフォントを自動的に生成します。クラシックハーシー形式、またはすべてのポリラインを含むJSONファイルのいずれかを出力できます。
アルゴリズムは、さまざまな角度でキャラクターのラスターレンダリングをスキャンして、ストロークの一部である可能性が最も高いラインセグメントを見つけます。次に、ラインセグメントを接続、マージ、およびクリーンアップすることにより、ストロークを推定します。

pip install pillow ) 以下は、このソフトウェアがシングルラインフォントをエンコードするために生成できるファイルの種類です。
1つのオブジェクトを備えたJSONファイル。オブジェクトのキーは、文字のユニコードインデックスです。各キーは、ポリリンの配列にマッピングします。ポリラインはポイントの配列です。ポイントは、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の最初の2つの漢字「一」と「丁」が含まれています。
ハーシーフォントは、開発されたベクトルフォントのコレクションですc。 1967年、海軍兵器研究所のアレン・ビンセント・ハーシー博士は、もともと初期のカソードレイチューブディスプレイのベクトルを使用してレンダリングするように設計されています。フォントは公開されており、使用制限はほとんどありません。ベクトルフォントは、2つまたは3つの次元で簡単にスケーリングおよび回転します。その結果、ハーシーフォントは、コンピューターグラフィックス、コンピューター支援設計プログラム、そして最近ではレーザー彫刻などのコンピューター支援の製造アプリケーションで広く使用されています。 (ウィキペディア)
このリンクは、ハーシーフォントを解析する方法の概要を示しています。また、Lingdong-/P5-Hershey-JSで私自身の実装を見つけることができます。
ストロークファイルと比較して、ハーシーフォントは何倍もコンパクトですが、正確な座標もあります。
事前に生成されたシングルラインフォントの使用にのみ興味がある場合は、次の場所でそれらをつかむことができます。
注記:
Heiti.hf.txtとKaiti.hf.txt 、もともと独自のmacosシステムフォントSTHeitiとSTKaitiに基づいていました。現在、オープンソースの代替品に置き換えられています。
カスタムTTF/TTCファイルから新しいシングルラインフォントを生成する場合は、最初に次のコマンドを使用して、JSONエンコードされたストロークファイルを生成します。
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 、含めるユニコード文字の範囲を指定します。デフォルト値は0x4e00および0x9fefで、すべての「CJK IDEOGRAPH」グリフが含まれています。ngradient 、画像をスキャンするために使用されるさまざまな勾配の数です。 ngradient = 1では、0 4 、45°、90°のストロークのみがスキャンされ、 2では、 atan(1/2) 3 atan(1/3) 、 atan(1/4)の斜面も含まれています。デフォルトは2です。output :出力ファイルを書き込むパス。これが指定されていない場合、プログラムはstdoutに書き込み、 > (情報)と| (情報)を使用して出力をリダイレクトできます。大きなファイルを生成する前に、小さな文字セットでいくつかのクイックテストを行い、さまざまなフォントがどのように発生するかを比較し、パラメーターを調整することが役立ちます。次のコマンドは、コンピュータービジョンの結果を並べて視覚化して、このプロセスを促進します。
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
