과정 안내
과정 로드맵과 STEP 요약
20개 장을 다섯 STEP 으로 묶었습니다. 이 쪽에서는 STEP 마다 무엇을 배우고 무엇을 만드는지, 장끼리 어떻게 이어지는지를 한눈에 봅니다. 장의 자세한 내용은 표의 장 번호를 눌러 봅니다. 실습을 돌리기 전에 필요한 것(패키지, 가중치 파일, 먼저 할 실습)은 실습 코드 사용 안내에 있습니다.
과정 한눈에
식당 주방을 떠올려 봅니다. 장 봐 온 재료를 먼저 살펴보고, 씻고 다듬고, 모양을 내어 썰고, 접시에 담아 손님상에 냅니다. 앞 단계를 건너뛰면 뒤 단계의 요리가 맛이 없습니다. 이 과정도 같습니다. 사진을 숫자로 살펴보고(STEP 1), 밝기와 노이즈를 손질하고(STEP 2), 모양과 경계를 다듬고(STEP 3), 물체를 세고 재고(STEP 4), 마지막에 AI 모델인 YOLO 에 넣을 데이터로 차려 냅니다(STEP 5).
윗줄은 왼쪽에서 오른쪽으로 STEP 1~3, 아랫줄은 오른쪽에서 왼쪽으로 STEP 4~5 입니다. 갈색 화살표가 차례이고, 상자마다 맨 위 줄에 STEP 번호와 장 범위, 가운데에 STEP 이름, 맨 아래에 그 STEP 을 한마디로 줄인 말을 적었습니다.
| STEP | 이름 | 장 | 한 줄 요약 |
|---|---|---|---|
| 1 | OpenCV 시작과 디지털 영상 | 1~4장 | 이미지를 숫자 표로 읽고, 색공간과 히스토그램으로 살펴본다 |
| 2 | 영상 향상과 필터 | 5~8장 | 밝기와 대비를 고치고, 노이즈를 지우고, 두 값으로 나눈다 |
| 3 | 모폴로지와 경계 검출 | 9~11장 | 이진 마스크를 다듬고, 경계를 찾아 점수로 견준다 |
| 4 | 객체 분석과 기하 변환 | 12~15장 | 물체를 세고 재고, 모양으로 가리고, 펴고, 동영상으로 넓힌다 |
| 5 | AI 데이터 전처리와 YOLO 연계 | 16~20장 | 데이터를 정제·증강해 YOLO 를 학습하고, 파이프라인과 수업 자료로 묶는다 |
장마다 실습 5개와 프로젝트 1개가 있어, 과정 전체에 실습 100개와 프로젝트 20개가 들어 있습니다. 실습 데이터는 모두 tools/make_data.py 가 OpenCV 로 도형을 그려 만든 작은 가상 그림입니다.
장을 건너 이어지는 실습
몇몇 소재와 기법은 여러 장에 걸쳐 자랍니다. 같은 소재를 따라가면 과정의 흐름이 잘 보입니다.
| 소재 | 지나는 장 | 하는 일 |
|---|---|---|
같은 장면의 네 노출 ch04_exposure/ | 4장 → 5장 | 히스토그램으로 어두움·밝음·대비 낮음을 진단 → 같은 사진을 밝기·대비·감마로 고치기 |
| 밝기 판정 규칙 | 4장 → 5장 → 16장 | 진단 도구 → 일괄 보정의 판정 → 데이터 정제에서 너무 어둡거나 밝은 사진 거르기 |
과일 진열대 fruit_stand.png | 1장 → 11장 → 18장 | 첫 그림 읽기 → Canny 기준값 격자 → 사전학습 YOLO 의 첫 추론 |
| 가우시안 노이즈를 더하는 꼴 | 6장 → 7장 → 11장 → 16장 → 20장 | 씨앗을 고정해 노이즈 만들기 → 필터 비교 → 경계 검출 비교 → 노이즈 증강 → 난이도 손잡이 |
| 이진 마스크 | 3장 → 8장 → 9장 → 12장 | inRange 마스크 → 임계값 이진화 → 모폴로지로 다듬기 → 윤곽선으로 세기 |
경계 그림 세트 ch11_set/ | 11장 → 12장 | 세 경계 검출 방법을 F1 로 채점(정답 경계를 팽창해 1칸 여유, 9장의 팽창) → 첫 윤곽선 찾기 |
| 윤곽선 | 12장 → 13장 → 15장 → 20장 | 면적·상자로 개수 세기 → 모양 특징으로 분류 → 움직이는 물체에 상자 → 종합 데모의 넓이 측정 |
| 크기 맞추기(레터박스) | 14장 → 16장 | 정해진 크기에 비율을 지켜 맞추기 → 학습용 묶음의 크기 통일 |
| 부품 데이터셋 | 17장 → 18장 → 19장 → 20장 | YOLO 데이터셋 out_ch17_yolo/ 만들기 → 전이 학습 out_ch18_runs/ → 입고 검사 파이프라인의 추론 → 수업 데모의 탐지 |
| 흐림 점수와 평균 해시 | 16장 → 19장 | 흐린 사진과 같은 사진 거르기 → 파이프라인의 거르기 단계(기준값을 데이터에 맞춰 다시 정함) |
STEP 1. OpenCV 시작과 디지털 영상
요리를 배우는 첫날에는 칼을 잡기 전에 재료를 들여다봅니다. 무엇으로 되어 있는지, 색은 어떤지, 상한 곳은 없는지 봅니다. STEP 1 은 사진이라는 재료를 숫자로 들여다보는 단계입니다. 개발환경을 갖추고, 그림을 읽고 저장하고, 색공간을 바꾸고, 히스토그램으로 밝기를 진단합니다.
세 칸은 왼쪽부터 배우는 것, 실습과 프로젝트에서 만드는 것, 다음 STEP 으로 가져가는 것입니다. 다른 STEP 의 그림도 같은 짜임이고, STEP 5 의 셋째 칸만 "현업으로" 입니다.
| 장 | 제목 | 실습과 프로젝트에서 만드는 것 |
|---|---|---|
| 1장 | AI 비전과 OpenCV 개발환경 | 개발환경 점검, 숫자로 그린 첫 그림, 과일 진열대 읽고 띄우기, 수업 전 실습 PC 점검 스크립트 |
| 2장 | 이미지 입출력과 영상 시각화 | 읽기 모드 비교, JPG 품질별 저장, 좌표로 잘라 내기, 갤러리 격자, 상품 사진 저장 형식 비교 보고서 |
| 3장 | 디지털 영상과 색공간 변환 | 픽셀 읽고 바꾸기, BGR·RGB·Gray·HSV 변환, inRange 로 빨간 과일 고르기, 색별 넓이 비율 재기 |
| 4장 | 채널 처리와 히스토그램 분석 | 채널 나누고 합치기, 채널 평균으로 색 경향 분석, 흑백·컬러·마스크 히스토그램, 수업 자료 사진 밝기 진단 도구 |
- 컴퓨터에게 이미지는 (세로, 가로, 채널) 모양의 숫자 표이고, 칸마다 0~255 의 숫자가 들어 있습니다.
- OpenCV 의 색 순서는 BGR 입니다. Matplotlib 으로 띄울 때는
cv2.COLOR_BGR2RGB로 바꾸고,cv2.imread는 실패해도None을 돌려주므로 읽은 뒤 꼭 확인합니다. - PNG 는 무손실, JPG 는 품질 숫자가 낮을수록 숫자를 더 버려 파일이 작아집니다. 잘라 내기는
img[y 시작:y 끝, x 시작:x 끝]한 줄입니다. - OpenCV 의 HSV 는 H 0~179 이고, 그늘과 빛 반사에도 H 는 크게 바뀌지 않아
cv2.inRange로 색을 고르기에 좋습니다. - 히스토그램의 평균은 막대가 모인 자리, 표준편차는 퍼진 너비입니다. 대비 낮은 사진은 평균은 정상과 비슷해도 표준편차가 훨씬 작습니다.
STEP 2. 영상 향상과 필터
재료를 살펴봤으면 이제 손질합니다. 시든 잎은 떼고, 흙은 씻어 내고, 쓸 것과 버릴 것을 나눕니다. STEP 2 는 사진을 손질하는 단계입니다. 어둡거나 흐릿한 사진을 밝히고, 노이즈를 네 가지 필터로 지우고, 임계값으로 물체와 바탕을 두 값으로 나눕니다.
| 장 | 제목 | 실습과 프로젝트에서 만드는 것 |
|---|---|---|
| 5장 | 영상 향상과 학습용 전처리 | 밝기·대비·정규화·감마 보정, 평활화와 CLAHE 비교, 컬러 사진 평활화, 어둡고 흐릿한 학습 사진 일괄 보정 |
| 6장 | 평균 필터와 Gaussian 필터 | 가우시안 노이즈 만들기, 평균 필터 손계산, 커널 크기·sigma 비교, 야간 주차장 사진의 가장 좋은 설정 찾기 |
| 7장 | Median 과 Bilateral 필터, 필터 비교 | Salt & Pepper 노이즈, Median 커널 크기 비교, Bilateral 인자 바꾸기, 노이즈 종류에 맞는 필터 고르기 표 |
| 8장 | Threshold, Adaptive Threshold, Otsu | 전역 이진화, 다섯 가지 방식 비교, 그늘진 안내문의 Adaptive, Otsu 자동 임계값, 영수증 글자 살리기 |
- 밝기를 더할 때는 255 를 넘으면 0 으로 돌아가지 않게
cv2.add로 포화 연산을 하고, 감마 보정은 256칸 조회표와cv2.LUT로 한 번에 바꿉니다. - 컬러 사진은 YCrCb 의 Y 나 HSV 의 V 만 평활화해야 색이 지켜지고, CLAHE 는 바둑판 칸마다 평활화해 밝은 곳을 덜 날립니다.
- 점 노이즈에는 Median, 경계가 중요한 자글자글한 노이즈에는 Bilateral, 빨라야 하면 Gaussian 이 출발점이고, 마지막에는 늘 MAE 와 PSNR 로 확인합니다.
- 조명이 고르면 전역 임계값이나 Otsu, 그늘이 지면 Adaptive Threshold 가 알맞습니다. 노이즈가 많으면 블러를 먼저 합니다.
- 학습 사진은 진단 → 판정에 맞는 손질 → 다시 진단으로 고치고, 숫자와 함께 그림을 눈으로 확인합니다.
STEP 3. 모폴로지와 경계 검출
손질한 재료는 모양을 내어 썹니다. 너덜너덜한 끝은 다듬고, 칼집을 내어 어디서 자를지 표시합니다. STEP 3 은 이진 마스크의 모양을 다듬고, 물체의 테두리가 어디인지 찾는 단계입니다.
| 장 | 제목 | 실습과 프로젝트에서 만드는 것 |
|---|---|---|
| 9장 | Morphology: 침식, 팽창, 열기, 닫기 | 구조 요소 손계산, 침식·팽창의 크기와 횟수, 열기로 잡티 지우기, 닫기로 구멍 메우기, 부품 검사 사진의 이진 마스크 다듬기 |
| 10장 | Sobel 과 Laplacian 경계 검출 | 한 줄 밝기로 기울기 계산, Sobel 가로·세로 경계, 기울기 크기 합치기, Laplacian, 도로 그림에서 차선과 정지선 찾기 |
| 11장 | Canny 와 Edge 비교 | Canny 기준값 격자, 네 단계 따라가기, 이력 임계값의 효과, 자동 기준값 비교, 경계 검출 알고리즘 비교 보고서 |
- 침식은 흰 덩어리를 한 겹 깎고 팽창은 한 겹 부풀립니다. 열기(침식 → 팽창)는 흰 잡티를, 닫기(팽창 → 침식)는 구멍과 틈을 없앱니다.
- 잡티와 구멍이 함께 있으면 순서도 고릅니다. 이 과정의 글자 그림과 부품 검사 사진에서는 닫기 → 열기가 더 나았습니다.
- 경계는 밝기가 갑자기 바뀌는 곳이고, Sobel 로 가로·세로 기울기를 재어 피타고라스로 크기를 합칩니다. 음수가 나오므로
CV_64F로 계산합니다. - Canny 는 블러 → 기울기 → 비최대 억제 → 이력 임계값의 네 단계이고,
cv2.Canny는 블러를 해 주지 않으므로cv2.GaussianBlur를 먼저 겁니다. - 경계 검출 성능은 정답 경계를 팽창으로 1칸 넓혀 정밀도·재현율·F1 로 잽니다.
STEP 4. 객체 분석과 기하 변환
썰어 둔 재료는 개수와 크기를 맞춰 접시에 담습니다. 비뚤게 놓인 것은 바로 놓고, 정해진 접시 크기에 맞춥니다. STEP 4 는 물체 하나하나를 세고 재고, 모양으로 가리고, 비스듬한 그림을 펴고, 같은 일을 동영상으로 넓히는 단계입니다.
| 장 | 제목 | 실습과 프로젝트에서 만드는 것 |
|---|---|---|
| 12장 | Contour Detection 과 객체 분석 | findContours 와 계층 구조, 면적·둘레·무게중심, 곧은 상자·회전 상자·외접원, 잡티 걸러 개수 세기, 컨베이어 부품 개수와 크기 검사 |
| 13장 | Shape 분석과 ROI 처리 | approxPolyDP 로 꼭짓점 세기, 모양 특징 표, 규칙으로 모양 이름 붙이기, 사각형·마스크 ROI, 교통 표지판 모양 분류기 |
| 14장 | 영상 기하학 변환과 Affine, Perspective | resize 와 보간법, 가운데 자르기와 레터박스, 회전과 아핀 변환, 화이트보드 펴기, 비스듬히 찍힌 문서 펴고 크기 맞추기 |
| 15장 | 비디오 처리와 실시간 영상처리 | 동영상 읽고 저장하기, 프레임 차이와 배경 빼기, 처리 시간과 FPS 재기, 주차장 입구 동영상 요약 사진 |
- 윤곽선은 흰 덩어리의 테두리를 이은 점 목록이라, 목록 하나가 물체 하나입니다. 면적 기준으로 잡티를 걸러 개수를 셉니다.
- 꼭짓점 수, 원형도, 종횡비, 채움 비율, 볼록 비율을 표로 모아 확실한 질문부터 if 로 물으면 모양 이름을 붙일 수 있습니다.
- 사각형 ROI 는
img[y:y+h, x:x+w]이고 원본을 보는 창이므로, 원본을 지키려면.copy()를 씁니다. - 정해진 크기에 맞추는 방법은 늘리기, 가운데 자르기, 레터박스 셋이고, 원근 변환은 점 네 쌍으로 비스듬한 면을 폅니다.
- 동영상 처리는 앞 장들의 사진 처리를 프레임마다 되풀이하는 것이고, 실시간은 한 장의 처리를 프레임 간격 안에 끝내는 것입니다.
STEP 5. AI 데이터 전처리와 YOLO 연계
마지막은 손님상에 내는 일입니다. 상한 재료를 골라내고, 같은 크기로 담고, 손님 앞에 내고, 다음에 같은 맛을 내도록 레시피로 적어 둡니다. STEP 5 는 앞 STEP 의 기법으로 AI 학습용 데이터를 정제하고, YOLO 를 학습시켜 전처리의 효과를 재고, 전체를 파이프라인과 수업 자료로 묶는 단계입니다.
| 장 | 제목 | 실습과 프로젝트에서 만드는 것 |
|---|---|---|
| 16장 | AI 데이터 정제와 데이터 증강 | 깨진·작은 파일 찾기, 흐림·밝기 품질 표, MD5 와 평균 해시로 같은 사진 찾기, 씨앗 고정 증강, 학습용 묶음 만들기 |
| 17장 | Batch Processing 과 YOLO 데이터 준비 | 폴더 일괄 처리, 실패에 강한 일괄 처리, YOLO 좌표 바꾸기, 주석 검사기, YOLO 데이터셋 out_ch17_yolo/, 데이터셋 점검 도구 |
| 18장 | OpenCV 전처리와 YOLO 연계 | 사전학습 모델로 첫 추론, 부품 데이터셋 전이 학습, IoU 와 정밀도·재현율 계산기, 나쁜 조건과 전처리, 전처리 전후 YOLO 성능 비교 보고서 |
| 19장 | Vision 데이터 파이프라인 | 수집·거르기·다듬기·추론 단계 함수, 시각화와 보고, 동영상 파이프라인, 부품 입고 검사 파이프라인 |
| 20장 | 교육 콘텐츠 설계와 종합 실습 | 수업 계획표, 난이도 손잡이가 있는 연습 그림 생성기, 자동 채점기, 전후 비교 격자, 수업 자료 묶음, 부품 검사 수업 데모 |
- 데이터 정제는 읽어 보기, 재어 보기, 고르기, 맞추기의 네 걸음이고, 데이터 증강은 정답이 바뀌지 않는 변환만 씨앗을 고정해 학습용에만 씁니다.
- YOLO 라벨은 그림 크기에 대한 비율 (xc, yc, w, h) 이고, 데이터셋은
images/,labels/아래train/,val/과data.yaml로 짭니다. - 사전학습 모델은 COCO 의 80가지 물체만 알아, 우리 부품을 찾게 하려면 전이 학습을 합니다. IoU 0.5 이상이며 클래스가 같으면 맞힌 것으로 셉니다.
- 학습 때 본 적 없는 조건이 점수를 떨어뜨립니다. 전처리를 견줄 때는 같은 모델, 같은 그림, 같은 채점에서 하나만 바꿉니다.
- 파이프라인은 수집 → 거르기 → 다듬기 → 추론 → 보고를 단계 함수로 잇고, 기준값은 CONFIG 사전 하나에 모읍니다.
- 수업 자료는 코드로 그린 연습 그림, 정답, 자동 채점, README, requirements.txt 로 묶고 라이선스와 출처를 적습니다.
장 사이 이어지는 것
대부분의 장은 그 장 안에서 끝나지만, 몇 곳은 앞 장의 데이터나 실습이 남긴 out_ 파일을 씁니다. 실행 순서는 실습 코드 사용 안내의 "장을 건너는 의존과 순서"에 있습니다.
과정을 마친 뒤
- 실제 데이터로 넓히기: 장마다 프로젝트의 "실제 데이터로 해 보려면"에 AI Hub 같은 공개 이미지 자료를 안내했습니다. 쓰기 전에 이용 약관과 라이선스를 읽고, 사람 얼굴이나 차량 번호판처럼 개인정보가 찍힌 사진은 가리거나 쓰지 않습니다. 실제 사진은 가상 그림보다 크고 고르지 않으므로, 기준값(흐림 점수, 밝기 판정, 면적 기준)을 그 데이터에서 다시 재어 정합니다.
- 같은 차례 지키기: 진단 → 손질 → 다시 진단, 같은 조건에서 하나만 바꿔 견주기, 씨앗 고정, 숫자와 함께 그림을 눈으로 보기는 데이터가 바뀌어도 그대로 씁니다.
- 현업에 옮기기: 19장의 파이프라인처럼 단계를 함수로 나누고 기준값을 CONFIG 하나에 모아 두면, 입력 폴더나 동영상만 바꿔 다시 쓸 수 있습니다. YOLO 를 넣은 프로그램을 남에게 서비스하려면 ultralytics 의 AGPL-3.0 조건을 먼저 확인합니다.
- 수업에 옮기기: 20장에서 만든 연습 그림 생성기, 자동 채점기, 수업 자료 묶음은 다른 주제의 실습에도 같은 짜임으로 씁니다. 코드로 그린 그림은 저작권과 개인정보 걱정이 없고, 씨앗을 고정하면 수강생 모두가 같은 그림을 받습니다.