0%

AI

AI의 눈으로 보는법

정호종··수정됨 2026.07.23

AI의 눈으로 보는법

이미지를 인식하는 두 가지 방법 — OpenCV와 YOLO

한 줄 요약 — 컨베이어 벨트 위의 불량품을 걸러내는 시스템을 개발하면서, 이미지를 인식하는 두 가지 접근(규칙 기반의 전통 컴퓨터 비전 vs 딥러닝 기반의 YOLO)을 비교해 보고, 왜 YOLO를 선택했는지 정리한 기록입니다.

컴퓨터에게 "이 사진에서 불량품을 찾아라"라고 시키는 방법은 크게 두 갈래가 있습니다. 이 글은 그 두 갈래를 직접 견줘 보며 겪은 고민과, 지금까지 내린 결론을 정리한 것입니다.


1. 어떻게 시작했나 — 컨베이어 벨트와 불량품

최근 업무에서 컨베이어 벨트 위를 지나가는 제품 중 불량품을 자동으로 검출하는 프로젝트를 맡게 되었습니다.

사람이 하루 종일 벨트를 지켜보며 불량을 골라내는 일은 지루하고, 집중력이 떨어지면 놓치기도 쉽습니다. 카메라로 벨트를 찍고, 컴퓨터가 대신 "이건 정상, 이건 불량" 하고 판별해 주면 좋겠다는 것이 출발점이었습니다.

그런데 자료를 찾다 보니 첫 갈림길부터 만나게 됩니다. "이미지에서 무언가를 찾는 방법"이 하나가 아니었던 것입니다.

2. 두 갈래 길 — 규칙으로 찾기 vs 배워서 찾기

이미지 인식은 크게 두 가지 접근으로 나뉩니다.

  • 전통 컴퓨터 비전 — 사람이 "이런 특징이 보이면 불량이다"라는 규칙을 직접 적어 주는 방식. 대표 도구가 OpenCV입니다.

  • 딥러닝 기반 인식 — 규칙을 적는 대신, 정답이 표시된 사진을 잔뜩 보여 주고 컴퓨터가 스스로 기준을 익히게 하는 방식. 대표 모델이 YOLO입니다.

1_two_roads.png

여기서 짚어 둘 점이 하나 있습니다.

OpenCV와 YOLO는 사실 같은 층위의 비교 대상이 아닙니다. OpenCV는 이미지 처리 도구를 모아 둔 라이브러리(도구 상자)이고, YOLO는 딥러닝 객체 탐지 모델(방법론)입니다. 심지어 YOLO를 OpenCV 안에서 실행할 수도 있습니다. 그래서 정확히 말하면 이 글의 비교는 "OpenCV vs YOLO"가 아니라, "OpenCV로 대표되는 규칙 기반 방식 vs YOLO로 대표되는 학습 기반 방식"의 비교입니다.

3. 첫 번째 길 — OpenCV, 규칙으로 찾기

전통 방식은 사람이 불량의 특징을 코드로 옮기는 것입니다.

예를 들어 "정상품은 균일한 흰색인데 불량품에는 검은 얼룩이 있다"면, 이런 흐름의 규칙을 짭니다.

  1. 이미지를 흑백으로 바꾼다

  2. 일정 밝기보다 어두운 부분만 남긴다 (이진화)

  3. 어두운 덩어리의 크기를 잰다 (윤곽선 검출)

  4. 덩어리가 기준보다 크면 불량으로 판정한다

2_opencv_pipeline.png

이 방식의 장점은 분명합니다.

  • 학습 데이터가 필요 없습니다. 규칙만 있으면 바로 동작합니다.

  • 가볍습니다. GPU 없이 CPU만으로도 실시간 처리가 됩니다.

  • 왜 그렇게 판단했는지 설명할 수 있습니다. "3번 단계에서 6mm 얼룩이 잡혔다"고 근거를 짚을 수 있습니다.

그런데 실제로 해 보면 벽에 부딪힙니다.

  • 조명이 조금만 바뀌어도 규칙이 무너집니다. 오전과 오후의 빛이 다르면 "일정 밝기보다 어두운 부분"의 기준이 흔들립니다.

  • 불량의 종류가 다양하면 규칙이 끝없이 늘어납니다. 얼룩, 찌그러짐, 균열, 이물질… 하나 잡을 때마다 규칙을 새로 짜야 하고, 규칙끼리 서로 간섭하기 시작합니다.

  • "애매한 불량"에 약합니다. 매뉴얼에 없는 불량이 나오면 그대로 통과시켜 버립니다.

매뉴얼만 쥔 신입 검수원이 매뉴얼에 없는 상황 앞에서 얼어붙는 것과 같습니다.

4. 두 번째 길 — YOLO, 보여 주고 배우게 하기

YOLO(You Only Look Once)는 이름 그대로 이미지를 한 번만 보고 그 안의 물체들이 무엇이고 어디에 있는지 한꺼번에 찾아내는 딥러닝 모델입니다. 한 번만 보기 때문에 빠르고, 그래서 컨베이어 벨트처럼 실시간 처리가 필요한 곳에 잘 맞습니다.

쓰는 방법은 규칙을 짜는 대신 데이터를 준비하는 것입니다.

  1. 벨트 위 제품 사진을 수백~수천 장 찍는다

  2. 사진마다 "여기가 불량 부위"라고 네모 박스를 그려 표시한다 (라벨링)

  3. 이 데이터를 모델에게 학습시킨다

  4. 학습이 끝나면, 새 사진을 넣었을 때 모델이 알아서 불량 위치를 박스로 짚어 준다

3_yolo_pipeline.png

장점은 전통 방식의 약점을 정확히 뒤집은 모습입니다.

  • 조명·각도·위치가 달라져도 잘 버팁니다. 다양한 조건의 사진으로 학습했다면, 그 변화 자체를 이미 겪어 봤기 때문입니다.

  • 불량 종류가 늘어도 구조가 복잡해지지 않습니다. 규칙을 새로 짜는 게 아니라 데이터를 더 보여 주면 됩니다.

물론 공짜는 아닙니다.

  • 라벨링된 데이터가 필요합니다. 사진을 모으고 일일이 박스를 그리는 작업은 시간이 꽤 듭니다.

  • GPU가 있어야 편합니다. 학습은 물론이고, 실시간 판별도 CPU만으로는 버거울 수 있습니다.

  • 왜 불량이라고 판단했는지 설명하기 어렵습니다. 숙련공에게 "감으로요"라는 답을 듣는 것과 비슷합니다.

5. 나란히 비교

비교 축

규칙 기반 (OpenCV 전통 기법)

학습 기반 (YOLO)

판단 기준

사람이 규칙을 직접 작성

데이터에서 스스로 학습

준비물

규칙 (데이터 불필요)

라벨링된 사진 수백~수천 장

환경 변화 (조명 등)

취약

강함

불량 종류 확장

규칙이 계속 늘어남

데이터만 추가

하드웨어

CPU로 충분

GPU 권장

판단 근거 설명

명확함

어려움 (블랙박스)

어울리는 상황

환경이 고정되고 불량 패턴이 단순할 때

환경이 변하고 불량이 다양할 때

6. 그래서 무엇을 골랐나 — 왜 YOLO인가

이번 프로젝트는 YOLO를 선택했습니다. 이유는 위 표의 오른쪽 열이 저희 상황과 겹쳤기 때문입니다.

  • 검출해야 할 불량의 형태가 한 가지로 정해져 있지 않고,

  • 현장 조명이나 제품이 놓이는 위치도 매번 일정하다고 보장할 수 없으며,

  • 앞으로 대상 제품이 바뀌거나 늘어날 가능성도 있습니다.

규칙 기반으로 시작했다면 처음엔 빨랐겠지만, 불량 유형이 하나 추가될 때마다 규칙을 다시 손보는 미래가 그려졌습니다. 데이터를 모으는 초기 비용을 치르더라도, 나중에 "데이터만 더하면 되는" 구조가 길게 보면 이득이라고 판단했습니다.

다만 한 가지 짚어 두면, 둘은 경쟁 관계가 아닙니다. 실무에서는 보통 함께 씁니다. 카메라에서 들어온 영상을 자르고, 밝기를 고르게 다듬는 전처리는 OpenCV가 맡고, 다듬어진 이미지에서 불량을 찾는 판별은 YOLO가 맡는 식입니다. 이번 프로젝트도 같은 구조입니다. 도구 상자와 숙련공이 한 팀으로 일하는 셈입니다.

4_one_team.png

시작은 "이미지를 어떻게 인식하지?"라는 작은 고민이었습니다.

벨트를 지켜보며 불량을 골라내는 일은 기계의 눈에 맡기고, 사람은 더 나은 제품을 만드는 데 집중할 수 있도록 하는 것. 이것이 이 시스템의 목표입니다. 현재 이 구조로 컨베이어 벨트 불량품 검출 시스템을 개발하고 있습니다.

읽기 도구

7분 읽기

이 글이 도움이 되었나요?

다음으로 읽기