LA Hacks에서 FireSight 구축하기: 드론의 시야를 스마트 글래스에 담다
요약
본 기사는 공중 촬영 영상, AI 분석, 지휘 대시보드를 스마트 글래스에 통합하여 현장 정보 전달의 효율성을 높이는 FireSight 프로젝트를 소개합니다. 드론에서 수집된 비디오와 위치 데이터를 백엔드(Python/FastAPI)가 처리하고, 이를 최종적으로 착용자에게 실시간으로 제공하는 시스템 아키텍처를 상세히 설명합니다.
핵심 포인트
- 공중 정보와 지상 정보를 연결하여 현장 인지도를 높임.
- DJI 드론-Beagle Eyes-FireSight 백엔드-스마트 글래스로 이어지는 복합 아키텍처 구축.
- 백엔드는 Python/FastAPI, OpenCV, Gemini SDK를 활용하며, 양방향 데이터 흐름을 구현함.
- 원격 측정과 이미지의 동기화 문제를 해결하기 위해 '쌍으로 이루어진 번들' 방식을 채택함.
지상에 있는 사람들에게 전달되는 높은 곳에서의 시야. 고개를 들고, 손을 자유롭게 움직일 수 있다.
드론이 위험 요소를 감지했지만, 그곳으로 접근하는 사람이 주변 환경을 보는 데 바쁘다면 어떻게 될까?
이 질문이 FireSight의 시작점이었습니다. 저희 LA Hacks 2026 프로젝트입니다. 유용한 정보가 누군가에게 도달할 수 있도록 공중 촬영 영상, AI 분석, 지휘 대시보드, 그리고 스마트 글래스를 연결하는 것을 목표로 했습니다. 이를 통해 사용자가 다른 화면을 확인하기 위해 멈출 필요가 없게 만들고자 했습니다.
산불 인식이 저희의 출발점이었습니다. 더 넓은 비전에는 근처에서 무슨 일이 일어나고 있는지에 대한 더 나은 이해를 할 수 있는 등산객, 거주자, 현장 팀이 포함됩니다.
해커톤 기간 동안 이 프로젝트는 드론-글래스 개념에서 지리적 위험 주석(geographic hazard annotations), 착용자 위치 보고(wearer location reporting), 글래스 미니맵(glasses mini-map), 그리고 SOS 및 man-down 기능을 갖춘 프로토타입으로 발전했습니다.
💻 GitHub repository
🌐 FireSight dashboard
- 저희는 정보 격차에서 시작했습니다. 항공 영상에는 많은 정보가 담겨 있지만, 여전히 누군가가 그것을 해석하고 지상에 있는 사람에게 중요한 것을 전달해야 합니다. 저희는 세 가지 질문에 초점을 맞췄습니다:
- 가장 가까운 지도상의 위험 요소는 어디인가?
- 대략 얼마나 떨어져 있는가?
- 착용자는 그곳으로 더 가까이 이동하는가, 아니면 더 멀어지는가? 또한 정보가 되돌아갈 수도 있어야 했습니다. 지휘관은 착용자의 보고된 위치, 장치 상태, 그리고 도움 요청을 볼 수 있어야 합니다. 이것이 저희를 양방향 시스템으로 이끌었습니다: 공중 정보는 착용자 쪽으로 이동하고, 위치 및 상태 보고는 지휘부 쪽으로 돌아옵니다.
- 저희는 시스템을 연결된 부분들로 나누었습니다. 저희 아키텍처는 여러 환경을 연결합니다:
DJI 드론
↓
Beagle Eyes: 비디오, 시각 오도메트리(visual odometry), 그리고 지리적 원격 측정(geographic telemetry)
↓
FireSight 백엔드: 수집(ingestion), 분석, 및 위험 매핑
↓
Even Realities 휴대폰 앱 ↔ G2 스마트 글래스
↓
착용자 위치, 원격 측정, 그리고 승인
↓
공유 지휘 대시보드
백엔드는 Python과 FastAPI를 사용하며, 이미지 처리 및 분석을 위해 OpenCV, NumPy, 그리고 Google의 Gemini SDK를 활용합니다. 대시보드는 MapLibre를 사용하고, 글래스 앱은 TypeScript, Vite, 그리고 Even Hub SDK를 사용합니다.
GPU 의존적인 드론 처리는 별도의 컴퓨터에서 진행했으며, 백엔드와 대시보드를 Render에 함께 배포했습니다.
- 저희는 드론 통합 작업을 수행했습니다. 드론 측에서는 비디오를 처리하고 카메라 움직임을 추정하기 위해 깊은 시각 오도메트리(deep visual odometry)를 사용하는 Beagle Eyes를 사용합니다. 가장 큰 통합 문제 중 하나는 '프레임'이 실제로 무엇을 포함하는지에 대해 합의하는 것이었습니다. 원격 측정 메시지 근처에 도착한 이미지가 반드시 같은 순간을 묘사한다는 의미는 아닙니다. 이는 시스템이 카메라 위치와 방향을 사용하여 지도에 주석을 표시할 때 중요합니다. 저희는 쌍으로 이루어진 이미지 및 원격 측정 번들(paired image and telemetry bundles)을 중심으로 푸시 통합을 구축했습니다. 각 업로드에는 소스 프레임 ID, 전송 세션, 타임스탬프, JPEG 데이터, 그리고 체크섬이 포함됩니다. 수신기는 중복되거나 오래된 프레임을 거부하고 분석을 통해 소스 식별자를 보존할 수 있습니다. 이를 통해 경고를 입력으로 추적하는 더 명확한 방법을 얻었습니다. 또한 드론 컴퓨터가 해당 경로에 인바운드 터널이 필요하지 않은 상태로 호스팅되는 백엔드로 데이터를 전송할 수 있도록 아웃바운드 HTTPS 업로드도 사용했습니다.
- 저희는 비디오 캡처와 AI 추론이 서로 다른 속도로 실행되어 뒤처지는 것을 방지하도록 파이프라인을 설계했습니다. 모든 캡처된 프레임을 처리하는 것은 쌓이는 큐(queue)를 만들 수 있으며, 시스템이 몇 초 전에 일어난 일을 설명하게 만듭니다. 저희는 유한하고 최신 정보만 사용하는 버퍼링(bounded, latest-only buffering) 방식을 사용했습니다. 전송기는 보류 중인 하나의 프레임을 유지하며, 분석은 중간 프레임을 건너뛰고 더 새로운 정보를 처리할 수 있습니다. 이는 유용한 엔지니어링 교훈이었습니다. 이러한 종류의 프로토타입에서는 모든 프레임을 처리하는 것보다 신선도가 더 중요할 수 있다는 것입니다. 또한 오래된 이미지나 경고가 조용히 현재인 것처럼 나타나는 것을 방지하기 위해 타임스탬프와 오래된 소스 처리(stale-source handling)를 추가했습니다.
AI 분석 및 운영자 주도 어노테이션을 추가하여 FireSight는 OpenCV 휴리스틱 분석 경로와 Gemini 비전-언어 모델 경로를 포함합니다. Gemini 통합은 글래스에 적합한 형식의 구조화된 경고를 지원합니다. 또한, 운영자가 “불, 연기, 사람”과 같은 어노테이션을 요청할 수 있는 대시보드 컨트롤도 추가했습니다. 어노테이션 파이프라인은 감지된 이미지 영역을 가져와 카메라 기하학 및 지리적 원격 측정(geographic telemetry)을 사용하여 지상에서의 위치를 추정합니다. 이로써 중요한 구분이 도입되었습니다: 이미지에서 무언가를 감지하는 것과 그것을 지리적으로 찾는 것은 별개의 문제입니다. 지도상의 배치는 카메라 자세(camera pose), 지리 변환(geographic transform), 및 스케일 보정에 의존합니다. 따라서 투영된 위험 위치는 근사치로 취급됩니다. 어노테이션은 또한 무한정 지도에 남아있지 않고 만료되기도 합니다.
4. 커맨드 대시보드를 구축했습니다
우리는 다음을 통합하는 지도 중심의 대시보드를 개발했습니다:
5. 드론 비디오 및 프레임 정보.
6. 카테고리 및 가시성 제어 기능을 갖춘 지리적 어노테이션.
7. 보고된 착용자 위치.
8. 움직임 및 배터리 상태.
9. 보고된 좌표를 포함하는 SOS 및 man-down 배너.
10. 글래스 앱이 렌더링했다고 보고한 텍스트를 보여주는 G2 디스플레이 카드. 우리는 지도 스타일을 개선하고, 지리적 원점 처리(geographic-origin handling)를 추가했으며, 새로운 어노테이션을 찾기 쉽게 만들었습니다. 놀라울 정도로 유용한 기능은 디스플레이 보고 루프였습니다. 백엔드에서 경고를 게시하는 것이 글래스 앱이 이를 수락했는지 알려주지 않습니다. 앱은 표시 상태를 서버로 다시 보고하여, 백엔드, 휴대폰, SDK, 및 대시보드 간의 연결을 검사하기 쉽게 만듭니다. 별도의 착용자 터치로 경고를 인지할 수 있습니다. SDK의 수락만으로는 누군가 읽었는지 증명하지 못합니다.
11. 정보를 착용자 개인화했습니다
다음으로, Even 앱을 통해 휴대폰 GPS 보고 기능을 추가했습니다. 백엔드는 이 보고된 위치를 사용하여 지도상의 위험까지의 거리와 방위각(bearing)을 계산합니다. 이를 통해 글래스는 다음과 같은 메시지를 표시할 수 있습니다: Demo fire ~160 m NE 접근 중
우리는 100미터 미만의 임계 상태를 포함한 거리 기반 경고 우선순위와 착용자를 중심으로 하는 북쪽 방향의 미니 지도를 추가했습니다. 지도 스케일은 위험물과의 거리에 따라 변경됩니다.
이러한 임계값들은 검증된 안전 경계라기보다는 프로토타입 동작입니다. 또한, 우리는 하드웨어의 한계 내에서 작업해야 했습니다. 이 안경은 신뢰할 수 있는 머리 방향 나침반(head-facing compass orientation)을 제공하지 않으므로, 위험물이 착용자의 왼쪽이나 오른쪽에 직접 있다는 식으로 주장하기보다는 북동쪽과 같은 지리적 방향을 사용합니다.
- SOS 및 만다운(man-down) 확인 기능 추가: 안경이 위치 정보와 원격 측정 데이터(telemetry)를 전송할 수 있게 되자, 착용자가 어떻게 도움을 요청할 수 있는지 탐색했습니다. 템플(temple) 부분을 잡으면 SOS가 발생하며, 이는 착용자가 보고한 위치와 함께 대시보드에 표시됩니다. 또한 실험적인 낙상 확인 순서(fall-check sequence)도 구현했습니다:
- 강한 가속도 이벤트 감지.
- 이후 정지 상태 확인.
- “괜찮으신가요?”라고 질문.
- 착용자가 탭하여 확인하도록 허용.
- 20초 이내에 확인이 없으면 MAN DOWN으로 보고합니다. 단일 움직임 급증만으로는 충분하지 않았습니다. 우리는 충격, 지속적인 움직임, 정지 상태, 사용자 응답을 고려하는 순서가 필요했습니다. 이에 따라 충돌 후 정지, 충돌 후 계속된 움직임, 그리고 취소되는 시나리오를 포함한 자동화 테스트를 추가했습니다. 이는 여전히 물리적 테스트가 훨씬 더 필요한 프로토타입 휴리스틱(heuristic)입니다.
- 하드웨어 및 설치 세부 사항 디버깅: 가장 실용적인 어려움 중 일부는 SDK 동작과 배포에서 발생했습니다. 안경 문서에는 우리가 우회한 두 가지 SDK 문제가 설명되어 있습니다. 첫 번째는 입력 이벤트가 시작 예제와 다른 이벤트 필드를 통해 도착하는 것이었고, 두 번째는 핫 리로드(hot reload)가 세션당 한 번만 생성될 수 있는 시작 페이지를 다시 만들려고 시도하는 것이었습니다. 또한 패키지 설치에는 신중한 버전 관리가 필요하다는 것을 배웠습니다. 버전을 높이지 않고 패키지를 교체하면 휴대폰이 이전 복사본을 실행하게 될 수 있습니다. 네트워킹은 또 다른 익숙한 함정을 도입했습니다. 127.0.0.1은 연결을 여는 장치를 의미합니다.
거기에 연결된 호스팅 대시보드는 팀원의 드론 컴퓨터에 도달할 수 없습니다. 이러한 문제들로 인해 저희는 설치, 권한, 백엔드 구성, 패키지 업데이트 및 연결 문제 해결에 대한 문서를 작성하게 되었습니다.
8. 저희는 프로젝트를 통합하고 시연을 더 쉽게 만들었습니다. 각 브랜치는 애플리케이션의 서로 다른 부분을 가지고 있었습니다. 이들을 하나로 모으기 위해서는 호환 가능한 API 계약, 새로운 글래스의 동작 방식, 그리고 지도 중심 대시보드를 유지해야 했습니다. 저희는 main에서 배포하고, 드론 경고 전송을 일시 중지하는 설정을 준수하도록 호환성 수정(compatibility fix)을 추가했습니다. 또한 시뮬레이터 입력과 선택적(opt-in), 명확하게 표시된 데모 위험 상황을 구축했습니다. 이를 통해 모든 개발 주기마다 드론 비행이 필요하지 않은 상태에서 GPS 거리, 지도 업데이트 및 웨어러블 상호 작용을 테스트할 수 있습니다. 이 저장소에는 데이터 수집(ingestion), 분석, 주석 처리(annotations), 착용자 보고(wearer reporting), 표시 동작(display behavior) 및 안전 상태 로직을 다루는 자동화된 테스트가 포함되어 있습니다. 이러한 검사들은 개별 구성 요소를 확인하는 데 도움이 되지만, 실제 드론, 실시간 모델 응답, 휴대폰 및 물리적 글래스를 사용한 연속적인 테스트를 대체하지는 못합니다. 저희가 배운 것—그리고 다음 단계 가장 어려웠던 부분은 구성 요소 간의 연결을 신뢰할 수 있게 만드는 것이었습니다: 이미지와 원격 측정(telemetry) 페어링, 정보의 최신 상태 유지, 표시 승인과 인간의 인지(acknowledgement)를 구별하고, 지리 데이터를 작은 디스플레이에서 읽을 수 있는 무언가로 변환하는 것입니다. 이 저장소에는 이제 이러한 연결된 구성 요소들이 포함되어 있지만, 반복 가능하고 완전히 검증된 드론-글래스 현장 시연은 여전히 중요한 다음 단계입니다. 또한 지리적 보정(geographic calibration) 개선, 오탐지 경보 평가, 개인 위치 데이터에 대한 접근 제어 추가, 재시작 간 상태 유지(persist state across restarts), 그리고 오프라인 동작 탐색을 원합니다. 음성 캡처는 기능 플래그 뒤에 존재하지만, 백엔드 수신기는 아직 미완성입니다. FireSight는 해커톤 프로토타입이며, 실제 비상 상황 지원을 하기 전에 더 많은 작업이 필요합니다.
이 프로젝트를 구축하면서 우리는 공중 인식(aerial perception), 웨어러블 인터페이스, 그리고 양방향 현장 통신이 어떻게 함께 작동할 수 있는지 탐구하는 데 도움을 받았습니다. 우리의 목표는 공중 정보를 더 쉽게 이해하고—눈을 들고 있는 상태에서도—더 쉽게 접근할 수 있도록 만드는 것입니다. 코드, 아키텍처, 설치 가이드 및 한계점은 저희 GitHub 저장소에서 확인해 보세요.
[https://github.com/lily1c/la-hacks-2026]
#LAHacks #AI #드론 #웨어러블기술
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기