OpenCV 비전 실무17장 · Batch Processing 과 YOLO 데이터 준비3 / 21← 이전목차다음 →MetaContents

17장. Batch Processing 과 YOLO 데이터 준비

일괄 처리란

빨래 바구니에 옷이 서른 벌 있다고 해 봅시다. 한 벌씩 손으로 빨면 옷마다 비누 양도, 헹군 횟수도 조금씩 달라집니다. 세탁기는 코스 하나를 정해 두면 서른 벌을 똑같이 빱니다. 일괄 처리는 사진의 세탁기입니다. 사진 한 장을 어떻게 손질할지 함수 하나로 정해 두고, 폴더의 사진 모두에 그 함수를 돌립니다.

파일 목록 만들기, 한 장 처리, 기록 남기기, 요약 보기의 네 단계를 이은 흐름도

그림의 네 단계가 일괄 처리 프로그램의 뼈대입니다. 둘째 단계의 "한 장 처리" 함수가 세탁 코스이고, 첫째 단계의 파일 목록이 빨래 바구니입니다. 셋째와 넷째 단계는 세탁기의 표시창처럼 무엇이 끝났고 무엇이 안 됐는지 알려 줍니다. 비유와 다른 점도 있습니다. 세탁기는 옷을 한꺼번에 돌리지만, 프로그램은 사진을 빠르게 한 장씩 차례로 처리합니다.

손으로 하기와 일괄 처리

견줄 것한 장씩 손으로일괄 처리
걸리는 시간사진 수만큼 늘어난다사람 손은 처음 한 번만 든다
같은 기준사람이 지치면 달라진다함수가 같으면 언제나 같다
다시 하기처음부터 다시 손으로같은 프로그램을 한 번 더 돌린다
무엇을 했는지기억에 기댄다기록(로그)이 남는다

짧은 예시

한 장을 처리하는 함수를 먼저 만들고, 그 함수를 파일 목록에 돌립니다. 함수를 먼저 한 장에 시험해 보는 것이 순서입니다.

Python
from pathlib import Path
import cv2

def mean_brightness(path):
    """그림 한 장의 평균 밝기를 돌려준다(한 장 처리 함수)."""
    img = cv2.imread(str(path), cv2.IMREAD_GRAYSCALE)
    return round(float(img.mean()), 1)

# 먼저 한 장에 시험한다
print(mean_brightness("ch17_raw/part_001.png"))

# 잘 되면 폴더의 앞 세 장에 똑같이 돌린다
for path in sorted(Path("ch17_raw").glob("*.png"))[:3]:
    print(path.name, mean_brightness(path))

cv2.imread 에 str(path) 처럼 글자로 바꿔 넘기면 OpenCV 판에 상관없이 안전합니다. Path 는 다음 절에서 자세히 봅니다.

주의할 점

  • 한 장 처리 함수를 폴더 전체에 돌리기 전에, 한두 장에 먼저 시험합니다. 함수에 실수가 있으면 결과 수백 장이 모두 틀립니다.
  • 일괄 처리는 결과를 새 폴더에 따로 씁니다. 원본을 덮어쓰면 실수했을 때 되돌릴 수 없습니다.
← 이전 절17장 · 용어 짚고 가기다음 절 →17장 · 폴더와 경로 다루기