OpenCVを使って物体認識その5、pythonスクリプトで物体認識
続きです
mecobalamin.hatenablog.com
まず認識結果から
これだけだとそれなりに
うまくできてそうだけど
実際は認識できてないのが多い
何故か手前じゃなくて奥の猫とか
下を向いていたり、足だけとか
正面向いてるのに全く認識できてないとか
なんでだろ
正面顔のデータが少ないか
ここまでは正解データをテストに使った
正解に使っていない画像を認識させた結果がこれ
顔以外のところを認識してる
traincascadeのパラメーター変えると
また結果が変わるんだけど
正解データが足りないだけなのかも
とりあえずここまでは動いた
あとはパラメータ調整と正解画像を増やせるか試すとして
一旦まとめは終了
使ったpythonのコードも残す
この方のコードをベースに追記して使わせてもらった
qiita.com
追加した部分とコードについて理解した範囲でメモ
opencv_traincascadeで生成したcascade.xmlの
ディレクトリをmodelに指定している
cats_classificationは認識に使う画像の在るディレクトリ
cats_outputは認識後の画像を保存するディレクトリ
指定したディレクトリのファイル名を取得して
それらについて猫の顔を認識させている
画像はグレースケールにしてから認識
ここのパラメータでも認識結果が変わる
Cascade.detectMultiScale(gray, 1.3, 3)
認識されたら赤い矩形を上書きして保存する
このときFile_Dateで指定した日付をファイル名に追加する
# import library import cv2 import numpy as np from glob import glob from os.path import relpath # Parameters File_Date = "20xx" # Path to files Path_Classifier = '/path/to/file/model' Path_Images = '/path/to/file/cats_classification' Path_Output = '/path/to/file/cats_output' # 学習器(cascade.xml)の指定 Cascade = cv2.CascadeClassifier(Path_Classifier + "/cascade.xml") # ファイル名の取得 List_Images = glob(Path_Images + "/*.jpg") List_Names = [] for i in List_Images: List_Names.append(relpath(i, Path_Images)) # 予測対象の画像の指定 for i in List_Names: print(i) img = cv2.imread(Path_Images + "/" + i, cv2.IMREAD_COLOR) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) point = Cascade.detectMultiScale(gray, 1.3, 3) print(len(point)) if len(point) > 0: for rect in point: cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0,255), thickness=2) else: print("no detect") cv2.imwrite(Path_Output + "/" + "Detected_" + File_Date + "_" + i, img)
画像Path_Outputで指定されたディレクトリに保存される
vimのコピーについてメモ
vimでクリップボードにコピーするときは
ビジュアルモードに入って
"+y
いつも忘れる