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

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

ただいまの
回答率

89.51%

YOLO形式のデータを作るために実行するconvert.pyがうまくいきません。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,089

buffalo

score 6

現在convert.pyを実行するために画像データとテキストデータを作った状態でconvert.pyを実行しようとすると

['out19.csv', 'out11.csv', 'out16.csv', 'out17.csv', 'out12.csv', 'out13.csv', 'out18.csv', 'out14.csv', 'out15.csv', 'out10.csv', 'out6.csv', 'out2.csv', 'out9.csv', 'out7.csv', 'out5.csv', 'out3.csv', 'out1.csv', 'out8.csv', 'out4.csv', 'out0.csv', 'out26.csv', 'out27.csv', 'out28.csv', 'out23.csv', 'out24.csv', 'out22.csv', 'out21.csv', 'out25.csv', 'out20.csv']
Input:labels/stopsign_original/out19.csv
Output:labels/stopsign/out19.csv
47,103,470,581,tops

['47,103,470,581,tops\n']
Traceback (most recent call last):
File "convert.py", line 78, in <module>
xmax = elems[1]
IndexError: list index out of range

上記のようなエラーが出てしまいます。

解決策を教えてください。
お願いします。

これだけでは足りないと思うので解決する為に必要な情報があったら教えてください。
環境はgooglecolabです。

convert.pyのコード

 -*- coding: utf-8 -*-

"""
Created on Wed Dec  9 14:55:43 2015
This script is to convert the txt annotation files to appropriate format needed by YOLO
@author: Guanghan Ning
Email: gnxr9@mail.missouri.edu
"""

import os
from os import walk, getcwd
from PIL import Image

classes = ["stopsign"]

def convert(size, box):
dw = 1./size[0]
dh = 1./size[1]
x = (box[0] + box[1])/2.0
y = (box[2] + box[3])/2.0
w = box[1] - box[0]
h = box[3] - box[2]
x = x*dw
w = w*dw
y = y*dh
h = h*dh
return (x,y,w,h)

"""-------------------------------------------------------------------"""

""" Configure Paths"""
mypath = "labels/stopsign_original/"
outpath = "labels/stopsign/"

cls = "stopsign"
if cls not in classes:
exit(0)
cls_id = classes.index(cls)

wd = getcwd()
list_file = open('%s/%s_list.txt'%(wd, cls), 'w')

""" Get input text file list """
txt_name_list = []
for (dirpath, dirnames, filenames) in walk(mypath):
txt_name_list.extend(filenames)
break
print(txt_name_list)

""" Process """
for txt_name in txt_name_list:

txt_file =  open("Labels/stop_sign/001.txt", "r")

""" Open input text files """
txt_path = mypath + txt_name
print("Input:" + txt_path)
txt_file = open(txt_path, "r")
lines = txt_file.read().split('\r\n')   #for ubuntu, use "\r\n" instead of "\n"

""" Open output text files """
txt_outpath = outpath + txt_name
print("Output:" + txt_outpath)
txt_outfile = open(txt_outpath, "w")

""" Convert the data to YOLO format """
ct = 0
for line in lines:

print('lenth of line is: ')

print(len(line))

print('\n')

if(len(line) >= 2):
ct = ct + 1
print(line + "\n")
elems = line.split(' ')
print(elems)
xmin = elems[0]
xmax = elems[1]
ymin = elems[2]
ymax = elems[3]

 

img_path = str('%s/images/%s/%s.JPEG'%(wd, cls, os.path.splitext(txt_name)[0]))

t = magic.from_file(img_path)

wh= re.search('(\d+) x (\d+)', t).groups()

im=Image.open(img_path)
w= int(im.size[0])
h= int(im.size[1])

w = int(xmax) - int(xmin)

h = int(ymax) - int(ymin)

print(xmin)

print(w, h)
b = (float(xmin), float(xmax), float(ymin), float(ymax))
bb = convert((w,h), b)
print(bb)
txt_outfile.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')

""" Save those images with bb into list"""
if(ct != 0):
list_file.write('%s/images/%s/%s.JPEG\n'%(wd, cls, os.path.splitext(txt_name)[0]))

list_file.close()       

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

if(len(line) >= 2):
  ct = ct + 1
  print(line + "\n")
  elems = line.split(' ')
  print(elems)
  xmin = elems[0]
  xmax = elems[1]


lineの内容がカンマ区切りであるのに、スペースで分割しようとして失敗しています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/13 20:11

    ありがとうございます!
    解決できました!

    キャンセル

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

  • ただいまの回答率 89.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る