オープンソースで作るスマホ文字認識アプリ

58,344 views
57,951 views

Published on

OpenCV・NHocrを使った文字認識アプリの作り方を解説します。

Published in: Technology
0 Comments
106 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
58,344
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
217
Comments
0
Likes
106
Embeds 0
No embeds

No notes for slide

オープンソースで作るスマホ文字認識アプリ

  1. 1. 有限会社 来栖川電算 山口陽平オープンソースカンファレンス名古屋2012
  2. 2. あじぇんだ  自己紹介 はじめに 紹介するOSS 設計 実装 ??? まとめ 参考文献
  3. 3. 自己紹介  山口陽平有限会社来栖川電算
  4. 4. 山口陽平  プログラミング言語・型理論の研究者  世界を美しく記述することを夢見る33歳  名古屋工業大学大学院出身  未踏ソフトウェア経験 人を驚かせるのが好き  Nativeコードより速いJavaコード  1日でHaskellを作る  ハードリアルタイムJavaVM  1000台越え構成のペタバイト級分散DB  PC上で秒間1000万クエリ処理できるKVS ※あくまでもイメージです。 実物に髪の毛はありません。
  5. 5. 有限会社来栖川電算  概要  名古屋工業大学発ベンチャー(2003年) 目的  ソフトウェアの品質・生産性向上 スタッフ  役員3人・正社員7人・アルバイト9人  データ作成4人・家政婦2人  IPA未踏ソフトウェア経験者多数 社風  職人・挑戦・自由 イオン千種・名大病院・名工大の間  昼食・夕食・飲み会は無料
  6. 6. はじめに  何を作るの? 準備するもの 取り組む姿勢
  7. 7. 何を作るの?  スマホで撮影した写真から単語を抽出するアプリ
  8. 8. 準備するもの  スマホ  開発環境  Android 2.3  サーバと同じソフト サーバ  android-sdk_r18  Scientific Linux 6.2  Eclipse Indigo JavaEE IDE  Java SE 7 for Web Developers.  CDT  Apache Tomcat 7.0  ADT  OpenCV-2.2.0  O2-tools-2.00 ここを紹介するよ!  nhocr-0.20
  9. 9. 取り組む姿勢  考慮すること  動くこと  分かりやすさ 考慮しないこと  認識精度  安全性  信頼性  可用性  拡張性
  10. 10. 紹介するOSS  OpenCV NHocr & O2-tools
  11. 11. OpenCV  元はインテル製の画像処理ライブラリ  APIが単純で割と使いやすい  様々な画像(※GIF除く)の読み書きに便利  様々な分野のアルゴリズムを網羅  画像処理・特徴抽出とディスクリプタ抽出  クラスタリング・多次元空間探索・オブジェクト検出  ビデオ解析・カメラキャリブレーション・姿勢推定  ステレオ・機械学習 サイト  【公式】http://opencv.willowgarage.com/  【日本コミュニティ】http://opencv.jp/
  12. 12. NHocr & O2-tools  日本語OCR・画像処理ライブラリ  一文字認識の認識精度はわりとよい  一応、行認識もできる  コマンドラインツールがある  画像ファイルの文字認識・フォントからの辞書作成 あ  本格的に使うにはわりと改良がいる  コード量が少ないので難しくはない サイト  【後藤研究室】http://www.imglab.org/ 注意  一部をコメントアウトしないとビルドできない場合が
  13. 13. 設計 概要(もう一度) スマホアプリ文字認識サービス文字認識コマンド
  14. 14. 概要  スマホで撮影した写真から単語を抽出するアプリ
  15. 15. スマホアプリ  マッシュアップでシンプルに!  主な作り込みは単語抽出(言語処理)だけ
  16. 16. 文字認識サービス  中継するだけ!  主な作り込みは文字認識コマンドの中
  17. 17. 文字認識コマンド  OepnCV・NHocrのAPIはシンプルで使いやすい!  難しいのは文字領域抽出だけ
  18. 18. 実装  画像読込 二値化文字領域抽出 文字認識 XML出力 言語処理
  19. 19. 画像読込  OpenCVなら画像の読み書きが簡単!  BMP DIB JPEG JPG JPE PNG PBM PGM PPM SR RAS TIFF TIF #include <opencv/cv.h> #include <opencv/highgui.h> int main() { IplImage* tImage = cvLoadImage("input/club_adriana.jpg", CV_LOAD_IMAGE_COLOR); cvNot(tImage, tImage); cvSaveImage("output/not_club_adriana.png", tImage); cvReleaseImage(&tImage); return 0; }
  20. 20. 二値化  OpenCVには基本的な二値化アルゴリズムがある!  cvThreshold:与えた閾値で二値化する。(大津の方法も)  cvAdaptiveThreshold:近傍の平均から閾値を決める。 #include <opencv/cv.h> #include <opencv/highgui.h> int main() { IplImage* tImage = cvLoadImage( "input/club_adriana.jpg", CV_LOAD_IMAGE_GRAYSCALE); ライトが IplImage* tBinarizedImage = cvCreateImage( 当たって cvGetSize(tImage), tImage->depth, tImage->nChannels); いるとな cvAdaptiveThreshold(tImage, tBinarizedImage, 256, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 19); かなかう cvSaveImage("output/binarized_club_adriana.png", まくいか tBinarizedImage); ない cvReleaseImage(&tBinarizedImage); cvReleaseImage(&tImage); return 0; }
  21. 21. 文字領域抽出  ヒストグラムで文字がある場所を見つけるぞ!  ぐるぐるループしながら四則演算するだけ  行の上下に余分なものが写っているとうまくいかない
  22. 22. 文字認識  #include <opencv/cv.h> NHocrなら文字認識が簡単! #include <opencv/highgui.h> #include <siplib.h>  ①辞書の選択・初期化など #include <nhocr.h> int main() { NHrec tNHrec;  ascii+(英数字) tNHrec.setlibdir(  jpn(日本語) (char*) "/usr/local/moji/nhocr-0.20/share/"); tNHrec.setdiccodes((char*) "ascii+");  ユーザ辞書 tNHrec.open(); IplImage* tImage = cvLoadImage("input/Ao.png",  ②画像形式の変換 CV_LOAD_IMAGE_GRAYSCALE); SIPImage* tSIPImage = createSIPImage(tImage);  OpenCV ⇒ NHocr int tCount = 10; RecResultItem tCondidates[tCount];  ③文字認識 tNHrec.rec_character(tSIPImage, 0, 0, tImage->width, tImage->height, tCondidates);  入力 for (int tIndex = 0; tIndex < tCount; tIndex++)  文字の場所 printf("%c:%f¥n", (char)tCondidates[tIndex].id, tCondidates[tIndex].dist);  出力 sip_DestroyImage(tSIPImage); cvReleaseImage(&tImage);  {文字:距離, ..., 文字:距離} tNHrec.close(); return 0; }
  23. 23. XML出力  各文字領域は複数の候補を持つ 各候補は文字と距離を持つ <result> <candidates> <candidate><character>H</character><distance>1</distance></candidates> <candidate><character>4</character><distance>2</distance></candidates> </candidates> <candidates> <candidate><character>O</character><distance>1</distance></candidates> <candidate><character>0</character><distance>2</distance></candidates> </candidates> <candidates> <candidate><character>M</character><distance>1</distance></candidates> <candidate><character>m</character><distance>2</distance></candidates> </candidates> <candidates> <candidate><character>U</character><distance>1</distance></candidates> <candidate><character>u</character><distance>2</distance></candidates> </candidates> </result>
  24. 24. 言語処理  様々な言語処理  距離の和が最も小さいパスを選ぶ。  文字種を限定する。  記号・数字・英字(大・小)・かな・カナ・漢字  辞書に含まれている単語だけを選ぶ。  文法にあうパスを選ぶ。  正規表現・文脈自由・自然言語
  25. 25. 簡単に使えるけどそれ以外が難しい  AdaptiveThresholdもあんまり使えないヒストグラム使った文字領域抽出が話にならない 1位だけを採用する言語処理でも話にならない
  26. 26. まだまだ利用申請できるよ!どんどんしてね! recognize.jp  WebAPIで画像をPOSTするだけ  難しいことは全部サーバでやってくれる!
  27. 27. タンゴチュウが(前より)賢くなった! 4月のrecognize.jpのアップデートで目に見えて良くなったぞ! 1年前とくらべて・・・ 4倍 の賢さだ!
  28. 28. 情 文 景 画  字 像 か 認 ら 識 の サ ーhttp://tangochu.jp ビ説明前に宣伝させて! ス
  29. 29. タンゴチュウとは  写真(情景画像)から単語を抽出  例えば メニュー チラシ お菓子のパッケージ レシート 名刺 看板 …
  30. 30. 情景画像の文字認識とは 
  31. 31. 情景画像の文字認識とは 
  32. 32. 情景画像の文字認識とは  従来のOCRとは戦場が違う  悪環境下での文字認識  手書き・様々な書体・かすれ・点描・きつい パース・統一性のない並び・逆光・陰・影・グ ラデーション・モアレなど 目指すはこんなかっこいい世界!
  33. 33. タンゴチュウ for Twitter  手軽に文字認識を体験できる! @tcfox
  34. 34. タンゴチュウ for Twitter  手軽に文字認識を体験できる!
  35. 35. タンゴチュウ for Evernote  写真の検索・整理に役立つ!
  36. 36. 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.02011年06月2011年07月2011年08月2011年09月2011年10月  4倍の賢さ・6倍の速さ  着実に進化している!2011年11月2011年12月 2012年01月  情景画像文字認識ではトップクラス2012年02月 性能推移2012年03月2012年04月
  37. 37. カスタマイズOK   棚卸し・検査・電子辞書などに  用途を限定すると非常に高精度  既に稼働していて、驚くほど高性能  出版系・測量系からも引き合いがきているぞ!Android端末への組み込みもやってるよ
  38. 38. とにかくアクセス!  萌えキャラたちも待ってるぞ!  http://tangochu.jp
  39. 39. まとめ  オープンソースを活用すれば とりあえず動くものは作れる 性能がでるかは腕次第 recognize.jpを使えば割とよい今回のスマホアプリのソースコードはダウンロードできるようにしておくよ!
  40. 40. 参考文献  リンクとか
  41. 41. 参考文献①  Scientific Linux  http://www.scientificlinux.org/ Jave SE  http://www.oracle.com/technetwork/java/ Apache Tomcat  http://tomcat.apache.org/ Android SDK & ADT (Eclipse Plugin)  http://developer.android.com/index.html Eclipse & CDT  http://www.eclipse.org/
  42. 42. 参考文献②  OpenCV  http://opencv.willowgarage.com/  【日本コミュニティ】http://opencv.jp/ O2-tool  http://www.imglab.org/p/O2/ NHocr  http://code.google.com/p/nhocr/
  43. 43. 参考文献③  recognize.jp(情景画像文字認識API)  http://recognize.jp/ 撮って文字入力(文字認識IME)  http://www.nttdocomo.co.jp/smt/service/trial/trial_app/to tte_moji/index.html タンゴチュウ(情景画像文字認識サービス)  http://tangochu.jp/ 来栖川電算  http://kurusugawa.jp/
  44. 44. ご清聴ありがとうございました どんどん賢くするので応援してね

×