HOME >> Pythonをさわってみよう > 手書き数字の自動認識 画像処理
機械学習の実感をつかむため、教本のChapter5 「手書きの文字を認識しよう」に挑戦しています。今回は手書き数字の自動認識に取り組んでいますが、まず、前処理としての画像処理について、まとめておきます。
■ 手書き数字の自動認識の概要
今回も、自分なりに理解した処理の概要についてイラストにまとめてみました。開いている教本は、以前に紹介した
です。
紹介されている方法は、教師あり学習によって作成された学習モデルを使って予測する方法です。その学習データは、カリフォルニア大学アーバイン校 ( UCI )で作成され配布された手書きの数字データセットを使用しています。このデータセットは、約1,800件の手書き画像から画像処理した特徴行列データとその正解データをセットにしたものです。そして、このデータを使って機械学習したモデルによて、予測したい数字画像より文字(数字)認識させようとする仕組みなのです。
教本では、丁寧でわかりよい説明がされていますが、多彩な処理内容と多くのオブジェクトやメソッドが出て来ているので、混乱して整理できない状態となっています。そこで、今回も理解しやすいようにと自分なりにまとめてみました。
まず、全体の流れを教本どおりに実施し、プログラムとして実行できるようにしてから、いつもの様に、いろいろな手書き文字を使って実験をしてみました。その結果としての正解率は、意外にも不合格でした。でもガッカリしていません。このシステムの仕組みを理解できたし、改良すべき点なども分かったのですが。 ・・・・・・・でも、その実力はありません!
*************************************************************
.
■ 前処理の内容
今回は、上記イラストの前処理の部分についてまとめます。ここで実施することは、画像データをコンピュータが処理できるように数字データに持って行くための整形処理を実施しています。そしてその仕上がりの形式は、教師データであるUCIのデータと同じにしておく必要があるのです。
● 手書き数字の写真の用意
右の写真のように、A4のルーズリーフに0〜9までの数字を書いて写真に取り込むことにしました。
写真の処理は、ホームページ用としていつも使用しているMacromedia のFireworks MX2004 を使用しました。そして、これをコピーして各数字毎の写真としましたが、全体の明るさは少し修正したものの、コントラストの調整やシャープ化などの処理は実施していません。
仕上がりのサイズは、約500ピクセル、約350ピクセル、50ピクセル正方形の3種類の画像とし、JPEG形式で保存しました。
● 文字画像を取り込む
文字認識をさせるために文字画像ファイルを取り込みます。
● 画像を明瞭にする
次の操作として、画像が明瞭になるように修正します。
● グレースケール化する
手書き文字認識にはカラー情報は不要ですし、邪魔となります。そこで、白黒のグレースケールに変換します。
● 画像を縮小する
手書きされた画像を認識させるためには、学習した教師データと同じサイズにしておく必要があります。そのサイズは、8×8 ピクセルの正方形の大きさです。
● 画像の明暗を反転させる
最後に教師データと合わせるために、白黒を反転させます。これが最後の画像処理となります。
■ まとめ
.
画像処理の実質的なコマンドは、上記のステップでは各1行のコマンドで実施されています。従って実際に使用する場合には、このような表示コマンドは省略できます。でも、ステップごとの処理結果をそのたびに表示しておくと、処理の結果が確認できてたので、処理の実際を理解することができました。
また、この後にも必要な処理を実施して、最終的には文字認識をするわけですが、上記の画像の場合の結果を紹介しておきましょう。
・・・・・・・・・ 自動認識の回答は”0”でした。 ・・・・・・・・
コンピュータが綺麗に描画した文字を、コンピュータは誤認識しているのです! まあ、なんとお馬鹿さんなのでしょうか。
画像認識とはこうも難しい物であることを再認識した次第です。
***********************************************************
さて、次なるステップは、処理された画像データを元に、コンピュータで画像認識が出来るように特殊なデータとして、数値化する方法を見ていくことにします。