Pythonを始めたばかりです。
大学の課題でアノテーションデータと画像データを読み込み、Yoloの形式に変換するプログラムを作成する課題を行います。
参考プログラムをいただいたのですが、アノテーションデータと画像データの読み込み・バウンティボックスを使った検出する物体の中心座標等の取得など大まかな構成は理解したのですが、詳しい流れが上手く理解できません。
どなたか教えていただけないでしょうか?
参考プログラムです。
python
1 2import glob 3import os #os.path.split 4import cv2 as cv 5#import csv #output 6 7translated = ['0' for i in range(5)] 8annos = glob.glob("./imput/labels_valid/.txt") #INPUT DIR 9imgs = glob.glob("./imput/imgs_valid/.jpg") #get img size 10 11data = [' 'for i in range(5)] 12 13dir_path = './output/labels/' #OUTPUT DIR 14os.makedirs(dir_path, exist_ok = True) 15 16for i, i_path in enumerate(annos): 17f = open(i_path) #existing 18nf = open(dir_path + os.path.split(i_path)[1] , 'w', newline = '') #create file 19#writer = csv.writer(nf) 20 21im = cv.imread(imgs[i]) 22h,w,_ = im.shape #h : img height , w : width , _ : color map (dont use) 23 24for j,line in enumerate(f): 25data[0] = (int)((line.split(',')[5])) #category 26data[1] = (int)((line.split(',')[0])) #bbox left-top x 27data[2] = (int)((line.split(',')[1])) #bbox left-top y 28data[3] = (int)((line.split(',')[2])) #bbox width 29data[4] = (int)((line.split(',')[3])) #bbox height 30 31#===ABOUT category=== 32#regions (0), pedestrian (1), people (2), bicycle (3), car (4), van (5), 33#truck (6), tricycle (7), awning-tricycle (8), bus (9), motor (10), others (11) 34 35data[3] = (data[3] / w) #width (ratio) 36data[4] = (data[4] / h) #h 37 38data[1] = (data[1] / w) + (data[3])/2 #bbox center x 39data[2] = (data[2] / h) + (data[4])/2 #bbox center y 40 41data[3] = '{:.6g}'.format(data[3]) #width (ratio) 42data[4] = '{:.6g}'.format(data[4]) #h 43 44data[1] = '{:.6g}'.format(data[1]) #bbox center x 45data[2] = '{:.6g}'.format(data[2]) #bbox center y 46 47#out_list = (str)(data[0])+' '+(str)(data[1])+' '+(str)(data[2])+' '+(str)(data[3])+' '+(str)(data[4]) 48#csv.writer(nf) 49 50if data[0] >= 1 and data[0] <= 10: #delete regions & others 51data[0] -= 1 52nf.writelines((str)(data[0])+' '+(str)(data[1])+' '+(str)(data[2])+' '+(str)(data[3])+' '+(str)(data[4])+'\n') 53#writer.writerow(out_list)
インデントが判るようにコードは「コードの挿入」で記入してください。
> 参考プログラムです。
何の参考でしょうか? 質問者さんが作成されたものではなくてですか?
すみません、変更しました。
課題の流れとして
・アノテーションデータの読み込み
・対応画像の読み込み
・対応画像のメタデータ(画像全体の縦横サイズ)の取得
・アノテーションデータを,割合値からpx値へ変換
・変換したデータの書き込み
を行います。
アノテーションデータ入手後に変換プログラムを作成するのでその参考に提示されたものです。
その"参考に提示された"というのはどういう意味なんでしょうか?
それ自体が質問の趣旨ですか? (「このコードが何の参考になるのか教えてください」とか「このコードで読み込めるように作成を依頼されたけれどよくわからない」というような質問ですか?)
質問のコードはインデントが消えてます
質問の編集の履歴を見ると、編集の時にインデントが消されてるみたいです
他にも、「glob.glob()」のファイル名の「*.txt」や「*.jpg」の「*」が、編集の時に消されてるみたいです
「参考に提示された」コードなので、そのままでは動かないものなのかもしれませんが、それをさらに改悪して動きにくくしたら、回答されにくくなりますよ
https://teratail.com/help/avoid-asking
の「コードをください・デバッグしてください等の丸投げの質問」を見てください
> 課題の流れ
・アノテーションデータの読み込み
・対応画像の読み込み
・対応画像のメタデータ(画像全体の縦横サイズ)の取得
・アノテーションデータを,割合値からpx値へ変換
・変換したデータの書き込み
を追記しても、「丸投げの質問」であることに変わりありません
「参考プログラム」を修正して使うのでも、自分で一からコードを考えるのでも、どちらでもいいですが、箇条書きの各ステップのそれぞれをどうしたら実現できるか考えて、コードを動かして、うまくいかないところを質問してください
(質問する前に、どうしたら直せるかを、自分で調べて考えてからにしてください)
すみません、色々整理してからもう一度質問し直してよろしいでしょうか?
https://teratail.com/questions/0yrsz4nm3f204f ←これみたいに、質問を削除するのはやめてくださいね。あなたの質問を見て考えてくれたひとや、レスをくれた人に失礼ですから。続ける気があるなら、質問は編集できますので、「色々整理してから」書き直してください。
了解しました。このサイト全然使ったことがないのに参考になります。ありがとうございます。
回答1件
あなたの回答
tips
プレビュー