読者です 読者をやめる 読者になる 読者になる

CNNをもちいて画像に含まれる文字の認識を行う

読む論文:Reading text in the wild with convolutional neural networks [pdf] [1]

概要

  • CNNを用いて画像の中の文字の場所特定と認識をする。
  • モデルの訓練に利用したデータは人間が手でいちいち正解ラベルをつけたものではない。

Text spotting とは

以下のOxford Univ. のページより。物体認識と基本的な流れは同じで、テキストの候補領域をさがしだしてそこに含まれる文字列を認識、ということ。

Visual Geometry Group Home Page

昔は紙に書かれた白黒文字とかを認識していたけれど、 現実では斜めだったり色が付いていたりで単純に昔の方法を適用するわけにはいかない。

提案手法の流れ

  1. 文字が含まれる候補領域の選択
  2. 候補領域をフィルタリングして文字の含まれる領域と枠数を調整
  3. 候補領域に含まれる文字を認識

以下、各ステップについて。

ステップ1: 候補領域の選択

bounding boxで文字の含まれる領域を切り出していく。斜めの領域とかはなし。適合率と再現率のトレードオフがでてくるが、あくまで候補領域を選択していくのでここで正解データを落としてしまうくらいならざっくばらんでもいいから正解はなるべく含むように(再現率を高く)したい。ここは物体認識と同じ気持ち。 この論文では物体認識の手法を文字認識にも適用している。Edge BoxesとWeak aggregate channel features detectorの二つで、これらは物体の候補領域を探し出す手法。

Edge Boxes[3]

ざっくりと枠をまたがるエッジの数が少ない場所を物体の候補領域として提示しているようだ。

# -*- coding: utf-8 -*-
import sys
sys.path.append("/usr/local/lib/python2.7/site-packages/")
import cv2

#画像を読み込み
gray = cv2.imread('1.png',0)
 
#Cannyでエッジ検出
canny = cv2.Canny(gray,40,100)
 
#結果表示と保存
cv2.imshow('window name',canny)
cv2.imwrite('1_edge.png', canny)

# キーボード入力を待ってウィンドウを閉じる
key = cv2.waitKey(0)
cv2.destroyAllWindows()
入力画像

f:id:misos:20160821215922p:plain

Edge box を使った時の物体認識のイメージ

f:id:misos:20160821215953p:plain

黄緑の枠線をまたぐエッジの数が最小になるように枠を決定する、 ガバガバすぎる説明。原文は Edge Boxes: Locating Object Proposals from Edgesにあり。

Weak aggregate channel features detector

Aggregated Channel Featuresと呼ばれる特徴量から生成した特徴をAdaboostをもちいた分類器にかけて物体認識を行う。海外の方のデモ動画とgithub

www.youtube.com

ステップ2: 候補領域のフィルタリング

上記の候補領域の提示は大概500~2000くらいの領域が切り出されてくる。実際にはこれらは重複した領域をたくさん含んでいたり文字を含んでいない領域が多数含まれるのでこれを改良していく。基本的には物体認識と同じ流れ。

Word Classification

数千の候補領域の画像を「文字がある」「文字がない」の二クラス分類にかけて候補を少なくする。 この時の特徴はHOG特徴。

Bounding Box Regression [2]

論文参照。

ステップ3: 文字認識


ICDAR(International Conference on Document Analysis and Recognition

文書画像の解析・認識に関する国際会議で毎回文字認識などのコンペティションを開いてるらしく論文ではこのコンペティションのデータを用いてテストを行っている。

[1]Jaderberg, Max, et al. "Reading text in the wild with convolutional neural networks." International Journal of Computer Vision 116.1 (2016): 1-20.

[2]Felzenszwalb, Pedro F., et al. "Object detection with discriminatively trained part-based models." IEEE transactions on pattern analysis and machine intelligence 32.9 (2010): 1627-1645.

[3] Zitnick, C. Lawrence, and Piotr Dollár. "Edge boxes: Locating object proposals from edges." European Conference on Computer Vision. Springer International Publishing, 2014.