Skip to content

ka10ryu1/fontconv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

概要

英語にしか対応していないフォントでも、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を参考にするとよい。