forked from faxocr/kocr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
194 lines (131 loc) · 6.13 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#
# README / KOCR
#
* 説明
簡易OCRエンジンです。手書き文字を認識することが出来ます。内部では、
あらかじめ登録された手書き文字データベースとの類似画像検索を行い、
もっとも類似する文字のクラスを返すことで、文字読み取りを行います。
再学習は容易で、さまざまな用途に対応できます。また、オープンソース
形式で開発されており、自由に利用が可能です。
なお、複数文字の認識も可能です。
また、コンパイル時のオプションで、認識アルゴリズムをCNN、SVM、最近傍法
で切り替えることが可能です。なお、最近傍法のデータベースファイルは、
拡張子.dbですが、SVM法は拡張子.xmlとなっています。下記は、適宜、読み
替えてご利用下さい。
* インストール
まず、OpenCVをインストールして下さい。linuxであれば、下記を実行すると
良いはずです。
# apt-get install libcv-dev
# apt-get install libhighgui-dev
# apt-get install libcvaux-dev
そのうえで、srcディレクトリでmakeして下さい。SOLVER=CNNを指定するか
何も指定しないとCNNバージョンがコンパイルされます。
$ cd src
$ make
make時にSOLVER=SVMを指定するとSVMバージョンでコンパイルされます
$ make SOLVER=SVM
SOLVERにCNN, SVM以外の文字を指定すると最近傍法版がコンパイルされます
$ make SOLVER=OTHER
- システムへのインストール(/usr/local 以下にインストールされます)
$ make install
- インストール先を変える場合
$ make install PREFIX=/usr
* 使い方
[CNN]
- 学習済みの重みファイルと読ませたい文字列を当てると、認識結果を返します
$ ./kocr ../databases/cnn-num.bin ../images/samples/sample-img-6.pbm
- 重みファイルと画像リストファイルを与えると性能評価を行います(未実装)
$ ./kocr ../databases/cnn-num.bin ../images/faximg/list-num.txt
学習及び重みファイルの作成についてはpythonを用いて行います(後述)
[SVM, 最近傍法]
- 手書き文字のサンプルを学習させ、「データベースファイル」を作ります
データベースファイルの拡張子はSVMなら.xml、最近傍法なら.dbとなります
$ ./kocr ../images/faximg/list-num.txt
3098 images found
extracting features...
extraction completed...
database file is generated: ../images/faximg/list-num.db
$
- データベースファイルと読ませたい文字画像を与えると、結果を返します
$ ./kocr ../images/faximg/list-num.db ../images/samples/sample-img-6.pbm
loading database file: ../images/faximg/list-num.db
../images/samples/sample-img-6.pbm
Recogized: 6 (1007.498883)
$
- データベースとアルゴリズムの性能評価を行うことも出来ます
$ ./kocr ../images/faximg/list-num.db
loading database file, ../images/faximg/list-num.db...
starting leave-one-out testing...
Recog-rate = 0.991285 (= 3071 / 3098 )
$
* 画像リストファイル
画像リストファイルは、2種類のフォーマットに対応しています。
i) 画像ファイル名とクラス名をスペース区切りにする (gocr形式)
$ cat db.lst
db_0031_4b8dd78b.pbm 1
db_0032_4b8dd78c.pbm 2
db_0033_4b8dd78c.pbm 3
db_0034_4b8dd78d.pbm 4
db_0035_4b8dd78d.pbm 5
ii) ファイル名の先頭にクラス名を埋める (kocr形式)
$ cat list-num.lst
0-001-20100420090002-blockImg-close_aftercare.png
0-001-20100513090002-blockImg-close_aftercare.png
0-001-20100513090002-blockImg-perception_female.png
0-001-20100513090002-blockImg-perception_male.png
0-001-20100514085002-blockImg-perception_female.png
いずれの場合も、.db拡張子の付いたデータベースファイルを作成します。
* 学習及び重みファイルの作成について
pythonのDeep Learning用ライブラリKerasを用いて学習を行います。
詳しくはlearningフォルダのREADME.mdをご覧ください。
* ファイル一覧
README このファイル
src/ ソースディレクトリ
/Makefile Makefile
/main.cpp main
/kocr.cpp OCRエンジン本体
/kocr.h OCR用ヘッダ
/subr.cpp 画像処理サブルーチン
/subr.h 画像処理サブルーチン用ヘッダ
/Labeling.h 画像処理サブルーチン用ヘッダ
/cropnums.cpp 文字切り出しルーチン
/cropnums.h 文字切り出しルーチン用ヘッダ
/kocr_cnn.cpp CNN利用時のエンジン本体
/kocr_cnn.h CNN利用時のOCR用ヘッダ
/forward_cnn.h CNNの認識部
images/ 文字画像ディレクトリ
/erroneous 読み取り困難画像例
/numbers 手書き0~9
/09db 手書き0~9
/mbsdb 手書○×△
/mbscdb 手書○×△✓
/iddb
/idocrdb
/sample-ocrb OCRBフォントファックスデータ
/sample-sf
/numocrb /numbers と /sample-ocrb をマージしたもの
/error システムのエラー出力用
/samples 読み取りテスト用サンプルファイル
* 外部API
[CNN]
Network *kocr_cnn_init(char *filename);
kocr利用開始。重みファイル(filename)を読み込んだCNN返す。
char *kocr_recognize_image(Network *net, char *filename);
画像ファイルを認識する。返値は認識した文字列。
void kocr_cnn_finish(Network *);
kocr利用終了。CNNが確保しているメモリを解放する。
[SVM]
CvSVM *kocr_init(char *filename);
kocr利用開始。学習済みのSVMを返す。
char *kocr_recognize_image(CvSVM *db, char *fname);
画像ファイルを認識する。返値は認識した文字列。
void kocr_finish(CvSVM *db);
kocr利用終了。SVMを解放する。
[最近傍法]
feature_db *kocr_init(char *filename);
kocr利用開始。db_load()した結果を返す。
今のところ実体はdb_load()しているだけ。
char *kocr_recognize_image(feature_db * db, char *fname);
画像ファイルを認識する。返値は認識した文字列。
void kocr_finish(feature_db *db);
kocr利用終了。DBを解放する。