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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

YOLO

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

Q&A

解決済

1回答

1501閲覧

(C言語)YOLOv3で検出したBBOXの座標データをtxtファイルに出力したい

izm2192

総合スコア12

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

YOLO

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

0グッド

0クリップ

投稿2020/10/14 10:24

前提・実現したいこと

YOLOv3を使って自作学習データで動画の検出はできたがそれらのBBOXの座標をtxtに出力させるのに詰まっている

該当のソースコード

void draw_detections(image im, detection dets, int num, float thresh, char **names, image **alphabet, int classes)
{
int i,j,q=-1;
for(i = 0; i < num; ++i){
char labelstr[4096] = {0};
int class = -1;
for(j = 0; j < classes; ++j){
if (dets[i].prob[j] > thresh){
if (class < 0) {
strcat(labelstr, names[j]);
class = j;
} else {
strcat(labelstr, ", ");
strcat(labelstr, names[j]);
}
q+=1;
int count[q][4];
printf("%s: %.0f%%\n", names[j], dets[i].prob[j]100); 
printf(" -> (x, y, w, h)\n");
//x=(int)(dets[i].bbox.x
im.w);
count[q][0]=(int)(dets[i].bbox.x
im.w);
count[q][1]=(int)(dets[i].bbox.yim.h);
count[q][2]=(int)(dets[i].bbox.w
im.w);
count[q][3]=(int)(dets[i].bbox.h*im.h);
printf("x=%d, y=%d, w=%d,h=%d\n",count[q][0],count[q][1],count[q][2],count[q][3]);\ここをtxtに出力

} } if(class >= 0){ int width = im.h * .006; /* if(0){ width = pow(prob, 1./2.)*10+1; alphabet = 0; } */ //printf("%d %s: %.0f%%\n", i, names[class], prob*100); int offset = class*123457 % classes; float red = get_color(2,offset,classes); float green = get_color(1,offset,classes); float blue = get_color(0,offset,classes); float rgb[3]; //width = prob*20+2; rgb[0] = red; rgb[1] = green; rgb[2] = blue; box b = dets[i].bbox; //printf("%f %f %f %f\n", b.x, b.y, b.w, b.h); int left = (b.x-b.w/2.)*im.w; int right = (b.x+b.w/2.)*im.w; int top = (b.y-b.h/2.)*im.h; int bot = (b.y+b.h/2.)*im.h; if(left < 0) left = 0; if(right > im.w-1) right = im.w-1; if(top < 0) top = 0; if(bot > im.h-1) bot = im.h-1;

試したこと

結構無理矢理な書き方ですけど一応このコードだとコマンドラインには座標が表示されていっている。
↓いまコマンドラインに表示されている結果。これらをtxtファイルに投げたい

FPS:34.1
Objects:

KPHN: 93%
-> (x, y, w, h)
x=799, y=942, w=100,h=40

FPS:35.7
Objects:

KPHN: 94%
-> (x, y, w, h)
x=798, y=941, w=98,h=40

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

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

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

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

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

dodox86

2020/10/14 10:49

先のご質問 [pythonでの出力結果をtxtファイルへ保存する方法] https://teratail.com/questions/268949 でいただいた回答がそのまま利用できるのではないでしょうか。
izm2192

2020/10/14 14:46

PC触れるのが明日あたりになるので試してみたいと思います!
guest

回答1

0

ベストアンサー

あなたの作ったプログラムの実行形式ファイルのファイル名がsample.exeだと仮定して
sample.exe > out.txt
と入力してください。コマンドラインに表示された内容がout.txtに書き込まれます。

投稿2020/10/14 10:51

tatsu99

総合スコア5422

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

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

izm2192

2020/10/14 14:48

./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg このような感じのコマンドで実行しているのですがこのような際にもそちらのコマンドは使えますでしょうか? PC触れるのが明日あたりになるので試してみます!
tatsu99

2020/10/14 23:47 編集

つかえます。 ./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg > out.txt で、out.txtに書き込まれます。 これをリダイレクトといいます。こちらのURLが参考になるかと。 https://eng-entrance.com/linux-redirect#i-2
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問