質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

6511閲覧

YOLO 特定のクラスだけ検出したい

tkpo

総合スコア8

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/11/18 01:05

前提・実現したいこと

yolov2を用いて精度の良い物体検出をしたいと考えています。
検出する物をcarのみにしたい為、class_namesを変更など試しているのですが指定した物以外も検出されてしまいます。
なにかやり方があれば教えていただきたいです。

該当のソースコード

from darkflow.net.build import TFNet import cv2 import numpy as np options = {"model": "yolov2-tiny-voc.cfg", "load": "yolov2-tiny-voc.weights", "threshold": 0.1,"GPU": 1.0} tfnet = TFNet(options) # カメラの起動 cap = cv2.VideoCapture(r"C:\Script\_home_pi_movie__home_pi_movie_cap20201004_1411.mp4") class_names = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"] width = int(cap.get(3)) height = int(cap.get(4)) fourcc = cv2.VideoWriter_fourcc('H','2','6','4') out = cv2.VideoWriter('tesaaat.mp4',fourcc, 15, (width,height)) num_classes = len(class_names) class_colors = [] for i in range(0, num_classes): hue = 255*i/num_classes col = np.zeros((1,1,3)).astype("uint8") col[0][0][0] = hue col[0][0][1] = 128 col[0][0][2] = 255 cvcol = cv2.cvtColor(col, cv2.COLOR_HSV2BGR) col = (int(cvcol[0][0][0]), int(cvcol[0][0][1]), int(cvcol[0][0][2])) class_colors.append(col) def main(): while(True): # 動画ストリームからフレームを取得 ret, frame = cap.read() result = tfnet.return_predict(frame) #cv2.line(frame, (0, pos_linha), (1280, pos_linha), (255,127,0), 1) #線 for item in result: 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.5: for i in class_names: if label == i and class_names[7] == label: class_num = class_names.index(i) break #枠の作成 cv2.rectangle(frame, (tlx, tly), (brx, bry), class_colors[class_num], 2) #ラベルの作成 text = label + " " + ('%.2f' % conf) cv2.rectangle(frame, (tlx, tly - 15), (tlx + 100, tly + 5), class_colors[class_num], -1) cv2.putText(frame, text, (tlx, tly), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,0), 1) # 表示 cv2.imshow("Show FLAME Image", frame) out.write(frame) # escを押したら終了。 k = cv2.waitKey(10); if k == ord('q'): break; cap.release() out.release() cv2.destroyAllWindows() if __name__ == '__main__': main()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

↓の部分が何をしたいか意図が分かりませんが、頑張ってcarだけにしようと試みてる部分でしょうか?

for i in class_names: if label == i and class_names[7] == label: class_num = class_names.index(i) break

temps1101さんが言われている通り、本来はクラス数を限定するべきですが、とりあえず表示だけそれっぽく動かすなら↓みたいに誤魔化せますけどね。

if conf > 0.5 and label=="car": #枠の作成 cv2.rectangle(frame, (tlx, tly), (brx, bry), class_colors[class_num], 2) #ラベルの作成 text = label + " " + ('%.2f' % conf) cv2.rectangle(frame, (tlx, tly - 15), (tlx + 100, tly + 5), class_colors[class_num], -1) cv2.putText(frame, text, (tlx, tly), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,0), 1)

投稿2020/11/19 14:45

編集2020/11/19 14:46
s-uchi

総合スコア101

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

該当コード39行目:

result = tfnet.return_predict(frame)

ここで受け取った結果の中から車を検出している値だけ取得するのが良いかと思います。

変数resultの値を教えてくださればコードが書けるので、コメントで値をコピペしてくれますか?


そして、車だけを検出したいのなら車だけ検出するようにYOLOを学習させるのが精度も良くなると思うのですが、それではだめなのですか?

投稿2020/11/18 10:19

temps1101

総合スコア134

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問