web-dev-qa-db-ja.com

OpenCV検出番号

IPhoneでOpenCVを使用していて、画像内の数値を検出する必要があります。画像を小さい画像に分割して、各画像に1つだけの数値(1〜9)を割り当てます。すべての数字は印刷され、手書きではありません。

OpenCVで数値を把握するための最良のアプローチは何でしょうか?

UPDATE:

数字を見つけて抽出しました。彼らはこのように見えます:

http://img198.imageshack.us/img198/5671/101ht.jpg
http://img824.imageshack.us/img824/539/606yu.jpg

それらが抽出されると、同じサイズになります。私はたくさんの画像を保存し、それらをOCRディレクトリに配置して、それらを数値に分類しています。例:ocr/1/100.jpg 101.jpg ....およびocr/2/200.jpg 201.jpg ....

次に、基本的なOCRチュートリアルと同じアプローチを使用しました: http://blog.damiles.com/?p=9

しかし、私はiPhone用にプログラミングしていて、C++コード(コンパイル時のエラーなど)を使用できず、highguiにアクセスできません。

私はcvMatchTemplate()を使用して一連の画像を照合しましたが、かなりうまくいかないようです...

私が試すことができる他のアイデアはありますか?

20
Linus

まず、主成分分析(PCA)、フィッシャーの線形判別分析(LDA)、およびサポートベクターマシン(SVM)について読んでください。これらはOCRに非常に役立つ分類方法であり、C++、Python、C#などを含むあらゆる言語のライブラリがあります。

OpenCVにはすでに PCA および SVMs の優れた実装が含まれていることがわかります。 OCRのOpenCVコード例は見たことがありませんが、顔分類の修正バージョンを使用して文字分類を実行できます。 OpenCVの顔認識コードの優れたリソースは このWebサイト です。

数字が印刷されている場合、ジョブは非常に簡単です。一致する機能のニースセットを理解する必要があります。数字が1つのフォントである場合は、このアプローチで回避できます。

  • 数を抽出する
  • 境界ボックスを見つける
  • 画像を10x8程度に縮小し、アスペクト比に合わせます
  • 小さなトレーニングセットに対してこれを行い、各数値の「平均」画像を撮ります

  • 新しい画像の場合は、上記の手順に従いますが、最後の手順は、数値テンプレートごとの画像の絶対的な違いです。次に、差分の合計(差分画像のピクセル)を取得します。最小のものはあなたの番号です。

上記はすべて基本的なOpenCV操作です。

4
RobAu

多分最もシンプルで便利な方法は、mlアルゴリズムとしてsvmを使用することです http://opencv.willowgarage.com/documentation/cpp/support_vector_machines.html と特徴ベクトルとして灰色の画像。

2
Alex Hoppus

基本的にあなたの問題は、特徴ベクトルを分類することです。これは、いくつかの前処理ステップの後のピクセル強度のセットです。たとえば、このタスクには任意の分類子を使用できます。ニューラルネットワーク。OpenCV内にC実装が必要です。また、サポートベクターマシン用のC libsvmライブラリを試すこともできます。

この問題に関連する 良いサイト があり、多くの論文とトレーニングデータベースがあります。

2
crenate

目的のC++? .mファイルの名前を.mmに変更すると、iPhoneプロジェクトでc ++を使用できるようになります。

1
melps

畳み込みニューラルネットワークは、手書きの数字に最適なアルゴリズムです。これらはUSPSなどのほとんどのシステムに実装されています。アルゴリズムを説明するいくつかの論文を次に示します。 http://yann.lecun.com/exdb/lenet/

1
Krish

Tesseractは、iPhoneですぐに利用できる素晴らしい無料のOCRエンジンでもあり、独自のトレーニング画像セットを使用できます。 http://tinsuke.wordpress.com/2011/11/01/how-to- compile-and-use-tesseract-3-01-on-ios-sdk-5 /

0
bellkev

これは素晴らしい オープンソース 、iPhone上のORCDemoです。

0
shihongzhi

OpenCV-Pythonのシンプルな数字認識OCR

これはあなたを助けるかもしれません。 OpenCV APIはどちらも同じであるため、コードをPython=からC++に変換することは難しくありません。

0
divanshu

HOG + SVM(カーネルで遊んでみてください)

0
Alex Hoppus