EnsekiTT Blog

EnsekiTTが書くブログです。

DeepLearningの手法の一つ、Yolo v2で物体検出して遊ぶ話(画像編)

こんにちは、えんせきです。
先日僕の愛車がパンクしました。辛いです。
愛車と言っても自転車なので自分で直してしまうのも手なのですが、
そろそろチューブだけでなくタイヤもぼろぼろなのでまるっと交換したいです。

つまりなにしたの?

Yolo v2を使うために、Darkflowをインストールしたので、早速検出できるものが写った画像を入れて、
検出結果を可視化して保存した。

f:id:ensekitt:20180225033921j:plain

前回まで

ensekitt.hatenablog.com
インストールが終わってとりあえず諸々が動くことを確認した。

手順

  • 環境を準備する
  • Darkflowを準備する

前回はここまで

  • 画像解析のコードを書いていく
  • 実行してみる

今日はここまで(今度は動画の予定)

用意した画像

f:id:ensekitt:20180225032539j:plain
イギリスに行った時にたまたま撮影した駐車場の写真を使う。
ensekitt.hatenablog.com

画像解析のコードを書いていく

パッケージとYoloのインスタンスを作成する
from darkflow.net.build import TFNet
import cv2
import numpy as np

options = {"model": "cfg/yolo.cfg", "load": "bin/yolo.weights", "threshold": 0.1}
tfnet = TFNet(options)
画像の読み込みと解析を行う
# 画像の読み込み
img = cv2.imread('raw.jpg')

# 解析を行う
items = tfnet.return_predict(img)
# 検出できたものを確認
print(items)
検出結果を可視化して保存する
class_names = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle',
              'bus', 'car', 'cat', 'chair', 'cow', 'diningtable',
              'dog', 'horse', 'motorbike', 'person', 'pottedplant',
              'sheep', 'sofa', 'train', 'tvmonitor']


for item in items:
    # 四角を描くのに必要な情報とラベルを取り出す
    tlx = item['topleft']['x']
    tly = item['topleft']['y']
    brx = item['bottomright']['x']
    bry = item['bottomright']['y']
    label = item['label']
    conf = item['confidence']

    # 自信のあるものを表示
    if conf > 0.4:

        for i in class_names:
            if label == i:
                class_num = class_names.index(i)
                break

        # 検出位置の表示
        cv2.rectangle(img, (tlx, tly), (brx, bry), (200,200,0), 2)
        text = label + " " + ('%.2f' % conf)
        cv2.putText(img, text, (tlx+10, tly-5), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (200,200,0), 2)

# 表示
cv2.imshow("View", img)
cv2.waitKey(0)
# 保存して閉じる
cv2.imwrite('out.jpg', img)
cv2.destroyAllWindows()

出来上がった画像がこちら

f:id:ensekitt:20180225032946j:plain
駐車場だけあって車が沢山検出されました。
奥の方にテールライトが点灯した車があるけど流石に小さすぎたのかもしれない。

こんどは動画でやってみたい。

次回はこちら

ensekitt.hatenablog.com

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。