アプリなどを開発するブログ

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


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

vimで改行コードや文字コードを変更する

vimで改行コードや文字コードを変更したかったので調べた。

改行コード

改行コードの確認

:set fileformat?

改行コードの設定

:set fileformat=unix  
:set fileformat=mac  
:set fileformat=dos  

または以下のショートカットでも。

:set ff=unix
改行形式は以下の通り

unix = LF (\n)
dos = CR+LF(\r\n)
mac = CR(\r)

文字コード

文字コードの確認

:set fileencoding?

文字コードの変更

:set fileencoding=utf-8  
:set fileencoding=shift_jis  
:set fileencoding=euc-jp  

実際に変わってるか確認

$ file hoge.txt
linux.txt: ASCII text

こうなってたのを、:set fileformat=dosやって:wqで保存すると

$ file hoge.txt
linux.txt: ASCII text, with CRLF line terminators

と表示されるのが確認できる。

Swiftで画像認識カメラ作るためのリサーチメモ

画像認識系のカメラアプリを作るために色々と調べたメモ。

OpenCVを使って特徴量抽出という手法でやればいいようです。

特徴量抽出を使って画像認識する

qiita.com

qiita.com

qiita.com

SwiftからOpenCVを使う

これも難なくいけそう。

ameblo.jp

ギャップロさんのライブラリ

OpenCVでの画像認識をいい感じに簡単に使えるようラップしてくれたライブラリっぽいです。
特徴量データを作成するためのアプリもついてます。
www.gaprot.jp

そのライブラリを使ってアプリを作った事例

qiita.com

Open CV 3.0

各種アルゴリズムなどをまとめた長編記事

www.pro-s.co.jp

物体検出器の作成について

gihyo.jp

kivantium.hateblo.jp

ねこと画像処理 part 2 – 猫検出 (モデル配布) « Rest Term

www.japan-iss.co.jp

Tutorial: OpenCV haartraining (Rapid Object Detection With A Cascade of Boosted Classifiers Based on Haar-like Features) - Naotoshi Seo

Pythonでwebアプリにするのも面白そう

d.hatena.ne.jp

保険の営業マンのほとんどはBotに置き換えられるか?

優秀な営業マンほど愛着が湧いて断りづらくなってしまう問題

私は現在生命保険の加入を検討中です。


いろんな営業マンの方にお会いするのですが、
さすが保険会社の営業マン。
みなさん良い方で信頼できる雰囲気だし、「この人にお任せしようかな。。」と一度お会いしただけで思ってしまいます。

ですが、営業マンの方に愛着は湧いたとしても、やはりこちらとしてはどうしても安くていい他の会社の商品も気になってしまいますので、
他の営業マンの方にも会います。

そうするとその営業マンの方も良い方で、信頼できる感じなわけです。
どちらも良い方なので、この人に契約を取らせてあげたいな、などと考え始めるとにっちもさっちもいかなくなります。
さらに「次、いつお会いしましょうか?ニコニコ」みたいな連絡がゴリゴリ来ますので、「あーまだ他社と比較検討したいんだけど、なんとなくそんな事も言いづらいし〜」みたいな感じになりつらたんです。

そこで私は思いました。

これ、機械が相手だったら楽なのに

これにつきます。
保険のことなんてこういったライフステージになるまで一切興味がないわけですから知識0なわけで、
聞いたら色々答えてくれる相手は欲しいんです。
でも、その対価として、この人と契約しないと。。という脅迫観念もあります。

そこでbotです

その点、相手がbotであれば非常に断りやすい。
恐らくPUSH通知は送ってくるでしょうが、「もう大丈夫です」という発言をbotに送ればそれ以上干渉しない。というような感じになるでしょう。

ちなみにbotというのは「Robot」。
平たく言うとLINEでチャットの相手になってくれる人工知能(もしくは人工知能まがいの会話プログラム)です。
先日LINEとFacebookから、誰でもbotを作って公開できる仕組みが公開されました。

blog.minato.jp.net

これは、保険相談bot作るしか無いですね。作ります。