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

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

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

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

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

1690閲覧

opencv object_detection.cppにてyoloでカメラでの検出不具合

Soogle44

総合スコア8

YOLO

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

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/08/22 12:20

編集2021/08/22 12:27

前提・実現したいこと

c++にてopencvで物体検出サンプルを動かしていますが、yoloでの静止画は問題ないのですが、カメラ映像での検出の不具合が起こっています。

発生している問題・エラーメッセージ

https://ws.tetsuakibaba.jp/doku.php?id=opencv_dnn:samples:object_detection
こちらのサイトを参考にプログラムを作成しました。
ビルドしたあと、以下をコマンドプロンプトで実行しました。
object_detection.exe -c=yolov3.cfg -m=yolov3.weights --height=416 --width=416 --scale=0.00392

実行結果は以下のようにうまく検出できていませんでした。
そもそもバウンディングボックスの左上の数字はそのクラスの信頼度で0~1.0までの値を取るはずなのですがおかしな値がでてしまっています。

該当のソースコード

https://docs.opencv.org/3.4.15/d4/db9/samples_2dnn_2object_detection_8cpp-example.html
ソースコードはこちらのものをそのまま使用しました。

試したこと

PCに原因があるのかと考え別のPCでも試してみましたが、同様にYOLOのカメラ映像の検出がうまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

windows 10 64bit
opencv 3.4.15
visual studio 2019

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

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

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

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

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

jbpb0

2021/08/23 08:40

動画のファイルでもダメでしょうか?
Soogle44

2021/08/23 09:19

ありがとうございます。 動画の場合も同様に異常に検出されるフレームがありました。 ただカメラ映像に比べるとそのようなフレームは随分減るので処理が重くなると発生しているのかなといった印象です。
Soogle44

2021/08/23 09:28

処理の重さの影響かと思い、yolov2-tinyで検出してみましたが同様に異常な検出がありました。。。
Soogle44

2021/08/27 02:18

ありがとうございます。 そちらのサイトを参考にフレームを飛ばしてみましたが、特に変化は見られませんでした。
jbpb0

2021/08/28 11:16

たとえば、カメラ入力や動画を10秒間に1回だけ処理して、それ以外のフレームは読み飛ばすようにしたら、静止画を1枚処理するのと同じ負荷の計算を1回やったら、それ以降は10秒間はほぼ何もしないわけですよね つまり、10秒間隔で静止画を1枚ずつ処理するのと、負荷はさほど変わらないはずですよね もしそのようにしてもダメなら、処理が重たいからダメ、というのとは違う原因なのでは?
jbpb0

2021/08/28 11:23

> opencv 3.4.15 OpenCV 4.*だと、何か支障があるのでしょうか? 質問の内容とは関係無いかもしれませんが
jbpb0

2021/09/01 05:44

当方のWin 10 64bit PCで、Visual Studio 2017+OpenCV 4.5.2でコンパイルして実行してみました カメラ入力では同じ現象になりました 動画ファイル(25秒、29.97 フレーム/秒)の場合は、画面に表示された画像では大丈夫でしたが、左上の表示がたとえば Camera: 157.41 FPS Network: 2.03 FPS Skipped frames: 755 のようになっていて、動画中のほとんどのフレームがスキップされているようで、実際画面表示されてる画像もかなり間が飛んでました
Soogle44

2021/09/01 05:50

返信が遅れて大変申し訳ございません。 opencvのバージョンについては3系で以前作成した関数を流用したいと思い、とりあえず3系の新しいものを使用しているだけですので4系に変更して試してみたいと思います。 私の別の質問でも同様に異常に検出されてしまう問題が起こっていて、そちらはssd検出後にyolo検出で起こってしまうのでおっしゃる通り処理が重い以外の理由もありそうです。
jbpb0

2021/09/01 22:52 編集

https://github.com/opencv/opencv/blob/master/samples/dnn/object_detection.cpp の187行目の break; の次に _sleep(1000); を追加したら、左上の「Camera:」がだいたい1FPSくらいになりました そうしたら当方のPCでは、カメラ入力での結果が正常(クラス信頼度が1.0以下)になり、動画ファイルでのスキップも無くなりました
jbpb0

2021/09/01 10:42

ちなみに、 https://github.com/amikelive/coco-labels から「coco-labels-2014_2017.txt」を落として、コマンド実行時のオプションに「--classes=coco-labels-2014_2017.txt」を追加したら、何を検出したのかが分かりますよ
guest

回答1

0

c++

1 // Frames capturing thread 2 QueueFPS<Mat> framesQueue; 3 std::thread framesThread([&](){ 4 Mat frame; 5 while (process) 6 { 7 cap >> frame; 8 if (!frame.empty()) 9 framesQueue.push(frame.clone()); 10 else 11 break; 12 } 13 });

↓ 「_sleep()」追加

c++

1 // Frames capturing thread 2 QueueFPS<Mat> framesQueue; 3 std::thread framesThread([&](){ 4 Mat frame; 5 while (process) 6 { 7 cap >> frame; 8 if (!frame.empty()) 9 framesQueue.push(frame.clone()); 10 else 11 break; 12 _sleep(1000); 13 } 14 });

を行ってカメラ入力のFPSを落としたら、当方では現象が発生しなくなりました
表示される長方形の位置や、クラス信頼度の数値が正常になりました

環境
Windows 10 64bit
OpenCV 4.5.2
Visual Studio 2017 (64bitでコンパイル)

投稿2021/09/02 00:50

jbpb0

総合スコア7653

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問