공대생

1. 데이터 수집하기 본문

개발/캡스톤

1. 데이터 수집하기

상수나무 2021. 3. 21. 17:49

1. 데이터 수집하기(Free Video to JPG COnverter)

예비캡스톤에서 데이터를 수집할 때에는 티처블머신(Teachable Machine)을 이용하여 물체의 사진을 찍었었다. 

Teachable Machine에 들어간 뒤 Image Project를 누르면 오른쪽 사진처럼 웹캠이 켜지는 것을 볼 수 있다. Hold to Record를 누르는 동안 연사가 찍힌다. class 옆에 점세개를 누르고 Download Samples를 누르면 수집한 데이터 사진들을 다운할 수 있다. 

하지만 이 방법은 노트북의 웹캠으로 찍는 것이었기 때문에 화질도 좋지 않았고 사진을 찍는 각도를 조정하기에도 어려움이 있었다. 그래서 이번에는 동영상파일을 프레임별로 잘라 사진파일로 내보내주는 툴을 사용하기로 했다. 

툴을 사용하는 방법으로는 다음 링크를 참고하면 좋을 것 같다.

m.blog.naver.com/ferieo/220701158144

 

동영상을 JPG로 변환해주는 무료 프로그램 - Free Video to JPG COnverter

오랜만에 돌아온 영상 유틸리티 소개 시간!오늘은 동영상을 JPG 파일로 변환시켜주는 무. 료. 프로그램!...

blog.naver.com

Frames for video를 설정한 값에 따라 영상에서 원하는 frame 수 만큼 이미지를 잘라 저장한다. 예를 들어 500을 택하면 한 영상에서 500장의 이미지를 추출하는 방식이다. 

이런식으로 이미지를 추출하면 다음과 같이 학습데이터 이미지 파일을 잘 수집한 것이다. 이름은 해당 파일에서 ctrl+A를 눌러 전체파일을 선택하고 이름을 바꿔주면 다음과 같이 이미지에 번호를 매겨 저장할 수 있다. 

2. 데이터 라벨링

데이터를 다 수집하면 라벨링을 진행해야 한다. 이미지 전체에서 우리가 인식하기 원하는 부분을 지정해 주는 것이다. 

각 물체마다 class번호도 다르게 지정해주어야 하는데 이는 라벨링 이후 과정에서 설명하겠다. 

라벨링을 하는 툴로는 가장 유명한게 LabelImg와 Yolomark가 있다. Yolomark를 설치할때는 visual studio를 통해 파일을 열어 환경변수를 수정하는 과정으로 설치하게 되어있는데 필자의 경우에는 무슨 수를 써도 설치가 제대로 되지 않아 LabelImg를 설치하였다.

LabelImg를 설치하는 방법은 anaconda가 있으면 더 설치가 수월하다. 다음 링크를 참고하여 설치를 진행하였다. 

deftkang.tistory.com/181

 

[Python] 파이썬으로 데이터 라벨링(Labeling) 하는 방법

데이터 라벨링이란 이미지 위에 박스를 치고 그 해당 박스가 어떤 물체인지 분류하기 위해 주석을 다는 작업이다. 파이썬으로 라벨링 하는 방법은 모듈을 이용한 방법이 있다. 사전 작업으로 파

deftkang.tistory.com

LabelImg를 실행하면 다음과 같은 화면이 나온다. 

오른쪽에 Use default label에 원하는 class 이름을 넣고 왼쪽 설정을 YOLO로 바꿔준 뒤 w를 눌러 line을 띄워서 원하는 구간을 라벨링한다. 이렇게 하면 해당 이미지 옆에 같은 이름의 text파일이 생기는데, 이 파일엔 class 번호와 라벨링의 좌표값이 찍히게 된다. 저장을 하고 d를 누르면 다음 사진으로 넘어가게 된다. 이런식으로 우리 조는 약 15000장의 데이터셋을 만들었다...

 

15000장을 혼자서 하려면 몇일을 밤을새도 못할 양이다. 따라서 조원들이 하나씩 class를 맡아서 라벨링을 하였는데, 이렇게 하면 각자의 컴퓨터에서 첫번째로 라벨링한 물체가 되기 때문에 모든 물체의 class가 0이 된다. 원래는 class를 구분하기 위해 0-curry, 1-rice, 3-Chicchoc 이런식으로 되어야 하기 때문에 텍스트 파일의 맨 앞에 있는 class 번호를 바꾸는 코드가 필요했다. 서치를 통해 파이썬 언어로 코드를 작성하였다. 

for i in range(1, 774): #파일이름번호
    s = str(i)
    filename="C:/kancho/kancho ("+s+").txt" #파일이름 지정
    with open(filename, "r") as f:       #파일 읽어서 각 문자열 리스트로 저장
        xs = f.read()
        strings = xs.split()
    with open(filename, "w") as f:       #내용수정
        f.write("6" + " ")               #맨 앞에 필요한 class 숫자 씀
        for string in strings:
            if string != "0":            #필요없는 숫자만 빼고 리스트에 들어있는 문자열 다시 씀
                f.write(string+" ")

filename경로에 class 번호를 수정할 라벨링된 텍스트파일을 폴더에 넣어놓고 지울 숫자와 작성할 숫자를 넣으면 라벨링파일의 class 번호가 한번에 변경된다.  이렇게 하면 여러 사람이 맡아서 라벨링을 하여도 마지막에 class 이름을 바꾸어 취합할 수 있게된다. 

'개발 > 캡스톤' 카테고리의 다른 글

2. 모델학습  (0) 2021.04.27
Comments