opencv3で文字領域検出しようとしてハマった話「mac」

opencvははじめはmakeしたりしたけどうまくいかないので、brewで入れた
拡張機能はcondaなどでも提供されてないのです。

ソースここ
https://github.com/miyamotok0105/opencv3_textdetection

結論から言うとチューニングが大変。もっと簡単にいくよとかありましたら意見お待ちしてます。
![detect_2016-10-21 23.16.22.png](https://qiita-image-store.s3.amazonaws.com/0/64334/41890889-8783-667e-09da-1a4b7ff06e20.png)

やりたかったことこいつ
[文字領域検出用のERFilterの使い方](http://qiita.com/TaroYamada/items/3334e879cf978740b542)

opencvで領域検出できるらしい。
opencvのバージョン３でさらに拡張機能なのですね。
まだちゃんとテストできてなかったりする機能はこっちに入ってるそうな。

公式
https://github.com/opencv/opencv_contrib

入れてみると

python textdetection.py scenetext_word01.jpg 


```python:textdetection.py
       A demo script of the Extremal Region Filter algorithm described in:
       Neumann L., Matas J.: Real-Time Scene Text Localization and Recognition, CVPR 2012

Traceback (most recent call last):
  File "textdetection.py", line 28, in <module>
    channels = cv2.text.computeNMChannels(img)
AttributeError: module 'cv2.text' has no attribute 'computeNMChannels'
```


--with-contribオプションが拡張機能なわけなんだけども
C++
ムッチャ何回もbrew入れて消してどれなら動くんだと。
brew install opencv3 --c++11 --with-tbb --with-gstreamer --with-opengl --with-openni --with-contrib


で、こいつ。どうしたらいいのだ。。。
library not found for -lippicv


解決したページ
https://www.learnopencv.com/install-opencv-3-on-yosemite-osx-10-10-x/
モリックさん　ありがとう。

ippicvを探す
find /usr/local -name "libippicv.a"
ここが見つかった場合
/usr/local/Cellar/opencv3/3.1.0_3/share/OpenCV/3rdparty/lib/libippicv.a
  
リボリックリンクを貼る
ln -s /usr/local/Cellar/opencv3/3.1.0_3/share/OpenCV/3rdparty/lib/libippicv.a /usr/local/lib/

#こんなのでちゃった場合

##fatal error: 'opencv2/text.hpp' file not found
include  "opencv2/text.hpp"

こんな感じでパスを通す。
~/.bashrc
export PKG_CONFIG_PATH=/usr/local/opt/opencv3/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opt/opencv3/lib

##ValueError: too many values to unpack
findContoursはバージョンによって戻り値が変わってるようで、
_, をはじめに追加が必要。

古いバージョン
contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

新しいバージョン
_, contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)


#結果
太文字はなんとなくいける
![detect_2016-10-21 22.55.02.png](https://qiita-image-store.s3.amazonaws.com/0/64334/edb7a9e5-34c3-e7dc-d466-76d561b65c2e.png)
![detect_2016-10-21 23.02.23.png](https://qiita-image-store.s3.amazonaws.com/0/64334/f273f059-b4c8-90f1-00a3-3f0f6a3bed2d.png)
![detect_2016-10-21 23.16.22.png](https://qiita-image-store.s3.amazonaws.com/0/64334/80e340ee-178c-5147-f374-8d0b2d035c7b.png)
![detect_2016-10-21 23.25.06.png](https://qiita-image-store.s3.amazonaws.com/0/64334/be24e005-f818-fe89-9186-7e7cb82992ab.png)
![detect_2016-10-21 23.25.12.png](https://qiita-image-store.s3.amazonaws.com/0/64334/d80f4864-fe96-4aaa-064e-1683c93a6c78.png)
![detect_2016-10-21 23.27.55.png](https://qiita-image-store.s3.amazonaws.com/0/64334/bb810a7b-f0b9-ffb7-da51-7ff873de9a82.png)
![detect_2016-10-21 23.30.10.png](https://qiita-image-store.s3.amazonaws.com/0/64334/bda011fd-2a09-67e4-a568-ac4517b39249.png)
![detect_2016-10-21 23.31.52.png](https://qiita-image-store.s3.amazonaws.com/0/64334/1e9ef697-c77e-f349-2b21-845e27ae05ac.png)
![detect_2016-10-21 23.32.46.png](https://qiita-image-store.s3.amazonaws.com/0/64334/744818dd-cca9-432e-a6e9-b4e4e988a7c0.png)
![detect_2016-10-21 23.33.09.png](https://qiita-image-store.s3.amazonaws.com/0/64334/d4dd3c26-6eec-308e-324b-19cb25a79e3d.png)

590 590画像で。
部分的に認識されてる。
![detect_590_1fc36f6427e8a492511dccee47b8607e.png](https://qiita-image-store.s3.amazonaws.com/0/64334/60acdeb9-1044-ab1e-e11e-554c9825bf53.png)
![detect_590_3b6a5931c91204b45d5e7446b51d706c.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/8b5436cc-8633-6977-205f-9f5665c3ed76.jpeg)
![detect_590_32ed93a61d856e376ae52b616d63f453.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/0aaf6a9d-900e-550e-a320-7b7aff13fc3d.jpeg)
![detect_590_b.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/31fe2849-2997-7413-36dd-ada94511b12e.jpeg)
![detect_590_rirekisho_sp.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/dcdd8e99-7ed0-6e3e-6cc3-cf83d64567ba.jpeg)
![detect_590_rirekisyo.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/65c466d3-cee3-ca20-e5af-a157342f9787.jpeg)
![detect_590_rirekisyosample.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/aa747295-ea8b-af58-5238-bdea657e639e.jpeg)
![detect_590_ダウンロード.png](https://qiita-image-store.s3.amazonaws.com/0/64334/6138ce0f-8147-de85-4857-3fc830b9a7aa.png)
![detect_590_法人設立届サンプル（市町村）画像.png](https://qiita-image-store.s3.amazonaws.com/0/64334/9c0ffc84-5765-a3ce-17ef-c67b504cfdb1.png)
![detect_590_法人設立届出書サンプル（国税）画像.png](https://qiita-image-store.s3.amazonaws.com/0/64334/e8ffb8e0-42c9-27a3-d6e2-b973a8f382f1.png)


256 256に変換してみた。
![detect_256_1fc36f6427e8a492511dccee47b8607e.png](https://qiita-image-store.s3.amazonaws.com/0/64334/04cc7278-d8fd-fb71-37e1-39d244bd41eb.png)
![detect_256_3b6a5931c91204b45d5e7446b51d706c.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/52f89e1e-ec96-011d-a1ef-bac046dc944f.jpeg)
![detect_256_32ed93a61d856e376ae52b616d63f453.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/9f1267af-750d-f4f0-0a94-e8285765cb81.jpeg)
![detect_256_b.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/4936ae47-c245-9b8f-43c5-3beb21a01963.jpeg)
![detect_256_rirekisho_sp.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/5c578846-04d4-25fb-0f0f-d41bc4f003ac.jpeg)
![detect_256_rirekisyo.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/b951c9f2-eea6-4b62-3c35-d34cd74a287f.jpeg)
![detect_256_rirekisyosample.jpg](https://qiita-image-store.s3.amazonaws.com/0/64334/0c4be6c1-55cb-a4b9-ee7c-bf59b5187a2e.jpeg)
![detect_256_法人設立届サンプル（市町村）画像.png](https://qiita-image-store.s3.amazonaws.com/0/64334/4d5d7dde-0dad-77b4-08f8-99f940a3765c.png)
![detect_256_法人設立届出書サンプル（国税）画像.png](https://qiita-image-store.s3.amazonaws.com/0/64334/df55da54-2772-2a82-8650-8c72bd6de9ed.png)


#python版はまだエラーになってる
わかる方いましたら連絡お待ちしています。

cvのバージョン確認方法

python
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>> 

ビルド時に使用する pkg-config のパス (PKG_CONFIG_PATH)
共有ライブラリのパス (LD_LIBRARY_PATH)

.bashrcに追記
export PKG_CONFIG_PATH=/usr/local/opt/opencv3/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opt/opencv3/lib

pythonのパスを通す
http://qiita.com/massaru129/items/f065f79b1322a82edb1d


#代替え案


##OCR
https://github.com/rishirdua/ocr-recognition/blob/master/Readme.md

##r-cnn

End-to-End Text Recognition with Convolutional Neural Networks
https://crypto.stanford.edu/~dwu4/papers/ICPR2012.pdf

END-TO-END TEXT RECOGNITION WITH CONVOLUTIONAL NEURAL
NETWORKS
https://crypto.stanford.edu/~dwu4/papers/HonorThesis.pdf
----------

opencv公式　erfilter
http://docs.opencv.org/3.0-beta/modules/text/doc/erfilter.html
#void computeNMChannels(InputArray _src, OutputArrayOfArrays _channels, int _mode)

色情報とかハフ変換とか組み合わせて、最終的にSVMとかで学習させた方がよいのでは
こういう濃淡のヒストグラムを用いる手法でも結構いけるのでは
http://www.aso.ecei.tohoku.ac.jp/publication_data/509.pdf

opencv例
http://stackoverflow.com/questions/24385714/detect-text-region-in-image-using-opencv

#おまけ
c++
http://www.bohyoh.com/Books/MeikaiCPP01/index.html

opencvサンプル
http://opencv.jp/cookbook/opencv_img.html

特徴量抽出
http://qiita.com/hmichu/items/f5f1c778a155c7c414fd

ocr
http://stackoverflow.com/questions/28591117/how-do-i-segment-a-document-using-tesseract-then-output-the-resulting-bounding-b
最近傍補間（ニアレストネイバー　Nearest neighbor）等
http://imagingsolution.blog107.fc2.com/blog-entry-142.html