A A
[CV] OpenImage Dataset์˜ Object Detection Inference Part.2 (with Keras-yolo)

Open Image Dataset์˜ Object Detection ํ•™์Šต ๋ฐ Inference

Open Image Dataset์—์„œ Football ๊ด€๋ จ Object, Fish๊ด€๋ จ Object๋ฅผ ์ถ”์ถœ ํ›„ ํ•™์Šต ๋ฐ์ดํ„ฐ ์„ธํŠธ ์ƒ์„ฑํ›„, ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ Object Detection์„ ์ˆ˜ํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ ๋งํฌ
 

GitHub - chulminkw/DLCV

Contribute to chulminkw/DLCV development by creating an account on GitHub.

github.com

Keras-yolo ํŒจํ‚ค์ง€, OpenImage Dataset์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.


์ฃผ์˜์‚ฌํ•ญ

๋ชจ๋ธ์˜ Inference ๋‹จ๊ณ„ ๋ฐ ๋ฐ์ดํ„ฐ์…‹ ๊ด€๋ จ ์ฝ”๋“œ๋Š” Part.1 ๋ถ€๋ถ„์— ๊ณ„์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. inference ๊ด€๋ จํ•ด์„  ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!
 

[CV] OpenImage Dataset์˜ Object Detection Inference Part.1 (with Keras-yolo)

Open Image Dataset์˜ Object Detection ํ•™์Šต ๋ฐ InferenceOpen Image Dataset์—์„œ Football ๊ด€๋ จ Object, Fish๊ด€๋ จ Object๋ฅผ ์ถ”์ถœ ํ›„ ํ•™์Šต ๋ฐ์ดํ„ฐ ์„ธํŠธ ์ƒ์„ฑํ›„, ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ Object Detection์„ ์ˆ˜ํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.๋ฐ์ดํ„ฐ ๋‹ค

daehyun-bigbread.tistory.com


์ตœ์ข… ํ•™์Šต๋œ ๋ชจ๋ธ์„ ๋กœ๋”ฉํ•˜์—ฌ Video Object Detection ์ˆ˜ํ–‰

Image Object Detection ๊ด€๋ จํ•ด์„  ์ƒ๋‹จ์˜ Part.1 ๊ธ€์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

Keras-yolo ํŒจํ‚ค์ง€์˜ font Directory ์ด๋™

%cd /content/DLCV/Detection/yolo
!cp -rf keras-yolo3/font ./font

์˜์ƒ Object Detection

import cv2
import time
import numpy as np
from PIL import Image

def detect_video_yolo(model, input_path, output_path=""):
    # ์ „์ฒด ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ์ธก์ •์„ ์œ„ํ•œ ์‹œ์ž‘ ์‹œ๊ฐ„ ๊ธฐ๋ก
    overall_start = time.time()
    
    # ์ž…๋ ฅ ๋น„๋””์˜ค ํŒŒ์ผ ์—ด๊ธฐ
    cap = cv2.VideoCapture(input_path)
    
    # ๋น„๋””์˜ค ์ฝ”๋ฑ ์„ค์ • (XVID ์‚ฌ์šฉ)
    codec = cv2.VideoWriter_fourcc(*'XVID')
    
    # ์ž…๋ ฅ ๋น„๋””์˜ค์˜ FPS์™€ ํ”„๋ ˆ์ž„ ํฌ๊ธฐ ๊ฐ€์ ธ์˜ค๊ธฐ
    vid_fps = cap.get(cv2.CAP_PROP_FPS)
    vid_size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    
    # ์ถœ๋ ฅ ๋น„๋””์˜ค ํŒŒ์ผ ์ž‘์„ฑ๊ธฐ ์ดˆ๊ธฐํ™”
    vid_writer = cv2.VideoWriter(output_path, codec, vid_fps, vid_size)
    
    # ์ „์ฒด ํ”„๋ ˆ์ž„ ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ
    frame_cnt = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    print(f'์ด Frame ๊ฐฏ์ˆ˜: {frame_cnt}, ์›๋ณธ ์˜์ƒ FPS: {vid_fps}, ์›๋ณธ Frame ํฌ๊ธฐ: {vid_size}')
    
    index = 0
    while True:
        # ๋น„๋””์˜ค์—์„œ ํ”„๋ ˆ์ž„ ์ฝ๊ธฐ
        hasFrame, image_frame = cap.read()
        if not hasFrame:
            print('ํ”„๋ ˆ์ž„์ด ์—†๊ฑฐ๋‚˜ ์ข…๋ฃŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.')
            break
        
        # ํ”„๋ ˆ์ž„ ์ฒ˜๋ฆฌ ์‹œ์ž‘ ์‹œ๊ฐ„ ๊ธฐ๋ก
        frame_start = time.time()
        
        # OpenCV์˜ ์ด๋ฏธ์ง€ ๋ฐฐ์—ด์„ PIL Image๋กœ ๋ณ€ํ™˜
        image = Image.fromarray(cv2.cvtColor(image_frame, cv2.COLOR_BGR2RGB))
        
        # YOLO ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ๊ฒ€์ถœ
        detected_image = model.detect_image(image)
        
        # PIL Image๋ฅผ OpenCV์šฉ ์ด๋ฏธ์ง€ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
        result = cv2.cvtColor(np.asarray(detected_image), cv2.COLOR_RGB2BGR)
        
        index += 1
        print(f'#### frame:{index} ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ์‹œ๊ฐ„:{round(time.time() - frame_start, 3)}์ดˆ')
        
        # ์ฒ˜๋ฆฌ๋œ ํ”„๋ ˆ์ž„์„ ์ถœ๋ ฅ ๋น„๋””์˜ค์— ์ž‘์„ฑ
        vid_writer.write(result)
    
    # ๋น„๋””์˜ค ์ž‘์„ฑ๊ธฐ์™€ ์บก์ฒ˜ ๊ฐ์ฒด ํ•ด์ œ
    vid_writer.release()
    cap.release()
    
    # ์ „์ฒด ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ์ถœ๋ ฅ
    print(f'### Video Detect ์ด ์ˆ˜ํ–‰์‹œ๊ฐ„: {round(time.time() - overall_start, 5)}์ดˆ')

  • detect_video_yolo ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ ๋น„๋””์˜ค ํŒŒ์ผ์„ ํ”„๋ ˆ์ž„๋ณ„๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ YOLO ๋ชจ๋ธ์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ๊ฒ€์ถœํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ๋น„๋””์˜ค ํŒŒ์ผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•˜๋ฉฐ, ์ „์ฒด ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ์™„๋ฃŒ ์‹œ์ ์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ OpenCV์™€ PIL์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ํ˜•์‹์„ ๋ณ€ํ™˜ํ•˜๊ณ , ๋น„๋””์˜ค ์ž…์ถœ๋ ฅ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
detect_video_yolo(ballnfish_yolo, '/content/DLCV/data/video/NFL01.mp4', '/content/DLCV/data/output/NFL_yolo_01.avi')
colab ์œผ๋กœ ๋Œ๋ฆฌ๋Š” ๊ฒฝ์šฐ์—๋Š” Object Detection ์ ์šฉ๋œ ์˜์ƒ ํŒŒ์ผ์„ google drive์—์„œ download ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด google drive๋ฅผ colab์— mount๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
import os, sys 
from google.colab import drive 

drive.mount('/content/gdrive')
## My Drive ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์— ๊ณต๋ž€์ด ์žˆ์œผ๋ฏ€๋กœ ' '๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค. 
!cp /content/DLCV/data/output/NFL_yolo_01.avi '/content/gdrive/My Drive/NFL_yolo_01.avi'
  • Video Object Detection ํƒ์ง€ ๊ฒฐ๊ณผ

detect_video_yolo(ballnfish_yolo, '/content/DLCV/data/video/FishnShark01.mp4', '/content/DLCV/data/output/FishnShark_yolo_01.avi')
## My Drive ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์— ๊ณต๋ž€์ด ์žˆ์œผ๋ฏ€๋กœ ' '๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค. 
!cp /content/DLCV/data/output/FishnShark_yolo_01.avi '/content/gdrive/My Drive/FishnShark_yolo_01.avi'
  • Video Object Detection ํƒ์ง€ ๊ฒฐ๊ณผ.

์ƒ์–ด๋ฅผ ํƒ์ง€ํ•˜๋Š”๋ฐ ์ƒ๋‹จ ์™ผ์ชฝ ์ฒซ๋ฒˆ์งธ ์‚ฌ์ง„์—์„œ ์ƒ์–ด๊ฐ€ ์ž˜ Detect ๋˜์ง€ ์•Š๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.