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

木木木

Swift / Ruby on Railsなどの学習メモ。


【OpenCV バグ】i2 >= 0 && i2 < static_cast<int>(keypoints2.size()) in function drawMatches

動画からリアルタイムでBruteForceMatcherでオブジェクトを検出しようとしていて、
cv::drawMatchesで以下のエラーが出て困り果てていました。

i2 >= 0 && i2 < static_cast<int>(keypoints2.size()) in function drawMatches

バグとのことでした。 answers.opencv.org

検出対象画像とカメラ画像の順番を入れ替えるとうまくいくとのこと。
私の環境でも無事動きました。

XCode 7.3で黒背景の時でもカーソルを見やすく

7.3からbetter-xcode-ibeam-cursorが使えなくなってしまいました。

カーソルファイルの位置が変わったのが原因のようです。
以下のパスにあるファイルを、以下のファイルAssets.car に差し替えればOKです!

/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Versions/A/Resources/Assets.car

https://github.com/egold/better-xcode-ibeam-cursor/files/185722/Assets.car.zip

参考

iOSで局所特徴量AKAZEを使うまとめ

AKAZEを使って局所特徴量抽出、記述、マッチングをやってみます。
そのための勉強記事まとめ。

qiita.com

dronebiz.net

astertune.com

iOSでのAKAZE最適化

GitHub - pablofdezalc/akaze: Accelerated-KAZE Features

AKAZEで取得したのをfindHomographyでゆがみ取得する

qiita.com

[おまけ]ORBだとこちらが参考になる

pukulab.blog.fc2.com

OpenCV3.0のtraincascadeコマンドでLBP指定できない問題

分類器を作ろうとして./opencv_traincascadeコマンドに -featureType LBP を渡すと、永遠にプロセスが進まない問題。

こちらに解決策が。 github.com

openCVインストール時に、コードを並列実行するためのtbbも一緒にインストールしないといけなかったみたい。
一度OpenCVをアンインストールして、以下で再度インストール。

brew install opencv3 --with-tbb

これでOK。

LBPは学習速度がHAARに比べて非常に早く、ありがたいです。

【OpenCV3】複数の正解画像を自分で集めて物体検出器を作る(Mac)

精度の高い物体検出器の作成をしたくて、色々試しております。

前回の記事

source.hatenadiary.jp

前回は一枚の正解画像から検出器を作成しましたが、
今回は対象を数枚写真に撮り、そちらで検出器をつくります。
また、createsampleやtraincascadeコマンドの別のオプションも試してみます。

複数の正解画像をテキストファイルに書き出す

find pos/ts1 -name '*.png' -exec identify -format '%i 1 0 0 %w %h\n' {} \; > pos_ts1.txt

サンプルファイルの作成

./opencv_createsamples -info pos_ts1.txt -vec vec/ts1.vec -num 6 -w 40 -h 40

分類器の作成

 ./opencv_traincascade -data cascade/ts1/ -vec vec/ts1.vec -bg nglist.txt -numPos 5 -numNeg 2900 -w 40 -h 40

OpenCV3を使って1枚の正解画像から物体検出器を作成する(Mac)

前回のOpenCV3.0インストールに引き続き、
今回はOpen CV 3を使って物体検出器を作っていきます。

以下の記事を参考にさせていただきました。ありがとうございます。
www.pro-s.co.jp

使用しているのが古いバージョンのようで、OpenCV3と比べてパスなどが異なる箇所があったため備忘録としてメモしていきます。

1. 作業ディレクトリを作る

どこでもいいので作業ディレクトリを作ります。

Users/username/Desktop/traincascade/

さらにこの中に以下のディレクトリを作ります。

  • pos(正解画像を保存するフォルダ)
  • vec(正解画像ベクトルファイル用フォルダ)
  • neg(不正解画像を保存するフォルダ)
  • cascade
  • cascade/trained_data (分類器用フォルダ)

2. 必要なファイルをディレクトリに入れる

  • pos/ の中に正解データ画像を入れます。
pos/image.png
  • neg/ の中に不正解画像を入れます。
neg/1.png
neg/2.png
neg/3png
...

3. opencv_createsamples コマンドでベクトルデータ作成

3000枚の画像を作ってみます。

$ ./opencv_createsamples -img ./pos/image.png -vec ./vec/image.vec -num 3000 -bgcolor 255 -maxidev 40 -maxxangle 0.8 -maxyangle 0.8 -maxzangle 0.5

4. 不正解画像一覧ファイルの作成

$ ls neg | xargs -I {} echo neg/{} > nglist.txt

5. 分類器ファイル作成

./opencv_traincascade -data ./cascade/trained_data/ -vec ./vec/image.vec -bg nglist.txt -numPos 2400 -numNeg 100

-numPosにはcreatesamplesで作成した枚数の8割の数を指定。
-numNegにはneg/ に入っている画像の枚数を指定。

以下のデータが分類器になります!

cascade/trained_data/cascade.xml

ちなみに公式ドキュメントはこちらです。

Cascade Classifier Training — OpenCV 3.0.0-dev documentation

より精度の高い分類器を求めて

次回はこちらのスライドを参考に、より精度の高い分類器を作っていきます。

ちなみにこちらを使えば精度が測れるとのこと。 OpenCV Computer Vision Library ()

OpenCV 3.0 を Home brewでインストール

$ brew tap homebrew/science
$ brew install opencv3

Home brewのインストール先は

/usr/local/Cellar/

で、Cellar以下に

opencv3

というディレクトリの中に入る。

/usr/local/Cellar/opencv3/3.x.xx(バージョン名)/binの中身は以下。

opencv_annotation

opencv_createsamples

学習の正解データを量産するツール

opencv_traincascade

学習データを作成するツール

次回はこの記事を参考に学習データを作っていきます。

www.pro-s.co.jp