1장. AI 비전과 OpenCV 개발환경
컴퓨터비전이란
과일 가게에 손님이 들어와 진열대를 봅니다. 손님은 한눈에 "사과 하나, 귤 하나, 라임 하나"라고 말합니다. 그런데 같은 진열대를 카메라로 찍어 컴퓨터에 넣으면, 컴퓨터가 받는 것은 과일이 아니라 숫자 76,800칸짜리 표입니다. 그 숫자 표에서 "여기 빨갛고 둥근 덩어리가 있다, 이건 사과다"라는 뜻을 찾아내는 기술이 컴퓨터비전입니다.
왼쪽은 사람의 눈, 오른쪽은 컴퓨터의 눈입니다. 여기서 손님의 눈이 카메라이고, 손님의 머릿속 판단이 컴퓨터비전 프로그램입니다. 비유가 맞지 않는 곳도 있습니다. 사람은 처음 보는 과일도 "과일 같다"고 짐작하지만, 컴퓨터는 숫자에서 규칙을 찾도록 누군가 만들어 주거나 가르쳐 줘야 합니다.
사람과 컴퓨터 견주기
| 견줄 것 | 사람 | 컴퓨터 |
|---|---|---|
| 무엇을 받나 | 빛이 눈에 들어온 장면 | 칸마다 숫자가 적힌 표 |
| 뜻을 찾는 법 | 평생 본 경험으로 바로 안다 | 사람이 적은 규칙이나 데이터로 배운 모델 |
| 잘하는 것 | 처음 보는 것도 짐작한다 | 지치지 않고 수천 장을 똑같은 기준으로 본다 |
| 약한 것 | 피곤하면 놓친다 | 배운 적 없는 상황에 약하다 |
짧은 예시
사진은 사람에게는 그림이지만 파이썬에게는 숫자 표입니다. 아주 작은 3×4 칸짜리 "사진"을 숫자로 직접 만들어 봅니다.
import numpy as np
# 세로 3칸, 가로 4칸짜리 흑백 사진. 0 은 검정, 255 는 흰색이다
photo = np.array([
[0, 0, 255, 255],
[0, 128, 128, 255],
[255, 255, 0, 0],
], dtype=np.uint8)
print(photo.shape) # 결과: (3, 4) → 세로 3칸, 가로 4칸
print(photo[1, 2]) # 결과: 128 → 둘째 줄 셋째 칸의 밝기(회색)| 코드 | 쉬운 뜻 |
|---|---|
np.array([...], dtype=np.uint8) | 숫자 목록으로 배열을 만든다. dtype(data type, 자료형)을 uint8 로 주면 0~255 의 정수만 담는다 |
photo.shape | 배열의 모양. 이미지에서는 (세로 칸 수, 가로 칸 수) 순서다 |
photo[1, 2] | [줄 번호, 칸 번호]로 한 칸을 꺼낸다. 번호는 0부터 센다 |
주의할 점
- 이미지의 모양은 (가로, 세로)가 아니라 (세로, 가로) 순서입니다. 표에서 줄(행)을 먼저 적는 것과 같습니다.
- 컴퓨터는 숫자 표에서 "사과"라는 뜻을 저절로 알지 못합니다. 뜻을 찾는 방법을 만드는 것이 이 과정 전체의 일입니다.