Discover us

About us

Projects

Blog

Events

Members

Project Blog

GDGoC CAU 개발자와 디자이너의 작업 과정과
결과물을 공유하는 공간입니다.

어떻게 프로젝트를 시작하게 되었고,
진행하면서 느낀 개발자와 디자이너의
생생한 스토리를 직접 확인해보세요!

Project

Blinder

  • 박일상, 이현섭, 장준성
  • 2024. 10. 31.
Blinder

Blinder

notion image
시각장애인은 음식점에서 스스로 주문할 수 없을까?
 
앞을 볼 수 없는 시각장애인에게 음식점에서 주문을 하는 것은 매우 도전적인 일입니다.
저희 Blinder 팀은 이들에게 점자 메뉴판을 제공하는 것이 해결책이 되지 않을까 생각했습니다.
그러나 9.6%의 시각장애인만이 점자를 사용할 수 있다국립국어원의 통계자료(2020)가 그렇지 않음을 시사합니다.
그리하여 휴대폰 카메라를 통해 메뉴판을 ‘인식’하여 타인의 도움 없이 원하는 음식을 주문할 수 있게 만드는 앱, Blinder를 제작하기로 했습니다.

프로젝트 소개

Blinder Github 링크
  • 작업기간 - 2023/01/20 ~ 2023/04/01
  • 참여인원 및 역할
    • 박일상
      AI, Server
      이현섭
      AI
      장준성
      Flutter
      한신
      Flutter

구현 기능 소개

🎮유스케이스

Blinder는 다음과 같은 과정을 통해 시각장애인에게 음식점 메뉴를 안내합니다.
유스케이스
유스케이스

1. 메뉴판 자동 탐지

  1. 어플을 실행하면 카메라 화면이 표시됩니다.
  1. Tensorflow Lite로 구현한 메뉴판 탐지 모델이 메뉴판을 실시간으로 탐지합니다.
  1. 메뉴판 촬영을 위해 TTS(텍스트 음성)로 사용자에게 화면 고정을 지시합니다.
예시 사진
메뉴를 탐지했을 때의 화면
메뉴를 탐지했을 때의 화면
 

2. 자동 촬영 및 전처리

  1. 사용자가 메뉴판이 탐지된 화면을 일정 시간동안 고정하면 자동으로 촬영합니다.
  1. 이미지로부터 메뉴 정보를 추출하기 위해 다음과 같은 전처리 과정을 진행합니다.
    1. 클라이언트 상태
      전처리
      Offline
      앱에 내장된 Google ML Kit OCR패키지를 이용해 메뉴 텍스트 정보를 추출합니다.
      Online
      보다 정확한 정보를 추출합니다. - OpenCV를 이용해 이미지를 메뉴판 부분만 잘라 재생성합니다. - 보다 높은 정확도를 제공하는 Google Vision API에 요청하여 메뉴 텍스트 정보를 추출합니다.
  1. TTS로 사용자에게 전처리하는 동안 대기할 것을 안내합니다.
예시 사진
전처리 과정 중 안내 화면
전처리 과정 중 안내 화면
 

3. 메뉴 텍스트 정보 가공

OCR 텍스트 정보 예시
OCR 텍스트 정보 예시
  1. OCR 텍스트 정보는 꼭지점 좌표 정보가 있는 블록 형태로 추출됩니다.
  1. 메뉴 이름과 메뉴 가격을 매칭하기 위해 별도로 알고리즘을 개발했습니다. 알고리즘의 핵심 원리는 좌표 정보를 이용해 텍스트 블록들의 기하학적인 정렬 상태와 밀도를 계산하여 매칭하는 것입니다.
 
텍스트 정보 처리의 종합적인 과정을 도식화하면 다음과 같습니다.
메뉴 텍스트 정보 처리 과정
메뉴 텍스트 정보 처리 과정

4. 메뉴 정보 제공

  1. 모든 것이 끝났습니다!🎉 매칭된 메뉴 이름과 메뉴 가격이 화면에 표시됩니다.
  1. 사용자는 TTS를 통해 메뉴 이름과 가격을 안내받습니다.
예시 사진
메뉴 정보 화면
메뉴 정보 화면
 

데모 버전

데모 버전 보기
notion image

Tech Stack & Architecture

Blinder는 다음과 같이 설계되었습니다.
Blinder Architecture
Blinder Architecture

📱App

  • Firebase
    • 메뉴판 탐지 모델은 앱에 내장되어 있지 않고 FirebaseML Kit API에 요청하여 다운로드 받아 사용됩니다. 한 번 다운로드하면 오프라인 상태에서도 서비스를 이용할 수 있습니다.
    • Firebase에서 새로운 모델로 변경 및 등록해두면 변경된 모델로 자동 다운로드합니다.
  • Flutter
    • Flutter크로스 플랫폼 툴킷으로써 단일 코드로 여러 플랫폼(Android, iOS)에서 서비스를 제공합니다. 또한, 구글에서 만든 FlutterFirebase, Tensorflow Lite 등의 다른 구글 기술과 쉽게 연결할 수 있어 빠르게 개발할 수 있기 때문에 선택했습니다.
    • 서버로부터 응답받은 OCR 텍스트 정보를 메뉴 정보로 가공하는 핵심 알고리즘을 제작했습니다.
  • Tensorflow Lite
    • 메뉴판을 탐지하는 커스텀 모델Tensorflow Liter Maker를 이용해 구현했습니다.
    • 실시간으로 메뉴판을 탐지하기 위해 ML Kit의 객체 인식 패키지를 이용했습니다. 이 패키지는 분류형 모델을 이용할 수도 있는데 메뉴판과 안내판(음식 효능, 음식점 소개글 등)을 가려내어 탐지할수 있도록 분류형 모델로 학습하였습니다.

📡Server

  • FastAPI
    • 전처리 서버와의 통신에 사용된 기술입니다.
    • 자동 촬영된 메뉴판 이미지를 받아 OCR 텍스트 정보를 추출합니다.
  • Google App Engine
    • 전처리 서버 배포를 위해 사용된 기술입니다.
  • OpenCV
    • 보다 높은 정확도를 위해 FastAPI 요청으로 받은 이미지를 흑백 처리한 후 이미지에서 메뉴판 부분만 잘라(Crop)내어 새로운 이미지로 재생성합니다.
    • 새로운 이미지는 Cloud Vision에게 전달되어 OCR 텍스트 정보가 추출됩니다.
    •