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

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

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

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

Python

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

Q&A

1回答

1197閲覧

python yoloのカウンタ数について

wasabiii

総合スコア0

YOLO

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

Python

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

0グッド

0クリップ

投稿2022/11/10 05:35

YOLOv5にて、「black,white,red purple,pink,blue」の色の識別を行っているのですが、「https://farml1.com/object_counter/」
この方のブログの通りにしたところ、「black」や「white」などの識別は出来たのですが、識別した後も「black」が何回識別されたのか、「white」が何回識別されたのか、要するに累計数を足していき、表示したいのですがどのようにコードを変更すれば良いのかが分からなくてつまずいています。当方初学者で、説明も雑となってしまい申し訳ありませんが、ご回答お願い致します。

Write results

for *xyxy, conf, cls in reversed(det): # Print counter n_1 = (det[:, -1] == 0).sum() #ラベルAの総数をカウント a = f"{n_1} "#{'A'}{'s' * (n_1 > 1)}, " cv2.putText(im0, " counter " , (20, 50), 0, 1.0, (0, 0, 0), 3) cv2.putText(im0, " red : " + str(a), (20, 100), 0, 1.5, (71, 99, 255), 3) n_2 = (det[:, -1] == 1).sum() #ラベルBの総数をカウント b = f"{n_2} "#{'A'}{'s' * (n_1 > 1)}, " cv2.putText(im0, "black : " + str(b), (20, 150), 0, 1.5, (147, 20, 255), 3) n_3 = (det[:, -1] == 2).sum() #ラベルCの総数をカウント c = f"{n_3} "#{'A'}{'s' * (n_1 > 1)}, " cv2.putText(im0, "white : " + str(c), (20, 200), 0, 1.5, (0, 165, 255), 3) n_4 = (det[:, -1] == 3).sum() #ラベルDの総数をカウント d = f"{n_4} "#{'A'}{'s' * (n_1 > 1)}, " cv2.putText(im0, "blue : " + str(d), (20, 250), 0, 1.5, (128, 0, 0), 3) n_5 = (det[:, -1] == 4).sum() #ラベルEの総数をカウント e = f"{n_5} "#{'A'}{'s' * (n_1 > 1)}, " cv2.putText(im0, "purple: " + str(e), (20, 300), 0, 1.5, (0, 255, 255), 3) n_6 = (det[:, -1] == 5).sum() #ラベルFの総数をカウント f = f"{n_6} "#{'A'}{'s' * (n_1 > 1)}, " cv2.putText(im0, "pink: " + str(f), (20, 350), 0, 1.5, (0, 255, 0), 3)

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

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

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

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

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

jbpb0

2022/11/11 22:54

> 累計数を足していき、表示したい 入力が動画とか複数の静止画とかで、それらの結果を合計したい、のでしょうか?
wasabiii

2022/11/17 01:55

ご質問ありがとうございます。 仰る通り入力は動画で、結果の合計を表示したいです
jbpb0

2022/11/22 04:40 編集

https://github.com/ultralytics/yolov5/blob/master/detect.py の「# Run inference」のすぐ下のところで、「n_1」〜「n_6」の総合計を格納する変数を定義して、そこではそれら全てに「0」を代入しておきます たとえば、「n_1」用を「n_1_all」とするなら、下記のようにします n_1_all = 0 「n_2」〜「n_6」用のも同様にやります > n_1 = (det[:, -1] == 0).sum() のすぐ下で、下記のようにして、「n_1_all」に「n_1」の数値を加算します n_1_all += n_1 「n_2」〜「n_6」のところでも同様にやります そうすれば、上記の例なら「n_1_all」〜「n_6_all」には総合計が格納されてるので、それらも「n_1」〜「n_6」と同様に、 a_all = f"{n_1_all} "#{'A'}{'s' * (n_1_all > 1)}, " のようにして、それを「cv2.putText」で表示すればいいと思います 表示する位置が、もともとあった表示と被らないようにしてください 実際に実行して確認してないので、何か見落としがあるかもしれませんが、大まかな流れは上記のようにすればいけるはず
guest

回答1

0

detect.py
の「# Run inference」のすぐ下のところで、「n_1」〜「n_6」の総合計を格納する変数を定義して、そこではそれら全てに「0」を代入しておきます
たとえば、「n_1」用を「n_1_all」とするなら、下記のようにします

python

1n_1_all = 0

「n_2」〜「n_6」用のも同様にやります

 

n_1 = (det[:, -1] == 0).sum()

のすぐ下で、下記のようにして、「n_1_all」に「n_1」の数値を加算します

python

1n_1_all += n_1

「n_2」〜「n_6」のところでも同様にやります

 
そうすれば、上記の例なら「n_1_all」〜「n_6_all」には総合計が格納されてるので、それらも「n_1」〜「n_6」と同様に、

a_all = f"{n_1_all} "#{'A'}{'s' * (n_1_all > 1)}, "

のようにして、それを「cv2.putText」で表示すればいいと思います
表示する位置が、もともとあった表示と被らないようにしてください

実際に実行して確認してないので、何か見落としがあるかもしれませんが、大まかな流れは上記のようにすればいけるはず

投稿2022/11/28 02:31

jbpb0

総合スコア7651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問