もくじ
- 学習用画像を集める
- 猫のご尊顔を検出(ココ)
- 学習
- 猫雑誌の表紙画像を集めて判定
猫のご尊顏を検出
「1」で集めた画像を何も考えずKerasに突っ込んだら、画像の水増ししても accuracy 0.5 ほど。
ぐぬぬ...
「そーだ!画像から猫だけ検出しよう!猫でない画像も弾かれるはず!」
そこでとても有名なこの記事、素晴らしいです。
配布いただいているモデルと検出のプログラムを使い、猫のご尊顏が検出された領域をクリップして保存した。
- imagefilename:入力画像ファイル
- cascadefilename:上記でお配りいただいているOpenCVで読める学習済モデル.xmlファイル(cascade.xml)
検出条件は全てデフォルト、保存領域は検出結果より縦横10%づつ増量した(次の画像水増しで動かすため)。
下記のコードは、ご尊顏検出とクリップ・保存部分のみ。
呼び出しやらディレクトリ名やらなんやらよろしく追加改造する必要あり。
import sys
import cv2 as cv
def detect(imagefilename, cascadefilename) :
srcimg = cv.imread(imagefilename)
filename, ext = os.path.splitext(os.path.basename(imagefilename))
cascade = cv.CascadeClassifier(cascadefilename)
objects = cascade.detectMultiScale(srcimg)
i = 0
for (x, y, w, h) in objects:
nx = int(x - round(w / 10))
if (nx < 0):
nx = 0
ny = int(y - round(h / 10))
if (ny < 0):
ny = 0
nw = int(w + 2*(round(w / 10)))
nh = int(h + 2*(round(h / 10)))
detectedimg = srcimg[ny:(ny+nh),nx:(nx+nw)]
newfilename = filename + '_' + str(i) + ext
cv.imwrite(newfilename, detectedimg)
i+=1
こんな感じになった(黒)。
草やら靴やら虚無やら、誤検出が1/4くらい。
明らかに猫でないものはFinder上でアイコンを見ながらざっと削除した。
毛色14種類、元画像はそれぞれが600枚ほど、ご尊顏検出結果がほぼ半分、誤検出を捨てたら200〜250枚づつくらい。
次はいよいよ学習。