물체 인식용 데이터 세트 파일 이름 변경 프로그램

목적



오브젝트 인식 데이터 세트에서 파일 이름을 적절하게 설정하면 어떤 이미지에 어떤 오브젝트가 있는지 알 수 없으므로 데이터 세트를 관리하기가 어렵습니다.
또한, 라벨링 후 물체 인식 데이터 세트의 이름을 변경할 때에는 이미지 이름, 주석 파일 이름 및 주석 파일의 내용의 세 가지를 변경해야합니다. 특히 주석 파일의 내용은 쉽게 변경할 수 없습니다.
이번에는, 이 3개를 단번에 변경하는 프로그램을 작성한다.

        어노테이션 파일            
           

주석 파일의 내용



사용한 것



라벨링 소프트웨어



물체 인식 알고리즘



[YOLO]htps : // 기주 b. 이 m / q q ぇ ええ / 케라 s- 3
[SSD]htps : // 기주 b. 코 m / ry 코 v8 / SD_ 케라 s

처리 흐름


  • python rename_img_ann.py 실행
  • "Please input file path"다음에 대상 데이터 세트의 경로를 입력하십시오.
  • "Please input new name"뒤에 새 파일 이름을 입력하십시오.

    다음은 ../dataset 내에 존재하는 파일을 object라는 이름으로 변경한 예이다.



    결과



    어노테이션 파일명, 이미지명, 어노테이션 파일의 내용의 3개를 동시에 변경할 수 있었다.

                  画像
                   

    주석 파일의 내용



    결론



    라벨링 후의 파일명 변경이라고 하는 귀찮은 작업을 자동화할 수 있었다.
    또, 이번은 예로서 object라는 이름으로 변경했지만, dog, cat과 같은 이름으로 변경하는 것으로 한눈에 데이터 세트를 관리할 수 있게 된다.

    프로그램



    이 프로그램은 github에 게시되었습니다 htps : // 기주 b. 코 m / pt 야스 / Rename_i mg_an
    물체 인식의 데이터 세트의 형식에 맞추어 JPEGImages와 Annotations에 존재하는 동일명 파일(확장자를 제외한)의 파일명을 입력한 것으로 변경하고 있다. 또, 어노테이션 파일의 내용은 path 태그와 filename 태그만을 변경하고 있다.
    이름이 같은 것이 없으면 프로그램이 종료됩니다.

    rename_img_ann.py
    import os
    import argparse
    import xml.etree.ElementTree as ET
    
    class rename(object):
    
        def __init__(self,root,name):
            self.root = root
            self.name = name
            self.Annotations = os.path.join(root,'Annotations')
            self.JPEGImages = os.path.join(root,'JPEGImages')
    
        def get_files(self):
            #ファイル一覧取得
            file_list_ = os.listdir(self.Annotations)
            #拡張子を抜いてファイル一覧作成
            file_list = list(map(lambda x: os.path.splitext(x)[0],file_list_))
            file_list.sort()
            #jpgとxmlを対応づけたまま名前変更
            for i in range (len(file_list)):
                file_name = self.name + str(i)
                img_path_ = self.JPEGImages + "/" + file_list[i]+".jpg"
                img_path = self.JPEGImages + "/" + file_name+".jpg"
                ann_path_ = self.Annotations + "/" + file_list[i]+".xml"
                ann_path = self.Annotations + "/" + file_name+".xml"
    
                if img_path_ != img_path:
                    os.rename(img_path_,img_path)
                if ann_path_ != ann_path:
                    os.rename(ann_path_,ann_path)
    
                tree = ET.parse(ann_path)
                tag_path = tree.find("path")
                tag_path.text = img_path
                tag_name = tree.find("filename")
                tag_name.text = file_name + ".jpg"
    
                tree.write(ann_path,"utf-8",True)
    
    def main():
        path = input("Please input file path : ")
        name = input("please input new name : ")
        rn = rename(path,name)
        rn.get_files()
    
    if __name__ == '__main__':
        main()
    
  • 좋은 웹페이지 즐겨찾기