文章で、書体をつくる。
「丸くて太いポップ体」「和風の毛筆で力強い」のような一言から、
そのまま打てるフォントファイル(.ttf)を作ります。
作った書体
いずれも、下の文章だけを入力して自動で作ったものです(漢字入り約3,200字)。
表示されない文字(対応外の記号など)は、お使いの端末の標準フォントで代わりに表示されます。
しくみ
3つの段階です。
文章 → スタイルの数値「太さ・線の強弱・丸み・払い・ゆらぎ」など8つの数値に直します。似た依頼を探して小さな言語モデルに見せる方式で、パソコン内だけで動きます(外部サービスは使いません)。
数値 → 近い実在書体の特徴を混ぜるオープンライセンス(SIL OFL)の日本語フォント97本で学習したネットワークが、数値に近い書体の特徴を混ぜ合わせます。
文字の骨格 → 字形 → フォント文字ごとの骨格(線の通り道)から字形を描き、輪郭を取り出して .ttf に組み立てます。学習に使っていない漢字にも使えます。
どのくらい合っているか
測った数字をそのまま載せます。
| 測ったこと | 結果 | 読み方 |
文章 → 数値の誤差 (テスト20問) | 0.209 → 0.116 | 標準値のままより約45%減。ただし正解は作者が付けた主観値で、厳密な評価ではありません |
字形の一致度(IoU) 学習した書体 × 見たことのない漢字 | 0.583 | 1.0 が完全一致 |
字形の一致度(IoU) 見たことのない書体 × 見たことのない漢字 | 0.488 | 「骨格を太らせただけ」の基準線は 0.438。差は +0.05 と小さめ |
生成にかかる時間 (漢字入り約3,200字) | 約2〜3分 | パソコン1台・GPU なし |
できないこと
- 新しい字形の発明ではありません。実在する書体の特徴を混ぜて作っています。
- 大きく拡大すると粗さが出ます。字形は96ピクセルで作ってから輪郭にしているため、本文サイズ向きです。英字の字間に崩れも残っています。
- 言葉の理解は限定的です。小さな言語モデルなので、変わった言い回しでは外れることがあります。
- 書体の「強弱」「横幅」「丸み」「払い」は人手のラベルで学習の手がかりにしています(自動測定が効かなかったため)。
- Windows のアプリ上での表示確認は、まだ十分ではありません。
権利について
このページの書体データには、次の条件があります。
- 文字の骨格に KanjiVG(© Ulrich Apel、CC BY-SA 3.0)を使っています。同じ条件(CC BY-SA)での公開と、出典の表示が必要です。
- 学習には Google Fonts の SIL OFL フォントを使いました。商用での配布・販売の前には、権利の確認が必要です。
- 英数字の骨格は Hershey フォント(パブリックドメイン)です。
権利の確認が済むまで、フォントファイル(.ttf)の配布はしていません。いまは試作の段階です。名前・運営・公開方法は決まっていません。
自分のパソコンで作る
文章を変えれば、別の書体になります。
python learned_font.py "上品で細い明朝体" -o out/min --kanji # 学習型(漢字も)
python fontgen.py "丸くて太いポップ体" -o out/pop # ペン方式(速い)