본문 바로가기
빅데이터

Yolov5를 이용한 TFT 챔피언 인식하기

by 너굴맨_ 2022. 2. 18.

Preview

 

아래와 같이 6단계의 과정을 통해 TFT 플레이 영상 속 챔피언들을 인식해보자.

1. 게임 영상 저장하기

Window10에서 제공하는 게임 영상 저장 기능 ( Window 키 + G) 사용하여 게임 영상을 녹화

 

2. 영상을 프레임으로 나누기

1 과정에서 얻은 영상을 컴퓨터가 학습시키기 위해선 Labeling 과정을 거쳐 학습을 시켜야 합니다. Labeling 과정은 프레임 단위로 진행되기 때문에 mp4 -> jpg로 바꾸어야 합니다. 

 

아래의 과정은 주피터 노트북에서 진행된 코드로 경로와 프레임수만 변경하면 영상을 프레임으로 변환 가능 

 

import cv2
from glob import glob

img_list = glob("영상이 저장된 경로")

## 동영상 1초당 2프레임으로 저장
cap = cv2.VideoCapture("저장된 동영상 경로")

# 코덱 정의
fourcc = cv2.VideoWriter_fourcc(*'DIVX') # window의 경우 DIVX

# 프레임 크기, FPS
width = round(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 파일명, 코덱, 1초당 프레임수, 너비와 넓이 - 동영상 저장
#out = cv2.VideoWriter('test.avi', fourcc, 30.0, (width, height))

count = 0 # 프레임 번호 할당

while cap.isOpened():
    ret, frame = cap.read()
    
    if not ret:
        break
    
    # 일반적으로 1초당 30프레임이 찍혀져 있음. 따라서 %30==0으로 하여 1초에 1프레임 저장
    if(int(cap.get(1)) % 30==0):  # 1초당 1프레임을 jpg로 저장
        cv2.imwrite('프레임을 저장할 경로/frame%d.jpg' % count, frame)
        count += 1
    
    #frame = cv2.resize(frame, dsize=(0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
    #cv2.imshow('video', frame) # 영상 출력
    
    if cv2.waitKey(1)& 0xFF == ord('q'): # 0xFF는 win64 환경
        break
        
cap.release()
cv2.destroyAllWindows()

 

3. 라벨링 작업

가장 많은 시간이 걸린 부분으로 LabelImg를 사용하여 작업

 

- 설치 및 사용법

https://byeon-sg.tistory.com/entry/labelImg%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C-yolo-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%9D%BC%EB%B2%A8%EB%A7%81%ED%95%98%EA%B8%B0

 

yolo 이미지 라벨링을 위한 labelImg 사용법

yolo를 통해 custom image로 학습을 시키기 위해서는 나만의 데이터셋이 필요합니다. 원하는 데이터 셋이 존재하는 경우 바로 사용해도 됩니다. 하지만 데이터 셋을 직접 만들어야 한다면 라벨링 툴

byeon-sg.tistory.com

위와 같이 각 챔피언마다 라운딩 박스를 지정

 

※ 주의사항

라벨링 작업을 할 때 jpg를 한 폴더에 모은 뒤 작업하기를 바랍니다.  -- labelimg 경우 classes.txt가 생성 이 되며 class 번호와 객체가 일치해야 함

 

4. Yolov5를 이용한 Object Detect 학습

Colab의 GPU를 사용하여 위의 라벨링이 완료된 자료를 학습

 

https://www.youtube.com/watch?v=T0DO1C8uYP8&t=218s 

 

위의 유튜브 영상에서 친절하게 Colab에서 yolov5를 사용하는 방법을 쉽게 알려줍니다.  ( 쉬운 강의 영상을 제공해주신 빵형님께 감사드립니다.)

 

그래도 저처럼 낯선 객체 인지학습이 어색하신 분을 위해 추가로 몇가지 더 알려드립니다.

 

필요한 준비물 

 

1. images 와 labels (프레임 jpg와 레이블링 결과로 나온 txt를 Image와 label 폴더에 각각 나누어 저장)

2. data.yaml ( 반드시 data.yaml으로 저장하실 필요는 없습니다. )

- data.yaml ( 여는 법은 notepad++로 열기를 이용하면 됩니다.)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
# path: ../datasets/coco128  # dataset root dir
train: /content/dataset/train.txt  
val: /content/dataset/valid.txt  
test:  # test images (optional)

# Classes
nc: 39  # number of classes
names: ['2-1', 'Darius', 'Graves', 'Caitlyn', 'Garen', 'Ziggs', 'Ezreal', 'Camille', '2-2', 'Illaoi',
        '2-3', 'Kassadin', 'KogMaw', '2-4', 'Zyra', '2-5', 'Trundle', '2-6', 'Twitch', 'TwistedFate',
        'Taric', '2-7', 'Poppy', 'Tristana', 'Ekko', 'Swain', 'Warwick', 'miss', 'Singed', 'Quinn',
        'Lulu', 'Blitzcrank', 'Gangplank', 'Vi', 'Heimerdinger', 'Zac', 'Samira', 'Leona', 'Vex']  # class names

labelimg를 사용해 라벨링을 한 output 중 하나인 classes.txt의 순서대로 names를 입력하면 됩니다.

 

유튜브 영상에서 언급된 과정 중 하나인 train.txt와 valid.txt의 경로는 yaml에 저장됩니다.

 

3. Yolov5  ( 유튜브 영상 참조)

 

- 코드

자세한 코드는 유튜브 영상이나 아래의 Github에 자료를 참조하시길 바랍니다.

 

5. 새로운 자료를 학습된 결과에 적용

4에서 얻게된 weight를 사용하여 아래와 같이 새로운 자료를 적용

 

--source 새로운 자료의 경로

--weight 학습 과정에서 얻은 결과

!python detect.py --source /content/dataset/output.mp4 --weight /content/yolov5/runs/train/ftf_yolov5s_results/weights/best.pt

 

6. 탐지된 객체

5의 결과로 얻은 객체 탐지 영상

 

위의 영상에서 대체로 잘 학습이 된 것을 볼 수 있다. 하지만 잘못 탐지된 객체들은 낮은 Confidence인 점을 확인할 수 있으며 이 부분은 더 많은 라벨 학습 및 epoch 수를 늘리거나 yolov5 모델의 더 좋은 모델을 사용하면 개선될 수 있을 거라 예상된다.

후기

위 과정은 예전부터 영상 인식을 사용해서 하고 싶었던 프로젝트로 책을 통한 학습이 아닌 유튜브와 구글링 과정을 통해 하나씩 배워가며 진행한 과정입니다.  위 과정을 통해 이미지 인식 파트에 대한 많은 분들의 글과 영상을 참조 하였으며 영상 인식이 얼마나 핫한지 알 수 있었습니다.

 

Reference

위 과정에 대한 코드

https://github.com/Han-Archives/Colab/blob/main/object_detection.ipynb

 

GitHub - Han-Archives/Colab

Contribute to Han-Archives/Colab development by creating an account on GitHub.

github.com

https://www.youtube.com/watch?v=T0DO1C8uYP8&t=218s

https://lynnshin.tistory.com/47

 

yolov5 학습 튜토리얼 1

Custom 데이터로 YoloV5 모델 학습하기 2편 - [AI/Self-Study] - yolov5 학습 튜토리얼 2 (+ mAP, IoU 설명 / Test 와 Inference) 1. 환경 세팅 1) YoloV5 깃헙 레포지토리 clone $ git clone https://github.com/..

lynnshin.tistory.com

'빅데이터' 카테고리의 다른 글

[PySpark] PostgreSQL 연동하기  (4) 2022.03.22
[PySpark] Spark 핵심 DataSource  (0) 2022.03.09
[PySpark] Spark 구성 컴포넌트  (0) 2022.03.08
[PySpark] Spark 란?  (0) 2022.03.07
API를 활용한 챗봇 만들기  (0) 2022.02.07

댓글