사진이 판이 된다
촬영 직후 하늘 분할 모델이 건물과 나무를 걷어내고 구름 모델이 구름 모양을 찾는다. 가장 큰 연결 영역을 16×16 게임판으로 만든다. 자동 판독이 마음에 들지 않으면 모양 수정에서 칸을 직접 고른다.

하늘을 한 장 찍으면 앱이 사진 속 구름 영역을 찾아 그 윤곽대로 지뢰찾기 판을 만듭니다. 네모반듯한 격자가 아니라 그날 그 시간의 구름 모양이 판이 되고, 같은 하늘은 두 번 나오지 않습니다. 풀어낸 구름은 도감에 남고, 휴대폰이 향한 방향에 걸어 두면 그 방향을 바라볼 때 다시 나타납니다. Flutter 3.47.5로 만들었고, 하늘·구름 모델을 앱에 담아 사진을 서버로 보내지 않습니다. 계정은 없고, 게임에서 졌을 때와 구름을 보관할 때 Google AdMob 광고가 나옵니다.
촬영 직후 하늘 분할 모델이 건물과 나무를 걷어내고 구름 모델이 구름 모양을 찾는다. 가장 큰 연결 영역을 16×16 게임판으로 만든다. 자동 판독이 마음에 들지 않으면 모양 수정에서 칸을 직접 고른다.
직사각형이 아닌 영역에서 8방향 인접을 계산한다. 첫 칸은 모든 난이도에서 안전하고, 빈 영역 한 번에 열기와 숫자 칸 주변 깃발이 맞을 때 한 번에 열기를 지원한다.
쉬움 8%, 보통 12%, 어려움 17%, 전문가 22%의 지뢰 비율을 사진마다 25%씩 무작위로 배정한다. 사진 수정·재분석·같은 판 재도전에서는 배정된 난이도를 유지한다.
승리한 판만 수집한다. 구름 모양과 난이도, 수집 날짜, 플레이 시간이 함께 남고 이름을 바꿀 수 있다.
구름을 얻은 뒤 휴대폰을 움직여 방향을 고르고 그 자리에 놓는다. 동/북/위 기준 방위각·고도각과 상대 거리로 저장하므로, 동쪽에 둔 구름은 동쪽을 바라볼 때 다시 보인다. 거리는 기본의 0.5~6배로 조절한다.
두 모델(합계 약 4.9MB)은 앱에 포함된다. 사진과 판독 결과를 서버로 보내지 않고, 판을 만든 뒤에는 촬영 임시 파일 삭제를 시도한다. 앱에는 구름 칸 모양만 남는다.



MAKING NOTES
구름 모델 하나로는 밝은 건물 벽과 나뭇잎 사이 빈틈을 구름으로 읽었다. 하늘 분할을 앞에 두어 하늘이 아닌 영역을 먼저 제외하고, 그 안에서만 구름 모양을 찾게 했다.
SWIMSEG 공개 사진 1,013장에서 중복을 제거하고 촬영 날짜 기준으로 학습·검증을 나눴다. 같은 날 사진이 양쪽에 섞이면 점수만 올라가고 실제 사진에서는 무너진다. 학습에 쓰지 않은 347장의 셀 IoU는 51.2%에서 79.8%로 올랐다.
도감은 앱 지원 폴더의 my_sky_v1.json 한 파일에 쓴다. 쓰기는 순서대로 처리하고 임시 파일을 완전히 기록한 뒤 교체하며, 직전 정상 파일을 .bak에 남긴다. 읽기 오류가 나면 기존 파일을 덮어쓰지 않는다.
구름은 GPS 장소에 고정되지 않는다. 기기 회전에서 얻은 방위각·고도각과 상대 거리만 저장하므로 어디에서 열어도 같은 방향에 걸려 있다. 대신 자기 북쪽이 기준이라 주변 자기장과 보정 상태에 따라 방향 오차가 생길 수 있다.