前書きから二日も経ってしまいました。
-- 目次 --
- part0 前書き
- part1 画像の収集 <--- イマココ
- part2 画像の縮小&水増し
まずは2値分類してみる。
ここから主要キャラの分類
- part5 主要キャラで分類問題(未知データに適用するよ編)
- part5.5 主要キャラで分類問題(改良編)
- part6 主要キャラで分類問題(GPU使ったよ編)
- part7 新規データをFasterRCNNを使って分類させる(むしろ全てはこれのため)
今日寝るまでに2値分類(暦orNOT暦)やることが目標です。
あと学部1年になる時、つまりは約3年前に買ったiMacにGPUが入ってることが判明しました。
あん時は何も知らずに買ったのに・・・気づいた時くそうれしかったです。
ってことでGPUも使えるときはガンガン使っていこうかと思います。
挨拶はこの辺に。
画像の収集
収集方法
今回画像を集める方法は、動画からの切り出しです。
せっかくアニメ顔の認識なんだから動画から切り出すのが一番効率が良いだろうと。
スクレイピングなどもやりたいな、とは思っていたのですが、
いづれ自然言語処理系に手を出した時に必ずやるだろうということで、
今回は動画の切り出しを選択しました。あくまで目的はDeepLearning。
anacondaとopenCVについて
一番最初こいつのインストールにすごい時間がかかったのをよく覚えています。
現在はpyenvでpython環境を整備しているのですが、もしopenCVのインストールがうまくいかない場合は、一度pyenvも調べてみるといいかもしれません。
ちなみに僕が本当にお世話になったのが以下のサイト。
www.takunoko.com
ここみればopenCVもサクッと入ると思います。
プログラムコード
本当に申し訳ないのですが、以下のサイトさまが書いているコードのほぼ丸パクリです。
hogehuga.com
# -*- coding: utf-8 -*- #動画から顔認識した部分をくりぬく import cv2 #カスケードを取得する。今回はanime_faceをお借りします。 cascade_path = "/Users/path/to/lbpcascade_animeface.xml" def detectFace(image): #グレースケール化、イコライズ、顔認識を行う関数を作成する image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY) image_gray = cv2.equalizeHist(image_gray) cascade = cv2.CascadeClassifier(cascade_path) facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=3, minSize=(50, 50)) print "face rectangle" print facerect return facerect ### main ### video_path = "/Users/path/to/video" # 動画の絶対パス #理由はわかりませんが、ここは絶対パスの方が良さそうです。 cap = cv2.VideoCapture(video_path) #VideoCaptureをcapに保持 framenum = 0 faceframenum = 0 #初期化 color = (255, 255, 255) #白で検出する while(cap.isOpened()): framenum += 1 ret, image = cap.read() if not ret: # if (ret == False): と同じ break if framenum%50==0: #frameを50枚ごとに認識する 化物語は動きが少ないからね!! フレーム数小さいと同じ画像がいっぱいできちゃうよ! facerect = detectFace(image) if len(facerect) == 0: continue #認識結果がnullだったら次のframeへ for rect in facerect: croped = image[rect[1]:rect[1]+rect[3],rect[0]:rect[0]+rect[2]] cv2.imwrite("1_" + str(faceframenum) + ".jpg", croped) faceframenum += 1 cap.release()
得られた画像たち
誤認識された顔じゃない画像は、負例としてothersフォルダにぶちこんでます。
まとめ
for文で書き換えて、いろんな動画を一気に切り出そうかとも思ったのですが時間がかかりすぎてしまうので結局ひとつの動画ずつ切り出すことに。
うまくいかなかった時のリスクが高いので・・・
これだとさすがにコードが丸パクリすぎるので、このシリーズが終わって当初の目的が達成できたら戻ってこようと思います。
書き換えて、もうちょい早くできたり改善できたらいいなあ。
-- 目次 --
- part0 前書き
- part1 画像の収集 <--- イマココ
- part2 画像の縮小&水増し
まずは2値分類してみる。
ここから主要キャラの分類
- part5 主要キャラで分類問題(未知データに適用するよ編)
- part5.5 主要キャラで分類問題(改良編)
- part6 主要キャラで分類問題(GPU使ったよ編)
- part7 新規データをFasterRCNNを使って分類させる(むしろ全てはこれのため)
p.s. はやく学習はじめたひ