20장. 교육 콘텐츠 설계와 종합 실습
난이도 조절하기
헬스장의 운동 기구에는 무게를 바꾸는 핀이 있습니다. 처음 온 사람은 10kg 에, 익숙한 사람은 40kg 에 핀을 꽂습니다. 기구는 하나인데 핀만 옮기면 누구에게나 알맞은 운동이 됩니다. 연습 그림을 만드는 함수에도 이런 핀, 곧 손잡이를 달아 둡니다.
그림의 네 상자가 영상처리 실습의 난이도를 바꾸는 손잡이입니다. 여기서 운동 기구가 그림 생성 함수이고, 무게 핀이 함수의 매개변수입니다. 손잡이를 한꺼번에 여러 개 돌리면 무엇 때문에 어려워졌는지 알기 어려우므로, 판을 나눌 때는 손잡이마다 얼마나 돌렸는지를 표로 남깁니다.
위 줄이 실습 2와 같은 함수로 만든 세 판의 연습 그림이고, 아래 줄이 함께 만든 정답 마스크입니다. 오른쪽으로 갈수록 동전이 많고 작아지며, 지글지글한 노이즈가 세지고, 왼쪽이 어둡고 오른쪽이 밝은 조명 차이가 커집니다. 정답 마스크는 난이도와 상관없이 깨끗합니다.
세 판의 손잡이
| 손잡이 | 쉬움 | 보통 | 어려움 | 어려워지는 까닭 |
|---|---|---|---|---|
| 개수(count) | 4 | 7 | 10 | 많을수록 붙거나 놓치기 쉽다 |
| 반지름(radius) | 22~28 | 14~22 | 9~16 | 작을수록 잡티와 헷갈린다 |
| 노이즈(noise, 표준편차) | 0 | 15 | 30 | 셀수록 이진화 뒤 잡티가 는다 |
| 조명 차(light) | 0 | 60 | 120 | 클수록 기준값 하나로 나누기 어렵다(8장) |
짧은 예시
손잡이를 사전 하나에 모아 두면 판을 더하거나 고치기 쉽습니다.
import pandas as pd
LEVELS = {
"쉬움": {"count": 4, "radius": (22, 28), "noise": 0, "light": 0},
"보통": {"count": 7, "radius": (14, 22), "noise": 15, "light": 60},
"어려움": {"count": 10, "radius": (9, 16), "noise": 30, "light": 120},
}
# orient="index": 사전의 바깥 키(쉬움·보통·어려움)를 표의 줄로 쓴다
print(pd.DataFrame.from_dict(LEVELS, orient="index"))
# 조명 차 60 이면 왼쪽 끝은 -30, 오른쪽 끝은 +30 만큼 밝기가 바뀐다
light = 60
print("왼쪽 끝:", -light / 2, "/ 오른쪽 끝:", light / 2)주의할 점
- 난이도를 올린 뒤에는 "모범 풀이"를 세 판에 모두 돌려 점수가 정말 내려가는지 확인합니다(실습 2의 4단계). 손잡이를 돌렸는데 점수가 그대로면 난이도가 바뀐 것이 아닙니다.
- 어려움 판은 그 장에서 배운 방법만으로는 풀리지 않을 수 있습니다. 그럴 때는 "다음 장에서 배울 방법"을 힌트로 적거나, 어려움 판을 도전 과제로 돌립니다.