今回は上手く行きませんでしたが、今後の為にメモ
以下は参考url
STEP1 正解画像と、画像listの準備
↑こちらのような引違い窓のpng(80×44 ~ 15×137)を10コ作成し、 これらの一覧を img_ok_list.txt に記載しました。
画像listには「file名、物体数、座標x, 座標y, 幅, 高さ」を指定するようです
./win_img_ok/window_900_h.png 1 16 16 49 8 ./win_img_ok/window_900_v.png 1 17 14 7 50 ./win_img_ok/window_1800_h.png 1 12 14 97 8 ./win_img_ok/window_1800_v.png 1 14 9 8 97 ./win_img_ok/引違い外窓_h.png 1 8 8 60 10 ./win_img_ok/引違い外窓_v.png 1 7 8 9 60 ./win_img_ok/引違い窓_3枚_h.png 1 6 4 124 7 ./win_img_ok/引違い窓_3枚_v.png 1 4 6 7 124 ./win_img_ok/引違い窓_4枚_h.png 1 6 4 124 7 ./win_img_ok/引違い窓_4枚_v.png 1 4 6 7 124
STEP2 opencv_createsamples の実行
以下の通り。この辺りの引数の意味を理解していないことが、よくなかったのかも
$ /usr/local/bin/opencv_createsamples \ -info ./img_ok_list.txt \ # 正解画像list -vec window_hikichigai.vec \ # 出力するサンプルfile -num 10 \ # 出力するサンプル数 -bgcolor 255 \ # 背景色 -w 24 -h 24 # サンプル画像のsize...?
STEP3 NG画像と、画像listの準備
NG画像は適当に用意し、 img_ng_list.txt にはfile名だけ記載しました
./win_img_ng/alcatraz2.jpg ./win_img_ng/AquaTermi_lowcontrast.JPG ./win_img_ng/book_frontal.JPG ./win_img_ng/book_perspective.JPG ./win_img_ng/boy_on_hill.jpg ./win_img_ng/calibration_setup.JPG ./win_img_ng/ceramic-houses_t0.png ./win_img_ng/climbing_1_small.jpg ./win_img_ng/crans_1_small.jpg ./win_img_ng/empire.jpg ./win_img_ng/fisherman.jpg ./win_img_ng/FIX窓.png ./win_img_ng/sf_view1.jpg ./win_img_ng/sunset_tree.jpg ./win_img_ng/turningtorso1.jpg ./win_img_ng/Univ1.jpg ./win_img_ng/両引き戸.png ./win_img_ng/両開き戸.png ./win_img_ng/出入り口.png ./win_img_ng/引込み戸.png ./win_img_ng/引違い内戸.png ./win_img_ng/折り畳み戸.png ./win_img_ng/片引戸.png ./win_img_ng/片開き戸.png ./win_img_ng/窓一般.png
STEP4 opencv_traincascade の実行
/usr/local/bin/opencv_traincascade \ -data ./model/1/ \ # model出力先 -vec ./window_hikichigai.vec \ # opencv_createsamples で作成したvec -bg ./img_ng_list.txt \ # NG画像list -numNeg 25 \ # NG画像数 -numPos 9 \ # sampleデータの8-9割とするらしい -w 24 -h 24 \ # opencv_createsamples と同じにするらしい -numStages 8 # 何のステージだろう...?
STEP5 失敗に終わりましたが、物体認識実行
#!/usr/local/bin/python # -*- coding: utf-8 -*- import cv2 import numpy as np import sys def main(): org_file = sys.argv[1] # 学習器(cascade.xml)の指定 cascade = cv2.CascadeClassifier('./model/1/cascade.xml') # 予測対象の画像の指定 img_org = cv2.imread(org_file, 0) ret, img_mono = cv2.threshold(img_org, 200, # 閾値 256, # 画素値の最大値 cv2.THRESH_BINARY) # 2値化type point = cascade.detectMultiScale(img_mono, 1.1, 3) if len(point) > 0: for rect in point: cv2.rectangle(img_org, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0,255), thickness=2) else: print "no detect" cv2.imwrite('detected.jpg', img_org) if __name__ == '__main__': main()
↑こう書くと↓こう表示されます