← 프로젝트

USB 내시경 뷰어 앱

광고투성이 앱 대신, USB 내시경을 꽂으면 바로 켜지고 찍고 저장만 하는 Android 뷰어를 직접 만들었습니다.

NO.M-03
FIELD모바일 앱
SCALE미니
TOOLSKotlin · Android
DATE2026
REPOkhw1566/USB-CAM-APP

왜 만들었나

USB 내시경 카메라를 휴대폰에 꽂아 쓰려면 제조사가 안내하는 앱을 깔아야 했는데, 광고가 많고 필요 이상의 권한(마이크, 전체 저장소 등)을 요구했습니다. 정작 필요한 건 "꽂으면 화면이 나오고, 버튼 누르면 사진이 저장되는 것" 하나였습니다. 그래서 그 기능만 있는 앱을 직접 만들기로 했습니다.

기계 점검할 때 손 안 닿는 곳 들여다보는 용도

무엇을 만들었나

  • 꽂으면 자동 실행: USB 영상 장치(UVC 클래스 14, 복합 장치 239/2)를 연결하면 앱이 바로 뜹니다.
  • 실시간 미리보기: 장치가 지원하는 해상도 중 1080p 이하에서 가장 큰 크기를 고르고, 같은 크기라면 프레임이 잘 나오는 MJPEG 형식을 우선합니다.
  • 촬영과 저장: 화면의 셔터 버튼이나 내시경 케이블에 달린 물리 버튼으로 찍으면 Pictures/Endoscope 폴더에 ENDO_날짜_시각.jpg로 저장되고, 썸네일을 누르면 갤러리에서 바로 열립니다.
  • 최소 권한: 카메라 권한 하나만 요청합니다. 라이브러리가 끌고 오는 마이크·외부 저장소·포그라운드 서비스 권한은 매니페스트에서 직접 제거했습니다.

어떻게 만들었나

USB 내시경 뷰어 동작 흐름

  1. Android의 USB Host 기능과 UVCAndroid 라이브러리로 내시경을 일반 USB 카메라(UVC)로 다룹니다.
  2. 연결 → 권한 확인 → 해상도 선택 → 미리보기 → 촬영 순서를 상태 콜백(onAttach, onDeviceOpen, onCameraOpen…)에 맞춰 나눴습니다.
  3. 저장은 파일 경로를 직접 쓰지 않고 MediaStore를 통해 넣어서, Android 10 이상에서 저장소 권한 없이도 갤러리에 사진이 보이게 했습니다.
  4. 촬영 중 중복 입력을 막는 플래그, 셔터를 누를 때 화면이 번쩍이는 효과, 미리보기 중 화면이 꺼지지 않게 하는 처리 등 쓰는 사람 입장의 디테일을 챙겼습니다.

Kotlin 파일 하나(약 250줄)로 끝낸 작은 앱

결과

  • 광고 없이 꽂고 → 보고 → 찍는 세 단계만 남은 내시경 뷰어를 완성했습니다(minSdk 29, Android 10 이상).
  • 하드웨어(USB 장치 클래스, 영상 포맷)와 앱 권한 구조를 같이 이해해야 풀리는 문제였고, "필요한 만큼만 만든다"는 기준으로 기능과 권한을 줄였습니다.
  • 기계 정비·점검 현장에서 바로 쓸 수 있는 도구를 스스로 만들어 쓴 경험입니다.