Skip to content

Latest commit

 

History

History
190 lines (134 loc) · 6.61 KB

README.md

File metadata and controls

190 lines (134 loc) · 6.61 KB

概要

英語にしか対応していないフォントでも、Deep Learningで日本語もそれっぽく生成させる

学習結果

Berlin Sans FB

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

学習結果(英数字記号)

未学習データ(漢字ひらがな)を入力する。

Bodoni MT Black

Bradley Hand ITC

デモを実行する

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

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

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

$ ./jpg2svg.sh result/predict.jpg

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

動作環境

  • 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)

ファイル構成

生成方法

$ ls `find ./ -maxdepth 3 -type f -print` | xargs grep 'help = ' --include=*.py >& log.txt
$ tree >& log.txt
.
├── Font > データセット(テスト用含む)
├── LICENSE
├── Lib
│   ├── network.py > fontconvのネットワーク部分
│   └── plot_report_log.py
├── Model
│   └── 01
│       ├── Berlin_Sans_FB.model
│       ├── dataset.json
│       └── param.json
│   ├── 02
│   │   ├── Bodoni_MT_Black.model
│   │   ├── dataset.json
│   │   └── param.json
│   └── 03
│       ├── Bradley_Hand_ITC.model
│       ├── dataset.json
│       └── param.json
├── README.md
├── Tools
│   ├── LICENSE
│   ├── README.md
│   ├── Tests
│   │   ├── Lenna.bmp       > テスト用画像
│   │   ├── Mandrill.bmp    > テスト用画像
│   │   ├── test_getfunc.py > getfuncのテスト用コード
│   │   └── test_imgfunc.py > imgfuncのテスト用コード
│   ├── concat.py          > 複数の画像を任意の行列で結合する
│   ├── dot2png.py         > dot言語で記述されたファイルをPNG形式に変換する
│   ├── func.py            > 便利機能
│   ├── getfunc.py         > 各種パラメータ取得に関する便利機能
│   ├── imgfunc.py         > 画像処理に関する便利機能
│   ├── npz2jpg.py         > 作成したデータセット(.npz)の中身を画像として出力する
│   ├── plot_diff.py       > logファイルの複数比較
│   ├── png_monitoring.py  > 任意のフォルダの監視
│   └── pruning.py         > モデルの枝刈をする
├── clean_all.sh
├── create_dataset.py > 画像を読み込んでデータセットを作成する
├── jpg2svg.sh
├── predict.py        > モデルとモデルパラメータを利用して推論実行する
├── pruning.py        > モデルの枝刈をする
└── train.py          > 学習メイン部

チュートリアル

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

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

yu gothic
Berlin Sans FB

以下を実行する。

$ ./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

表示された画像の上段が入力画像(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を参考にするとよい。