시각장애인은 음식점에서 스스로 주문할 수 없을까?
앞을 볼 수 없는 시각장애인에게 음식점에서 주문을 하는 것은 매우 도전적인 일입니다.
저희 Blinder 팀은 이들에게 점자 메뉴판을 제공하는 것이 해결책이 되지 않을까 생각했습니다.
그러나
9.6%
의 시각장애인만이 점자를 사용할 수 있다는 국립국어원의 통계자료(2020)가 그렇지 않음을 시사합니다.그리하여 휴대폰 카메라를 통해 메뉴판을 ‘인식’하여 타인의 도움 없이 원하는 음식을 주문할 수 있게 만드는 앱, Blinder를 제작하기로 했습니다.
프로젝트 소개
Blinder Github 링크
- 작업기간 -
2023/01/20
~2023/04/01
- 참여인원 및 역할
박일상 | AI, Server |
이현섭 | AI |
장준성 | Flutter |
한신 | Flutter |
구현 기능 소개
🎮유스케이스
Blinder는 다음과 같은 과정을 통해 시각장애인에게 음식점 메뉴를 안내합니다.
1. 메뉴판 자동 탐지
- 어플을 실행하면 카메라 화면이 표시됩니다.
Tensorflow Lite
로 구현한 메뉴판 탐지 모델이 메뉴판을 실시간으로 탐지합니다.
- 메뉴판 촬영을 위해 TTS(텍스트 음성)로 사용자에게 화면 고정을 지시합니다.
예시 사진
2. 자동 촬영 및 전처리
- 사용자가 메뉴판이 탐지된 화면을 일정 시간동안 고정하면 자동으로 촬영합니다.
- 이미지로부터 메뉴 정보를 추출하기 위해 다음과 같은 전처리 과정을 진행합니다.
클라이언트 상태 | 전처리 |
Offline | 앱에 내장된 Google ML Kit OCR패키지를 이용해 메뉴 텍스트 정보를 추출합니다. |
Online | 보다 정확한 정보를 추출합니다.
- OpenCV 를 이용해 이미지를 메뉴판 부분만 잘라 재생성합니다.
- 보다 높은 정확도를 제공하는 Google Vision API 에 요청하여 메뉴 텍스트 정보를 추출합니다. |
- TTS로 사용자에게 전처리하는 동안 대기할 것을 안내합니다.
예시 사진
3. 메뉴 텍스트 정보 가공
- OCR 텍스트 정보는 꼭지점 좌표 정보가 있는 블록 형태로 추출됩니다.
- 메뉴 이름과 메뉴 가격을 매칭하기 위해 별도로 알고리즘을 개발했습니다. 알고리즘의 핵심 원리는 좌표 정보를 이용해 텍스트 블록들의 기하학적인 정렬 상태와 밀도를 계산하여 매칭하는 것입니다.
텍스트 정보 처리의 종합적인 과정을 도식화하면 다음과 같습니다.
4. 메뉴 정보 제공
- 모든 것이 끝났습니다!🎉 매칭된 메뉴 이름과 메뉴 가격이 화면에 표시됩니다.
- 사용자는 TTS를 통해 메뉴 이름과 가격을 안내받습니다.
예시 사진
데모 버전
데모 버전 보기
Tech Stack & Architecture
Blinder는 다음과 같이 설계되었습니다.
📱App
Firebase
- 메뉴판 탐지 모델은 앱에 내장되어 있지 않고
Firebase
의 ML Kit API에 요청하여 다운로드 받아 사용됩니다. 한 번 다운로드하면 오프라인 상태에서도 서비스를 이용할 수 있습니다. Firebase
에서 새로운 모델로 변경 및 등록해두면 변경된 모델로 자동 다운로드합니다.
Flutter
Flutter
는 크로스 플랫폼 툴킷으로써 단일 코드로 여러 플랫폼(Android, iOS)에서 서비스를 제공합니다. 또한, 구글에서 만든Flutter
는Firebase
,Tensorflow Lite
등의 다른 구글 기술과 쉽게 연결할 수 있어 빠르게 개발할 수 있기 때문에 선택했습니다.- 서버로부터 응답받은 OCR 텍스트 정보를 메뉴 정보로 가공하는 핵심 알고리즘을 제작했습니다.
Tensorflow Lite
- 메뉴판을 탐지하는 커스텀 모델을 Tensorflow Liter Maker를 이용해 구현했습니다.
- 실시간으로 메뉴판을 탐지하기 위해 ML Kit의 객체 인식 패키지를 이용했습니다. 이 패키지는 분류형 모델을 이용할 수도 있는데 메뉴판과 안내판(음식 효능, 음식점 소개글 등)을 가려내어 탐지할수 있도록 분류형 모델로 학습하였습니다.
📡Server
FastAPI
- 전처리 서버와의 통신에 사용된 기술입니다.
- 자동 촬영된 메뉴판 이미지를 받아 OCR 텍스트 정보를 추출합니다.
Google App Engine
- 전처리 서버 배포를 위해 사용된 기술입니다.
Google Cloud Vision
- 오프라인 상태일 때 사용하는 ML Kit OCR 패키지보다 높은 정확도를 보이는 API입니다.
OpenCV
- 보다 높은 정확도를 위해
FastAPI
요청으로 받은 이미지를 흑백 처리한 후 이미지에서 메뉴판 부분만 잘라(Crop)내어 새로운 이미지로 재생성합니다. - 새로운 이미지는
Cloud Vision
에게 전달되어 OCR 텍스트 정보가 추출됩니다.