Side Quests Grow on Trees (Leave Them Where They Grow) 🌿
식물은 자란 자리에 두고 찾으세요 — 오프라인 Android 식물 탐험 게임
Wild Find는 아이들이 주변 식물을 찾아 촬영하는 Android 게임입니다. BioCLIP 2.5 Mobile과 TinyCLIP이 휴대폰에서 사진을 판별하며, 독성 식물이 정답으로 인정되지 않도록 별도 차단 규칙을 적용합니다. 사진은 기기 밖으로 나가지 않습니다.
- 주제
AI 요약
Wild Find는 보호자와 아이가 함께 주변 식물을 찾는 Android 보물찾기 게임입니다. 보호자가 위치나 지도에서 지역을 정하면, 앱은 iNaturalist 기록을 바탕으로 그달에 관찰된 식물 세 가지를 골라 제시합니다. 아이는 식물을 뽑지 않고 사진을 찍어 확인하며, 어려운 식물은 건너뛸 수 있습니다. 식물이 위험할 가능성이 있으면 만지지 말라고 경고합니다.
휴대폰에서 사진 판별
사진 판별에는 식물 특화 모델 BioCLIP 2.5 Mobile과, 프레임에 식물이 있는지 확인하는 TinyCLIP ViT-8M을 씁니다. 두 모델은 S24 Ultra에서 프레임당 중앙값 189ms에 처리합니다. 사진을 서버로 보내지 않으며, ONNX Runtime의 원격 측정도 껐습니다. 개발자는 런타임 시작 뒤 열린 연결이 없는지 확인했고, 온라인 상태에서 기기 밖으로 나가는 요청은 iNaturalist에만 보낸다고 설명합니다.
지역 식물 목록은 BioCLIP의 종별 점수로 비교합니다. 모델 카드에 따르면 BioCLIP은 독성이나 식용 여부 판정에 적합하지 않고, 속(genus) 수준에서 강점을 보입니다. 그래서 앱은 모델 점수만으로 승리를 결정하지 않습니다. 지역에 있는 독성·위험 식물도 함께 비교하는 차단 규칙을 적용하고, 목표 식물과 가장 높은 점수를 받은 식물이 같은 속인지 확인합니다. 목표 점수는 차단 대상 점수보다 일정한 차이만큼 높아야 합니다. 전체 사진과 중앙 원을 함께 판별할 때 필요한 차이는 0.034이며, 식물이 중앙 원에만 잡히는 경우에는 0.048을 적용합니다. 차단 식물 점수는 중앙 원만 봤을 때의 점수보다 낮아지지 않게 계산합니다. 같은 점수로 공동 1위가 나오면 통과시키지 않습니다. 한 번 맞았다고 바로 성공 처리하지 않고, 연속 세 프레임에서 일치해야 찾은 것으로 인정합니다.
개발자는 독성 식물 사진 267장으로 이 규칙을 시험했습니다. 그중 정답으로 통과한 사진은 0장이었고, 실제 식물 사진은 198장 중 108장이 통과했습니다. 이전 규칙에서는 실제 식물 사진 97장이 통과했습니다. 마진을 낮추면 독성 사진이 통과하는 사례가 생겨 0.034를 유지했습니다. 인식이 불안정했던 sweetgum, tulip tree, persimmon, winged sumac은 탐험 목표에서는 제외했지만, 비교 과정에는 남겨 다른 식물로 잘못 통과하는 일을 막습니다.
위험 경고와 생성형 모델의 역할
앱에는 고정 위험 식물 7종과 iNaturalist 기록을 바탕으로 지역별 적용 여부를 정하는 78종이 있습니다. 경고 판정은 생성형 모델에 맡기지 않고 고정된 기준으로 처리합니다. 위험 식물 사진 52장 중 48장을 잡았고, 일반 식물 253장에서는 3장에 잘못 경고했습니다. 전 세계 이미지로 새로 시험했을 때는 위험 사진 52장 중 41장을 잡았습니다. 개발자는 이 결과 때문에 앱이 식물을 안전하다고 단정하지 않도록 했습니다. 독성 정보는 Wikipedia 문장과 USDA 평가를 바탕으로 만들었으며, CLIP 모델의 독성 판별 성능은 AUC 0.42~0.65에 그쳤다고 설명합니다.
Gemma 4 26B는 앱 안에서 실행하지 않습니다. 노트북에서 Ollama로 실행해 식물별 힌트와 위험 경고를 미리 작성하고, 결과를 APK에 데이터로 포함합니다. Wikipedia 문장을 인용하게 하고 출처 문장에 실제로 적힌 내용인지 검사합니다. 아이를 도로나 물가, 절벽 쪽으로 이끄는 내용은 제외하며, ‘안전’, ‘무해’, ‘만지다’ 같은 표현도 막습니다. 힌트는 20단어를 넘지 않아야 합니다. 출처가 없거나 독성 표시가 빠진 식물이 있으면 빌드를 중단합니다.
힌트 300개를 무작위로 뽑아 검토했을 때 94%가 출처로 뒷받침됐고, 재검토 뒤 위험한 내용은 없었습니다. 규칙을 강화한 뒤 새로 살펴본 48개 중 3개가 부정확하거나 과장된 내용이었습니다. 힌트 정확도를 위해 일부 식물은 범위에서 빠졌지만, 플레이 가능한 식물 2,093종 중 1,849종, 즉 88%에는 적어도 하나의 힌트가 있습니다. 전체 목록에는 4,272종을 넣었습니다.
성능·개인정보·검증
초기에는 Gemma를 휴대폰에서 직접 실행해 식물을 찾거나 상황별 힌트를 만들려 했습니다. 그러나 Gemma E2B는 2.6GB였고, 사진 한 장 처리에 2.3~2.9초가 걸렸습니다. 카메라를 실시간으로 쓰는 게임에는 너무 느렸습니다. 식물 지식을 묻는 시험에서도 근처 식물 20종 중 4종만 맞혔고, 7종은 오해를 부를 만큼 틀렸습니다. 상황별 힌트는 서로 다른 야외 시험에서 비슷한 문구를 반복했습니다. 개발자는 휴대폰에서 Gemma를 빼고, 검증한 힌트를 미리 만들어 넣는 쪽을 택했습니다.
지역 식물 목록을 요청할 때는 좌표를 가장 가까운 위도·경도 1도 단위로 반올림한 뒤 iNaturalist에 보냅니다. 계정이나 로그인을 요구하지 않으며, iNaturalist는 요청의 IP 주소를 보게 됩니다. 인터넷이 없는 곳에서도 쓰도록 지역 조회 결과를 캐시하고, 보호자는 특정 지역의 12개월 목록을 미리 저장할 수 있습니다. 앱에는 Kotlin 단위 테스트 314개, Python 테스트 350개, 기기 및 종단 간 테스트 120개가 포함됐습니다. 개발자는 오프라인 사용과 안전성을 함께 고려해 모델의 역할을 좁히고, 최종 판정은 명시적인 코드 규칙으로 처리했습니다.
원문: dev.to / 번역·요약: Trawling