LoginSignup
7
6

More than 5 years have passed since last update.

Deep Learningでフォントを拡張する

Last updated at Posted at 2018-06-03

概要

英語にしか対応していないフォントでも、Deep Learningで日本語もそれっぽく生成(拡張)させることができる。

学習結果

Berlin Sans FB

学習データ(英数字記号)を入力する

00_yu_gothic_12pt.png

学習結果(英数字記号)

predict_sample.jpg

未学習データ(漢字ひらがな)を入力し、フォントを拡張する。

test.png

predict_01.jpg

Bodoni MT Black

学習用フォント

02_Bodoni_MT_Black_12pt.png

フォント拡張

predict_02.jpg

Bradley Hand ITC

学習用フォント

03_Bradley_Hand_ITC_12pt.png

フォント拡張

predict_03.jpg

デモを実行する

以下を実行すると、Berlin Sans FB風フォントで日本語フォントを表示する。
生成結果はresultフォルダにも保存されている。

$ ./predict.py Model/01/*model Model/01/param.json Font/test.png

画像データでは使いにくいという人のために、SVG形式で出力する機能もある。
以下を実行することで、SVG形式に変換したデータが入力画像と同じフォルダに保存される。

$ ./jpg2svg.sh result/predict.jpg

実行結果は以下のようになる。

svg.PNG

動作環境

  • Ubuntu 16.04.4 LTS ($ cat /etc/issue)
  • Python 3.5.2 ($ python3 -V)
  • chainer 4.0.0 ($ pip3 show chainer | grep Ver)
  • numpy 1.14.2 ($ pip3 show numpy | grep Ver)
  • cupy 4.0.0 ($ pip3 show cupy | grep Ver)
  • opencv-python 3.4.0.12 ($ pip3 show opencv-python | grep Ver)

チュートリアル

1. データセットを作成する

実行に必要なデータは入力画像正解画像である。チュートリアルではyu gothicを入力画像とし、Berlin Sans FBを正解画像としている。以下の画像をcreate_dataset.pyでランダムに取得して学習(テスト)データを任意の数だけ生成する。Berlin Sans FB以外にも色々フォントを用意しているし、画像の形状などを揃えれば別のフォントでも生成可能。

yu gothic  00_yu_gothic_12pt.png 
Berlin Sans FB 01_Berlin_Sans_FB_12pt.png

以下を実行する。

$ ./create_dataset.py Font/00_yu_gothic_12pt.png Font/01_Berlin_Sans_FB_12pt.png

resultフォルダが作成され、以下のデータが保存されていることを確認する

  • dataset.json
  • test_128x128_000100.npz
  • train_128x128_000900.npz

dataset.jsonは作成されたデータの情報が格納されている。

$ cat result/dataset.json
{
    "conv_font": "Font/01_Berlin_Sans_FB_12pt.png",
    "font_num": 10,
    "font_size": 64,
    "img_num": 1000,
    "img_size": 128,
    "out_path": "./result/",
    "pre_font": "Font/00_yu_gothic_12pt.png",
    "round": 1000,
    "train_per_all": 0.9
}

test_128x128_000100.npztrain_128x128_000900.npzは学習に使用するテストデータと学習データ。それぞれの中身を確認するには以下を入力する。

$ Tools/npz2jpg.py result/test_128x128_000100.npz

npz2jpg.jpg

表示された画像の上段が入力画像(yu_gothic)で、下段が正解画像(作成したいフォント)。その他Toolsの機能を利用したい場合はTools/README.mdを参照されたい。

2. 学習する

以下を実行する

$ ./train.py

学習完了後、resultフォルダに以下のデータが保存されていることを確認する

  • *.log
  • *.model
  • *_10.snapshot
  • *_graph.dot
  • *_train.json
  • loss.png

3. 学習で作成されたモデルを使用する

$ ./predict.py result/*.model result/*_train.json Font/test.png

その他のパラメータ設定は-hで確認する。デモと同様のパラメータにしたい場合はModelにあるparam.jsonを参考にするとよい。

おまけ

Bradley Hand ITCなどはどうしてもフォントが薄い色で生成されがち。これをDeep Learningで修正してもいいが、普通にフィルターを通した方が楽かと。詳細は以下を参照されたい。

薄い画像をハッキリさせる

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6