OpenCV 비전 실무실습 코드 사용 안내← 이전목차다음 →MetaContents

과정 안내

실습 코드 사용 안내

실습 코드를 직접 돌리기 전에 장마다 무엇이 필요한지 한곳에 모았습니다. API 키가 필요한지, 무엇을 설치하고 받아 두어야 하는지, 앞의 어떤 실습을 먼저 돌려야 하는지를 표로 봅니다. 설치 방법은 환경설정에, 데이터 파일의 설명은 실습 데이터에 있습니다.

먼저 알아 둘 것

  • 작업 폴더는 data 폴더입니다. 모든 실습 코드는 data 폴더에서 실행한다고 보고 썼습니다. 파일을 읽고 쓰는 경로가 모두 이 폴더 기준의 상대 경로입니다.
  • 한글 경로를 피합니다. Windows 의 OpenCV 5.0 에서 cv2.imread·cv2.imwrite·cv2.VideoWriter 는 한글이 든 절대 경로에서 실패합니다(읽기는 None, 저장은 False). data 폴더로 옮겨 상대 경로로 돌리면 됩니다. 18장부터 ultralytics 를 불러온 프로그램에서는 cv2.imread 가 한글 경로도 읽도록 바뀌므로 결과가 달라 보일 수 있습니다.
  • 실습 코드 파일: 원고의 실습과 프로젝트 코드는 장마다 code/chNN/ 에 lab1.py ~ lab5.py, project1_solution.py 로도 있습니다. 프로젝트 풀이는 solutions/ 에 01_1장_프로젝트풀이.md 처럼 장마다 모여 있습니다.
  • 실습 절 하나는 위에서부터 이어서 돌립니다. 단계(#### 1단계)마다 앞 단계의 변수를 씁니다. 주피터에서는 셀을 차례로, 파일로는 lab1.py 를 통째로 돌립니다.
  • out_ 로 시작하는 파일은 실습이 만듭니다. 없다는 오류가 나면 그 파일을 만드는 앞 실습을 먼저 돌립니다(아래 "장을 건너는 의존과 순서").
  • 구글 코랩에서도 돌릴 수 있습니다. 과목 폴더의 colab_data.zip(6.4MB, 실습 데이터와 YOLO 가중치)을 코랩에 올리고 준비 셀 하나를 돌리면 실습 코드를 그대로 씁니다. 순서와 달라지는 점은 환경설정의 "구글 코랩에서 실습하기" 에 있습니다. 코랩은 런타임이 끝나면 올린 파일과 out_ 파일이 지워집니다.
  • 데이터는 다시 만들 수 있습니다. 실습 데이터는 모두 OpenCV 로 도형을 그린 작은 가상 그림이고, tools/make_data.py 가 씨앗을 고정해 만듭니다. 지우거나 고쳤다면 과정 폴더에서 다시 만듭니다. out_ 파일과 yolo11n.pt 는 이 스크립트가 만들지 않습니다.
PowerShell
cd data                                      # cd = change directory, 작업 폴더로 옮긴다
..\.venv\Scripts\python ..\code\ch05\lab1.py # 5장 실습 1의 코드 파일을 돌린다
PowerShell
.venv\Scripts\python tools\make_data.py      # 과정 폴더에서 실습 데이터를 다시 만든다

위는 data 폴더에서 5장 실습 1의 파일을 돌리는 예이고, 아래는 과정 폴더에서 데이터를 다시 만드는 명령입니다. 가상환경을 켜 두었다면 python 만 써도 됩니다.

API 키와 비밀 값

실행되는 실습 코드 가운데 API 키가 필요한 곳은 없습니다. 외부 서비스에 접속하거나 돈을 내는 키 없이 과정 전체를 돌릴 수 있습니다.

장나오는 값진짜 키가 필요한가어떻게 다루나
1장~17차시없음아니요OpenCV, NumPy, Matplotlib, pandas 로 내 PC 에서만 돕니다
18장yolo11n.pt아니요키가 아니라 사전학습 가중치 파일입니다. data/yolo11n.pt 에 들어 있고, 없으면 실습 1을 처음 돌릴 때 ultralytics 가 인터넷에서 받습니다
18장~20차시YOLO_VERBOSE 환경 변수아니요비밀 값이 아니라 긴 진행 글을 줄이는 설정입니다. 코드에서 os.environ["YOLO_VERBOSE"] = "False" 로 넣습니다
19장~20차시out_ch18_runs/parts/weights/best.pt아니요18장 실습 2가 학습해 남긴 가중치 파일입니다

공개 이미지 자료(AI Hub 등)를 내려받을 때는 회원 가입과 신청이 필요할 수 있습니다. 그때 받은 인증키는 코드에 적지 않고 환경 변수에서 읽습니다. 교안의 코드는 그런 키를 쓰지 않습니다.

장별 실습 준비표

1장부터 17장까지는 opencv-python, numpy, matplotlib, pandas 네 패키지만 있으면 됩니다(os, pathlib, hashlib, shutil, json, time 은 파이썬에 들어 있습니다). 18장부터 ultralytics 와 CPU 판 PyTorch 를 더합니다. 그래픽 카드(GPU)는 어느 장에서도 쓰지 않습니다.

장새 패키지받아 둘 것장비먼저 할 실습
1장opencv-python, numpy, matplotlib, pandas없음안 씀없음
2장없음없음안 씀(창 띄우기는 안내 코드만)없음
3장없음없음안 씀없음
4장없음없음안 씀없음
5장없음없음안 씀없음(4장의 ch04_exposure/ 데이터를 읽는다)
6장없음없음안 씀없음
7장없음없음안 씀없음
8장없음없음안 씀없음
9장없음없음안 씀없음
10장없음없음안 씀없음
11장없음없음안 씀없음
12장없음없음안 씀없음(11장의 ch11_set/ 데이터를 읽는다)
13장없음없음안 씀(selectROI 는 안내 코드만)없음
14장없음없음안 씀없음
15장없음없음웹캠은 "웹캠 다루기" 절의 안내 코드에만없음
16장없음없음안 씀없음
17장없음없음안 씀실습 5(out_ch17_yolo/) → 프로젝트
18장ultralytics, torch·torchvision(CPU 판)data/yolo11n.pt(5.4MB, 교안에 들어 있음)GPU 안 씀(device="cpu")17차시 실습 5 → 실습 2(out_ch18_runs/) → 실습 3~5, 프로젝트. 실습 1은 따로
19장없음(18장에서 설치한 것)없음GPU 안 씀실습 1 → 2 → 3 → 4. 실습 3·5와 프로젝트는 18차시 실습 2 먼저
20장없음(18장에서 설치한 것)없음GPU 안 씀실습 2(out_ch20_exercise/) → 실습 3, 5. 프로젝트는 18차시 실습 2 먼저. 실습 1~5는 YOLO 없이 돈다

18장부터의 설치는 환경설정의 "YOLO 패키지 설치하기"를 따릅니다. 교안의 결과는 ultralytics 8.4.198, torch 2.15.0+cpu, torchvision 0.29.2+cpu 에서 얻었습니다. ultralytics 는 PyTorch 를 함께 설치해 가상환경이 수백 MB 커지므로 수업 전에 미리 설치해 둡니다. ultralytics 와 YOLO 가중치의 라이선스는 AGPL-3.0 입니다.

실행하지 않은 안내 코드

화면 창, 웹캠, 마우스가 있어야 하는 코드는 교안의 자동 실행에 넣지 않고 text 블록에 안내 코드로 실었습니다. 출력도 싣지 않았습니다. 내 PC 의 VS Code 에서 파이썬 파일로 실행하면 됩니다.

장안내 코드돌리려면
2장"화면에 띄우는 두 길" 절의 cv2.imshow, cv2.waitKey, cv2.destroyAllWindows화면 창을 띄울 수 있는 PC(주피터가 아닌 파이썬 파일로)
13장cv2.selectROI 로 마우스로 네모 고르기화면 창과 마우스
15장"웹캠 다루기" 절의 cv2.VideoCapture(0) 반복과 q 로 끝내기, cv2.CAP_DSHOW 로 열기웹캠과 화면 창. 사람이 찍히면 미리 알리고 필요한 만큼만 찍습니다
18장"ultralytics 와 사전학습 모델" 절의 YOLO 불러오기 뼈대실습 1에서 같은 코드를 실제로 돌립니다

설치 명령(1장의 가상환경 만들기, 18장의 pip install -r requirements.txt·pip show ultralytics, 환경설정의 코랩 준비 셀)은 교안이 자동으로 돌리지 않았고, 환경설정의 순서대로 PowerShell 에서 한 번 실행합니다. 프로젝트의 "실제 데이터로 해 보려면"은 글로만 안내하고 코드는 싣지 않았습니다.

장을 건너는 의존과 순서

대부분의 장은 그 장 안에서 끝나지만, 몇 곳은 앞 장의 데이터나 out_ 파일을 씁니다.

뒤 장앞 장에서 가져오는 것없으면
18장 실습 2~5, 프로젝트17장 실습 5의 out_ch17_yolo/(학습 45장, 검증 11장, data.yaml)17장 실습 5를 먼저 돌립니다
18장 실습 3~5, 프로젝트18장 실습 2의 out_ch18_runs/parts/weights/best.pt18장 실습 2(학습)를 먼저 돌립니다
19장 실습 3, 5, 프로젝트18장 실습 2의 out_ch18_runs/parts/weights/best.pt17장 실습 5 → 18장 실습 2를 먼저 돌립니다
20장 프로젝트18장 실습 2의 out_ch18_runs/parts/weights/best.pt17장 실습 5 → 18장 실습 2를 먼저 돌립니다
5장 실습 1~34장의 ch04_exposure/데이터 폴더에 있으면 됩니다
11장 실습 1, 18장 실습 11장의 fruit_stand.png데이터 폴더에 있으면 됩니다
12장 실습 111장의 ch11_set/데이터 폴더에 있으면 됩니다
20장 실습 46장의 ch06_parking.png데이터 폴더에 있으면 됩니다

장 안의 순서도 지킵니다. 19장에서는 실습 1(out_ch19_passed.csv) → 실습 2(out_ch19_prepped/) → 실습 3(out_ch19_detections.csv) → 실습 4 차례로 앞 실습의 결과를 이어 씁니다. 20장 실습 3과 5는 실습 2의 out_ch20_exercise/ 를 씁니다. 17장의 out_ch17_yolo/ 폴더 짜임을 바꾸면 18장부터의 실습이 깨집니다.

코랩에서는 런타임이 끝나면 out_ 파일이 모두 지워집니다. 17장 실습 5 → 18장 실습 2 → 18장의 나머지, 19장, 20장의 실습을 같은 런타임에서 차례로 돌리거나, 18장 실습 2가 만든 best.pt 를 files.download("out_ch18_runs/parts/weights/best.pt") 로 내려받아 두었다가 다음에 같은 자리에 올립니다.

오래 걸리는 곳

이 과정의 실습은 대부분 그림이 작아 몇 초 안에 끝납니다. 시간이 눈에 띄게 드는 곳은 아래와 같습니다. 시간은 교안을 만든 PC(그래픽 카드 없음)에서 잰 것이고 PC 마다 다릅니다.

곳교안을 만든 PC 에서 걸린 시간
18장 실습 2(전이 학습, 30 에포크)6분 남짓(5.7분), 에포크 한 번에 11초쯤
18장 설치(ultralytics 와 PyTorch)원고에는 "몇 분"으로만 적었습니다. 내려받는 양이 커서 수업 전에 미리 설치합니다
19장 프로젝트(파이프라인 전체)단계 가운데 추론이 가장 오래 걸립니다(거르기보다 수십 배). 모델을 처음 불러오는 시간이 섞이면 크게 달라집니다
15장 실습 5(프레임 처리 시간)오래 걸리는 곳은 아니고 시간을 재는 실습입니다. 원래 크기 한 장 평균 35.4ms, 절반 크기 9.0ms(3.9배 빠름)

18장 실습 2를 한 번 돌려 out_ch18_runs/ 가 생기면, 18장 실습 3부터 20장까지는 학습을 다시 하지 않고 그 가중치를 불러 씁니다.

← 이전과정 로드맵과 STEP 요약다음 →1장 · 먼저 큰 그림부터