창작의 설렘 - 네비게이션 미러(Navigation Mirror)

MIE capstone
이동: 둘러보기, 검색

프로젝트 소개

프로젝트 명

 네비게이션 미러(Navigation Mirror)

프로젝트 기간

2022.4 ~ 2022.6

팀 소개

 서울시립대학교 기계정보공학과 20174300** 권*용 (팀장)
서울시립대학교 기계정보공학과 20174300** 문*수
서울시립대학교 기계정보공학과 20174300** 유*
서울시립대학교 기계정보공학과 20164300** 윤*승

프로젝트 개요

프로젝트 요약

백화점이나 대형 상가와 같은 건물에서는 내부에 여러 매장이 위치하는데, 이로 인해 원하는 매장까지 가는 길이 복잡한 경우에는 매장을 찾기 위해 많은 시간이 소요되기도 한다. 이를 해결하기 위해 현재 위치에서 고객이 찾는 매장의 위치까지의 경로를 스크린에 띄워주는 내비게이션 미러를 제작한다. 평소에는 거울의 역할을 하지만, 기능을 활성화하고 목적지를 입력할 경우 경로를 출력한다. 이 때 음성인식 기술을 사용하여 전자제품을 다루기 어려워하는 IT취약계층의 접근성을 높이고, 개인 스마트폰에서 경로를 확인할 수 있는 QR코드를 제공하여 편의성을 높이도록 한다.

프로젝트의 배경 및 기대효과

인간이 의사소통을 하기 위해 사용하는 일반적이고 효과적인 수단은 언어(말과 글)이고, 음성은 인간의 가장 자연스러운 의사소통 방식이다. 말의 내용과 발화자의 감정을 인식하고 의미를 이해하여, 상황에 따라 자연스러운 대화를 주고받기 위해 필요한 음성 언어 처리 기술은 인간의 자연어 발화를 컴퓨터가 자동으로 이해하고 처리하는 알고리즘을 연구하는 분야로, 대화형 개인 비서 에이전트, 인 공지능 AI 스피커, 자동 통번역, 음성 대화 질의 응답(QA) 시스템 등 다양한 응용 서비스 사례를 들 수 있다.

그림1. 음성 대화 인터페이스 시스템 구성


Speech Recognition, 인공 청각이라 불리는 STT(Speech-to-Text)는 위의 과정 중사람의 음성 인터페이스를 통해 텍스트 데이터를 추출 해내는 기술이다.
백화점이나 대형 상가와 같이 건물에 많은 매장이 입점해 있는 경우, 층마다 안내판이 있다고 하더라도 원하는 매장을 찾는 것이 힘든 경우가 많다. 핸드폰을 다루고 검색하는 것에 익숙한 고객의 경우 어플이나 인터넷을 통해 매장의 위치를 찾을 수도 있지만 많은 고객의 경우 그렇지 못하는 경우가 많다. 이러한 불편함 때문에 코엑스와 같은 대형 건물에는 각 층에 키오스크가 배치되어있어 길을 찾을 수 있는 지도를 제공해준다. 하지만 이러한 키오스크는 터치 방식을 사용하여 IT 취약계층의 경우 사용하기 힘든 경우가 많고 핸드폰으로 경로 정보를 보내주는 것과 같은 개인화된 서비스를 제공해주지 못한다. 이번 프로젝트를 통해 앞서 설명한 STT 기술을 이용하여 몸이 불편하신 분들이나 IT 취약계층에서도 쉽게 접근할 수 있고 QR코드를 이용하여 핸드폰에 원하는 경로를 저장할 수 있는 개인화된 서비스를 제공할 수 있을 것으로 생각된다.

프로젝트 개발 목표


그림2. 목적계통도


1. 편의성

  • 직관성
해당 시스템은 일반 사용자 이외에 IT취약 계층에게도 높은 접근성을 제공하는 것을 목표로 하고 있기 때문에 직관성 높은 인터페이스를 제작하는 것이 중요하다. 네비게이션에 초음파 센서를 부착하여 1m이내의 물체가 인지되면“안녕하세요, 길찾기 기능을 사용하려면 아무 버튼이나 눌러주세요.” 와 같은 문구를 입력하여 사용자의 접근성을 높인다. 음성 인식 명령부터는 화면에 “특정 버튼을 눌러주세요.”처럼 필요한 동작을 명시하고 안내 메시지 등을 통해 동작에 대한 적절한 입력을 할 수 있도록 한다.
  • 정확성
사용자가 편리하게 시스템을 이용하기 위해서는 사용자의 음성 명령을 인식하여 텍스트로 변환하는 STT기술이 정확해야 하고 STT기술을 통해 변환된 텍스트와 유사성이 높은 목적지 후보군들을 올바르게 추출해야 한다. 이를 위해서는 google web API를 사용하고 문자열 비교 알고리즘에 임계값을 주어 서버에 저장된 장소들의 명칭 텍스트 유사도가 높은 장소 후보군들이 추출되도록 한다. 외부에 소음이 발생하는 상황에서도 음성 인식 변환의 정확성이 유지되도록 해야 하는데 이는 주변 소음을 제거해주는 함수를 사용한다. 또한 목적지가 결정되었을 때 Database에서 목적지까지 정확한 경로 정보와 QR코드를 받아와 전달해 주어야 한다.

2. 사양 및 성능

  • 경제성
해당 시스템은 건물 내 모든 층의 엘리베이터 앞에 위치하는 것을 목적으로 하므로 경제성을 고려하여 설계해야 한다. 하지만 사용자의 편의성을 저하시키지 않는 범위에서 경제성이 확보되도록 설계해야 한다.
  • 처리속도
해당 시스템에서 사용자의 입력시간을 제외한 처리속도는 google web API에서 음성 인식에 소요되는 시간, 인식된 텍스트가 Database의 어떤 목적지인지를 비교하는 알고리즘에 소요되는 시간, 사용자가 목적지를 선택하였을 때 화면에 띄워줄 때까지 소요되는 시간으로 총 3가지가 있다. 이때, 사용자가 불편함을 느끼지 않도록 음성 명령을 텍스트로 변환하고 Database와 비교하는 과정과 서버에서 가져온 데이터를 출력하는 과정에서 지연을 최소화하여야 한다.

3. 유지 보수성

  • 수정 용이성
학교 건물과 같이 건물 내부 구성이 자주 바뀌지 않는 경우 데이터 수정이 큰 문제가 되지 않는다. 하지만 대형 상가의 경우 매장이 입점하거나 폐점하는 상황이 발생할 수 있으므로 이를 편리하게 수정할 수 있어야 하고, 수정된 데이터가 시스템에 반영되어야 한다. 이를 위해 관리자용 웹페이지를 만들어 관리자는 간편하게 Database를 수정할 수 있게 하고 시스템은 Database에 실시간으로 접근하여 바로 반영할 수 있도록 한다.
  • 보수성
해당 내비게이션 미러는 입력장치가 고장나거나 서버와 연결이 끊길 경우 기능의 사용이 불가하므로 이를 쉽게 교체하거나 수리할 수 있어야 한다.

동작 시나리오

1. 내비게이션 미러 시나리오

그림3. 내비게이션 미러 시나리오

2. 관리자용 웹페이지 시나리오

그림4. 관리자용 웹페이지 시나리오


구현 내용

시스템 설계 및 구현

1. Speech to Text (STT)

그림5. 음성인식 실행예시


음성을 인식하여 텍스트를 출력해주는 STT는 Python패키지인 SpeechRecognition의 구글 웹 음성인식 API를 사용하여 구현하였다. 음성 입력의 경우, 동일한 패키지의 listen 함수를 통해 구현하였고 원하는 시간 동안 음성 정보를 받아올 수 있다. 소리의 잡음의 경우 잡음 제거 기능이 있는 마이크를 사용하여 줄여주었지만, 음성인식의 경우 잡음으로 인한 인식률 저하 문제가 큰 문제라고 판단되었고 라즈베리파이 기준 실행시간이 0.2초밖에 걸리지 않아 adjust_for_ambient_noise 함수를 통해 추가 잡음 제거를 진행해주었다.
구글 웹 음성인식 API를 통해 받아온 값은 문자열로 해당 문자열이 어떤 호실에 해당하는지 데이터베이스와 비교가 필요하였다. 음성 입력과 호실 이름이 항상 정확히 일치하는 것은 불가능하기에 difflib의 SequenceMatcher 함수를 통해 문자열 사이의 비슷한 정도를 score로 계산하고 이 score가 threshold(Document의 추천 값인 0.6을 사용)보다 큰 경우 해당 호실의 정보를 list에 추가하도록 하였다. 이때 사용자가 입력을 전체 이름으로 주지 않고 하나의 단어로 주었을 때 score값이 떨어져 값을 가져오지 못하는 문제가 발생하였다. 이를 개선하기 위해 입력값이 데이터베이스의 이름 안에 포함되면 list에 추가하도록 구현하였다. 또한 데이터베이스에 저장된 정보 중 호실 번호와 담당자 이름의 경우는 입력 문자열에 포함되어있는지를 판단하여 있으면 list에 추가하도록 하였다. list는 마지막에 반환되어 UI 구현에서 사용할 수 있도록 한다. list는 [[호실 번호, 담당자 이름, 호실 이름, 담당자 번호, 세부사항], ...]로 구성되었다.

2. Database

데이터베이스로는 온라인으로 파이어베이스에 접근하여 사용한다. 파이어베이스는 구글에서 지원하는 클라우드 플랫폼으로, 파이어베이스의 Realtime Database에는 각 호실의 번호를 키로 하여 호실별 정보(호실 이름, 담당자 이름 , 담당자 번호, 호실 좌표)가 저장되어 있다. 또한 파이어베이스의 Storage에는 각 층을 디렉토리로 하여 장치의 위치(엘리베이터 앞)을 기준으로 목적지까지의 경로가 표시된 사진이 각 호실 번호로 저장되어 있다.


그림 6. Realtime Database에 저장되어 있는 호실 정보


해당 정보들은 python의 pyrebase4 패키지를 이용하여 접근할 수 있고, 이는 db_code.py에 선언해두었다. db_code.py를 import하게 되면 firebase 접근에 필요한 SDK를 이용하여 초기화하게 된다. db_code.py의 storage() 클래스를 통하여 파이어베이스의 storage에 접근할 수 있다. db_code.storage()에는 upload(filename), download(filename), get_url(filename) 함수를 이용하여 사진 파일을 파이어베이스에 업로드하거나 다운로드하고, Storage에 저장된 사진의 url 주소를 획득할 수 있다. db_code.py의 database() 클래스를 통하여 파이어베이스의 realtime database에 접근할 수 있다. db_code.database()에는 push(path, data), set(path, data), update(path, data), delete(path), read_data()를 통해 데이터베이스로부터 데이터 입력, 업데이트, 삭제 동작을 할 수 있다.


그림 7. storage에 저장된 경로 이미지


경로 이미지의 경우, 각 호실 이름으로 하여 파이어베이스의 storage에 저장되어있다. 사용자가 목적지를 선택할 경우, 해당 목적지의 호실 번호를 통해 경로 이미지를 다운로드받아 사용한다. 이 때, 매번 서버에 접근하는 것에 대한 오버헤드가 크므로 이를 줄이기 위해 기기에 경로 이미지를 저장하도록 한다. 이를 통해 서버 접근 시간을 줄이고 사용자가 편리하게 사용할 수 있도록 한다..
모든 경로 이미지를 저장하게 될 경우, 기기의 저장 공간을 크게 차지할 수 있으므로 SQLite를 이용하여 캐싱 기능을 구현하고, 파일 갱신의 경우에는 LRU(Least Recently Used) 방식을 채택한다. 경로 이미지를 다운로드 받을 때마다 다운로드받은 이미지와 시간을 데이터베이스에 저장한다. 데이터베이스에 저장되어있는 경로의 경우에는 저장된 경로 사진을 사용하고, 저장 시간을 갱신한다. 저장되어있지 않은 경로를 검색할 경우에는 먼저 데이터베이스에 저장된 경로의 수를 확인한다. 만약 저장된 경로의 수가 10개 이상일 경우, 검색된 시간이 가장 오래된 경로의 이미지를 삭제하고, 새로운 경로 이미지를 다운로드받아 차지하는 메모리를 유지하도록 한다.

3. 관리자용 웹사이트

관리자용 웹사이트는 로그인 화면, 관리자 수정 화면 2개의 웹페이지로 구성된다.


그림 8. 로그인화면


관리자용 웹사이트의 특성상 관리자에 해당하는 사용자만이 사용하므로, 사전에 제공받은 아이디와 비밀번호를 입력하여 로그인한다. 관리자가 아이디/비밀번호를 올바르게 입력하면 “로그인 성공” 메시지가 출력되고, 관리자 수정 화면 웹페이지로 이동한다. 관리자가 아이디/비밀번호를 틀리게 입력하면 오류 메시지 “로그인 실패: 아이디 또는 비밀번호를 확인하세요.”가 출력된다. 관리자의 로그인 성공/실패와 로그인/로그아웃 상태는 각각 파이어베이스의 auth()클래스의 signWithEmailAndPassword (email, password) 함수와 onAuthStateChanged(user) 함수로 구현하였다. email, password는 각각 관리자가 입력한 아이디와 비밀번호를 저장하고 있는 인자이고, user는 계정의 로그인 상태를 저장하는 인자이다.


그림 9. 관리자 수정 화면 : 초기화면


관리자 수정 화면은 최상단에 Log-out 버튼, Floor 버튼, Save 버튼, 호실 정보 입력창, Manage Zone, User View 로 구성된다. 관리자가 Log-out 버튼을 누르면 계정은 로그아웃 상태가 되며, 로그인 화면으로 이동하게 된다.


그림 10. 관리자 수정 화면 : 층 선택


관리자가 'Floor' 버튼을 활용하여 원하는 층을 선택하면 파이어베이스의 Storage에 저장된 각 층의 지도가 Manage Zone에 출력된다.


그림 11. 관리자 수정 화면 : 호실 선택


Manage Zone에 출력되는 지도 위에는 각 호실에 대한 버튼이 위치한다. 관리자는 각 버튼을 눌러 각 호실에 대한 정보를 제공받을 수 있다. 호실 정보는 파이어베이스 database()클래스의 ref(floorNumb + roomNumb)함수와 on(‘value’, (snapshot) => {}) 통해 읽어온다. floor Numb과 roomNumb은 데이터베이스의 층 폴더와 호실 폴더이름이 저장된 인자이다.‘value’는 데이터베이스에 저장되어 있는 value들을 가리키는 인자이고, 두 번째 인자인 함수는 ‘value’에 저장된 value를 활용하여 수행되는 함수이다. 호실의 정보는 호실 정보 입력창에 출력된다. 관리자가 제공받는 호실 정보는 담당자 이름(Charge), 호실 이름(Name), 담당자 번호(Call), 세부사항으로 구성된다. 관리자는 호실 정보 입력창에 새로운 정보를 입력하고 Save 버튼을 누르면 파이어베이서 Storage가 완전히 업데이트 될 때까지 저장중 화면이 출력된다. 업데이터가 완료되고 저장중 화면이 사라지면 파이어베이스 storage()클래스의 getDownloadURL() 함수를 사용하여 Storage로부터 읽어와 수정이 반영된 지도는 User View에 출력되어 관리자는 지도가 올바르게 수정되었는지 확인할 수 있다.


  • 그림 12. 관리자 수정 화면 : 저장중
  • 그림 13. 관리자 수정 화면 : 수정된 데이터 확인


4. UI 및 GPIO

UI는 총 6가지 화면으로 구성한다. 화면은 ‘대기 화면’, ‘홈 화면’, ‘음성 인식 화면’, ‘목적지 리스트 화면’, ‘경로 출력 화면’, ‘음성 인식 실패 화면’으로 구성한다.
  • 그림 14. 대기화면
  • 그림 15. 홈 화면
  • 그림 16. 음성 인식 화면


  • ‘대기 화면’은 내비게이션 기능을 실행하지 않는 동안의 화면으로, 검은색 바탕으로 구성하여 거울로서의 기능을 최대화하도록 한다.
  • ‘홈 화면’은 사람을 인식하고, 음성 인식을 실행하기 이전 화면이다. 인사 문구와 함께 내비게이션 기능을 사용하기 위한 안내 문구 ‘길찾기를 원하신다면, 선택 버튼을 누르고 목적지를 말해주세요.’가 출력된다. 화면 아래쪽에는 각각의 버튼이 어떤 모양을 하고 있는지 알 수 있도록 아이콘을 이용하여 출력한다.
  • ‘음성 인식 화면’은 음성 인식을 통해 목적지를 찾는 화면으로, 음성 인식이 실행되고 있음을 나타내는 아이콘과 함께 안내 문구 ‘빨간색 아이콘이 뜨면, 목적지를 천천히 말해주세요. 음성이 입력되고 있습니다. 잠시만 기다려 주세요.’가 출력된다.
  • 그림 17. 목적지 리스트 화면
  • 그림 18. 경로 출력 화면
  • 그림 19. 음성 인식 실패 화면


  • ‘목적지 리스트 화면’은 음성 인식을 통해 얻은 목적지 리스트를 출력하는 화면이다. 리스트에 출력되는 항목은 호실 번호, 담당자 이름, 호실 이름, 담당자 전화번호 순으로 출력되며, 사용자가 말한 목적지와 항목의 이름의 유사도가 높은 순서대로 출력되도록 한다. 리스트에서 목적지를 선택하기 위한 안내 문구 ‘검색된 목적지 리스트입니다. 다음 중 경로 안내 및 정보 열람을 원하는 목적지를 선택해 주세요.’가 출력된다.
  • ‘경로 출력 화면’은 ‘목적지 리스트 화면’ 에서 선택한 목적지까지의 경로를 출력해준다. 좌측 상단에는 목적지가 위치한 층이, 좌측면에는 엘리베이터 입구부터 목적지까지의 경로를 출력한다. 우측 상단에는 해당 경로 이미지를 볼 수 있는 url이 출력된다. QR코드 밑에는 QR코드 활용을 위한 안내 문구 ‘QR코드를 찍고 모바일로 경로 안내를 받아보세요!’ 가 출력되고, 하단에는 사용 종료에 대한 안내 문구 ‘홈 화면으로 돌아가시려면 선택버튼을 눌러주세요.’ 가 출력된다.
  • ‘음성 인식 실패 화면’은 ‘음성 인식 화면’ 에서 음성 인식에 실패했거나, 목적지를 찾지 못하였을 때 출력되는 화면이다. 음성 인식 실패에 대한 안내 문구 ‘목적지를 찾지 못하였습니다. 다시 시도하시려면 선택 버튼을 눌러주세요.’ 가 출력되고, 사용자가 사용하지 않을 경우를 고려하여 ‘10초 후 대기 화면으로 돌아갑니다.’ 를 출력하고, 10초 후 홈 화면으로 돌아간다.


그림 20. 버튼 모양 별 기능

GPIO는 화면 조정을 위한 버튼 3개와 초음파 센서로 구성한다. 센서들로부터 GPIO 핀을 통해 들어오는 입력은 QThread를 이용하여 구성한 쓰래드에서 처리하고, 입력에 따라 시그널을 보내 화면을 조정하도록 한다. 버튼의 경우 버튼이 눌렸을 때 버튼에 해당하는 동작을 하도록 구성하였다. 선택 버튼은 ‘음성 인식 화면’을 제외하고 다음 화면으로 이동하는 기능을 하고, 위 아래 버튼은 ‘목적지 리스트 화면’에서 원하는 목적지를 고르는 데에 사용되도록 한다. 초음파 센서의 경우, ‘대기 화면’일 때, 사용자가 거울 앞을 지나가면 이를 인식하고 화면을 ‘홈 화면’으로 전환하는 기능을 한다. 지나가는 사람의 거리는 1m로 제한하여 과도한 인식을 제한하도록 한다.

하드웨어 설계 및 구현

가. 내비게이션 미러 본체


그림 21. 본체 하드웨어 구성도


내비게이션 미러 본체 하드웨어의 구성은 다음과 같다. 모든 외부 장치는 라즈베리파이에 연결된다. 24인치 모니터를 사용하였으며 HDMI선으로 연결된다. 버튼(상, 하, 선택)과 초음파 센서는 GPIO로 연결되어 작동한다. 음성 인식을 위한 마이크는 저렴하고 부피가 작은 USB 마이크를 사용하였다. 데이터의 전송 속도를 높이기 위해 LAN을 사용하였다.


그림 22. 내비게이션 미러 본체 구성



원웨이미러필름을 아크릴 판의 전면에 붙여 하프 미러 기능을 구현하였다. 하프미러는 폭 47.5cm, 높이 172cm로 전신 거울의 역할을 할 수 있도록 하였다. 모니터 높이는 대한민국 평균 눈높이가 156cm인 것을 참조하여 모니터 중심의 높이가 156cm가 되도록 하였다. 라즈베리파이, 모니터, 브레드보드, 스피커는 본체 프레임 내부에 위치시켰다. 버튼 케이스와 마이크 & 초음파 센서 케이스는 본체 프레임 외부에 위치하며, 버튼 케이스는 우측 프레임, 마이크 & 초음파 센서 케이스는 좌측 프레임에 위치한다.


나. 버튼 케이스 및 마이크 & 초음파 센서 케이스


  • 그림 23. 버튼 케이스 설계
  • 그림 24. 마이크 & 초음파 센서 케이스 설계
내비게이션 미러에 사용되는 버튼(상, 하, 선택)과 마이크, 초음파 센서를 위치시킬 케이스를 설계하였다. 버튼 케이스와 마이크 & 초음파 센서 케이스는 같은 높이에 위치한다. 마이크와 초음파 센서가 내비게이션 미러의 전방을 향하고 있어 사람 인식 및 음성 입력이 용이하도록 하였다. 두 가지 케이스 모두 카티아 프로그램, 3D프린터를 사용하여 설계하였다.

프로젝트 결과

최종 결과물


  • 내비게이션 미러 완성품


그림 25. 내비게이션 미러 완성품 배치(엘리베이터 앞)

내비게이션 미러는 그림 와 같이 엘리베이터 옆에 배치하여 엘리베이터를 기다리는 손님들에게 거울 기능 및 실내 길찾기 정보를 제공한다.


  • 하드웨어 제원
    • 폭: 47.5cm
    • 높이: 187cm
    • 모니터 중심 높이: 156cm


  • 시나리오 테스트
사용자의 입력 시간을 제외한 시스템의 시나리오 시간은 Google Web API를 통해 음성 파일을 텍스트로 변환하여 받아오는 시간, 받아온 텍스트를 firebase의 실시간 데이터 베이스와 비교하여 목적지 리스트를 만드는 시간, 사용자가 원하는 목적지를 선택하였을 때 이미지 파일(경로, QR코드)을 firebase storage에서 불러오거나 캐싱되어있는 파일에서 가져와 화면에 출력해주는 시간으로 총 3가지가 있다. 소요 시간을 랜덤하게 호실을 선택하여 100회 테스트한 결과 음성 파일을 텍스트로 변환하는 시간은 최대 0.921초, 최소 0.543초를 기록하였고 평균 0.749초의 시간이 소요되었다. 문자열을 데이터 베이스와 비교하는 시간은 최대 0.566초, 최소 0.503초를 기록하였고 평균 0.526초의 시간이 소요되었다.
  • 그림 26. 음성 인식 비교시간
  • 그림 27. 문자열 비교 시간
목적지 이미지 파일(경로, QR코드)을 화면에 출력해주는 시간을 줄이기 위해 10개의 파일 이미지를 캐싱하는 방식을 사용하였다. 캐싱의 성능을 확인하기 위해 38개의 이미지 파일을 5등분하여 각 Section마다 다른 가중치를 부여한 후 랜덤하게 50개를 선택하여 테스트를 진행하였다.


그림 28. 목적지 이미지 파일 가중치


테스트 케이스에서 캐싱이 구현되지 않은 경우에는 최대 1.725초, 최소 0.968초를 기록하였고 평균 1.208초의 시간이 소요되었다. 반면 캐싱이 구현된 경우에는 50번 테스트 중 30번의 캐싱 성공과 20번의 캐싱 실패를 기록하여 최대 1.671초, 최소 0.324초를 기록하였고 평균 0.762초의 시간이 소요되었다. 캐싱이 구현된 경우의 최대 소요 시간인 1.671초는 캐싱에 실패한 경우의 시간이고 캐싱의 성공한 경우에는 약 0.3~0.4초가 소요되었다. 각 파일은 경로 이미지 파일은 4~5kb, QR 코드는 1~2kb로 대략 70kb미만의 저장 공간이 사용되었지만 평균 시간을 비교한 성능향상은 1.6배를 기록하여 의미있는 성능 향상을 보여주었다.


  • 그림 29. 목적지 이미지 파일 출력 시간(캐싱x)
  • 그림 30. 목적지 이미지 파일 출력 시간(캐싱o)

미구현 항목 및 한계점

  • 목적지 검색 속도 개선: 기기에 목적지에 대한 데이터베이스를 저장하여 서버에 접근하는 것을 줄임으로써 음성인식을 통해 목적지를 검색하는 시간을 줄이고자 하였다. SQLite를 통해 데이터베이스를 저장하여 접근할 경우 파이어베이스에 접근하여 데이터를 검색하는 시간에 비해 약 10% 정도의 시간이 소요되는 것을 확인하였다. 하지만 검색 위치를 수정해야 하므로 전체 코드를 수정해야 했고, 파이어베이스에서의 수정 사항을 반영해야 하므로 이를 구현하는 데에 시간이 많이 소요되어 완성하지 못하였다.
  • 현재 경로 사진의 경우 직접 제작하여 저장하는 형식을 사용하였는데, 현재 위치와 목적지, 교차로를 노드로 하여 경로를 제작하는 코드를 사용하고자 하였지만 이를 구현함에 있어 노드를 추가하는 동작에 어려움이 있어 구현하지 못하였다.
  • 관리자용 웹페이지에서 관리자가 직접 맵을 추가하고, 호실을 추가하여 이를 통해 경로를 만들고자 하였지만 새로운 노드를 생성하고 이를 데이터베이스에 반영하는 동작이 복잡하여 개발 기간 내에 개발할 수 없다 판단하여 구현하지 못하였다.
  • 한국어 음성 인식을 사용하다보니 한글과 영어가 섞여있을 경우(기계 it실습실, 기계정보공학과 세미나실, 캐드실)과 같은 경우, 음성 인식 시간이 1.5초 이상으로 이상치를 기록하였고 영어를 비슷한 한글로 바꾸면서 음성 인식이 정확히 안되는 문제가 있었다. 예를 들어 세미나실을 재미나지로 번역하며 음성 인식에 실패하였다.

프로젝트 평가

평가항목

평가 항목으로 네비게이션 미러에서 필수적으로 구현해야 한다고 생각하는 필요 요구사항 2가지와 추가적으로 고려했으면 하는 희망사항 2가지로 구상하였다.
필요 요구사항으로는 음성 인식의 정확도, 경로 출력 정확도를 기준으로 하였다. 음성 인식 정확도와 관련된 '음성 입력 결과 원하는 목적지가 출력되는가?'는 목적지를 말했을 때 음성 인식을 통해 나온 목적지 리스트에 목적지가 포함되는가를 기준으로 한다. 평가 방법은 목적지를 말하고 목적지가 포함되는지 확인하는 동작을 50회 반복하여 목표 성공률을 90%로 한다. 경로 출력 정확도와 관련된 '목적지에 대한 올바른 경로가 출력되고 이에 대한 QR코드가 올바르게 출력되는가?'는 목적지 리스트에서 선택한 목적지까지의 경로가 출력될 때 오류가 발생하지 않는 것을 목표로 한다. 평가 방법으로는 목적지를 선택하였을 때 출력되는 경로가 선택한 목적지와 일치하는가를 확인하는 동작을 50회 반복하여 성공률을 확인한다. 목표 성공률은 경로는 항상 올바르게 출력되어야 하므로 100%로 한다.
희망사항으로는 사용자들의 가시성, 인식성, 편의성을 기준으로 하였다. 가시성과 관련하여 '사용자 입장에서 모니터의 가시성이 확보되는가?'는 사용자가 네비게이션 미러를 사용함에 있어 디스플레이에 출력되는 내용이 거울을 통해 잘 보이는가를 기준으로 하였다. 평가 방법은 불특정 인원 20명에게 네비게이션 미러를 사용하고 설문조사를 받도록 한다. 매우 만족을 4점, 매우 불만족을 1점으로 하여 평균이 3점 이상을 목표로 한다. 인식성과 관련하여 '소음 발생과 상관없이 음성 인식의 정확성이 유지되는가?'는 주변 생활 소음이 있는 상황에서도 음성 인식의 정확성이 유지되는가를 기준으로 한다. 평가 방법은 백화점, 학교 등 생활 소음 영상을 주변에서 재생하면서 음성인식을 30회 진행하여 목적지가 목적지 리스트에 포함되는지를 확인한다. 편의성과 관련하여 '버튼을 사용함에 있어 불편함이 없는가?'는 입력 장치로 동작하는 버튼에 대하여 사용자의 편의성을 확인하도록 한다. 평가 방법으로는 불특정 인원 20명에게 네비게이션 미러를 사용하고 설문조사를 받도록 한다. 매우 만족을 4점, 매우 불만족을 1점으로 하여 평균이 3점 이상을 목표로 한다.
희망사항 평가의 경우에는 아래의 설문조사를 통해 평가를 진행하도록 한다.


  • 그림 31. 평가 항목
  • 그림 32. 설문조사 질문


평가결과

음성인식 정확도 테스트를 위해 소음이 없는 상황에서 100회 실험 중 마이크로부터 음성 신호를 받지 못한 경우가 2회, 음성 신호를 받았지만 STT에 실패하여 정확한 경로를 출력하지 못한 경우가 7회 있었다. 소음이 있는 상황의 경우 100회 실험 중 마이크로부터 음성 신호를 받지 못한 경우가 1회, 음성 신호를 받았지만 정확한 경로를 출력하지 못한 경우가 15회 있었다. 결론적으로 총 100회 실험에서 소음이 없는 경우와 있는 경우에서 각각 91%와 84%의 정확도를 기록하였다.


그림 33. 음성 인식 정확도


소음의 유무에 따라 음성 인식시간과 문자열 비교 시간에 대한 소요시간을 테스트해보기 위해 소음이 없는 상황과 있는 상황에서 각각 100회 실험을 해본 결과 소음이 없는 상황에서 음성 인식시간은 최대 0.921초, 최소 0.543초를 기록하였고 평균 0.749초의 시간이 소요되었고 문자열을 데이터 베이스와 비교하는 시간은 최대 0.566초, 최소 0.503초를 기록하였고 평균 0.526초의 시간이 소요되었다. 소음이 있는 상황에서는 음성 인식시간은 최대 0.939초, 최소 0.518초를 기록하였고 평균 0.740초의 시간이 소요되었고 문자열을 데티터 베이스와 비교하는 시간은 최대 0.533초, 최소 0.489초를 기록하였고 평균 0.513초의 시간이 소요되었다. 결론적으로 소음의 유무에 따른 시간 지연은 거의 없었다.


  • 그림 34. 음성 인식시간
  • 그림 35. 음성 인식시간(소음o)
  • 그림 36. 문자열 비교 시간
  • 그림 37. 문자열 비교 시간(소음(o)


희망사항 평가를 위해 진행한 설문의 경우 아래와 같은 결과를 얻을 수 있었다. 전반적으로 만족도가 높은 것을 볼 수 있고, 희망사항 항목에 있던 '사용자 입장에서 모니터의 가시성이 확보되는가?'와 '버튼을 사용함에 있어 불편함이 없는가?' 항목에 대하여 사용자가 충분히 이용할 수 있다는 결론을 얻을 수 있었다.
  • 그림 38. 음성인식 만족도 조사 결과
  • 그림 39. 안내문구 만족도 조사 결과
  • 그림 40. 음성 안내 만족도 조사 결과
  • 그림 41. 버튼인식 만족도 조사 결과


설문조사를 진행하면서 설문 대상자들에게 개선점이나 추가했으면 하는 기능을 적을 수 있도록 공간을 제공하고, 해당 공간에 작성된 내용은 아래와 같다. 해당 프로젝트는 테스트용으로 과학기술관 3층과 4층만 제공하기 때문에, 목적지 범위가 더 넓어졌으면 좋겠다는 내용이 가장 많았다. 다음으로 '터치스크린 동작'과 '음성인식 예시 보여주기', '버튼에 색을 넣어 가시성을 높이면 좋겠다.', '사람이 거울을 봤을 때를 인식하여 안내가 나왔으면 좋겠다.' 등 네비게이션 미러 사용에 있어서의 편의성, 가시성과 관련된 내용들이 많았다. '모바일에서 실시간으로 현재 위치와 경로를 확인할 수 있었으면 좋겠다'는 모바일 환경에서의 네비게이션 기능 개선이나, '거울이 무슨 의미인가요.'와 같은 거울로서의 기능 추가와 같은 의견도 있었다.
그림 42. 개선사항


느낀점

  • 권**: 본 프로젝트는 임베디드 시스템에서 현재 상용화되지 않은 새로운 물건을 만들어내는 것이었다. 때문에 주제 선정부터 너무 어려웠다. 항상 정답이 있는 문제를 풀다가 정답이 정해지지 않은 창의적인 문제에 대해 고민하니 주제 선정에만 2달 이상이 소요된 것 같다. 주제가 선정되고 우리가 생각한 일들에 대해 구현을 시작할 때에는 계획한 것과 같이 일이 차근차근 순조롭게 진행될 것 같았다. 하지만 대부분의 경우 계획대로 순조롭게 진행되는 경우는 없었고 다양한 문제들에 부딪혔다. 음성 인식의 경우 학습을 시키려던 계획은 컴퓨터 리소스의 한계로 인해 오픈 API라는 다른 방식으로 변경되었고 웹에서는 교차 출처 리소스 공유 정책인 CORS정책이나 웹에 요청을 보내는 이벤트 큐에서 발생한 synchronize문제를 해결하는데 많은 시간이 소요되었다. 이러한 문제들을 해결할 때 수업 시간들을 기억해내 활용한 경우도 많은데, 예를 들어 sync를 맞추기 위해 변수가 공유되는 문제가 발생하였는데 이 변수를 함수 내부에서 정의하여 각 함수 스택에 개별 변수로 가질 수 있게 하여 해결할 수 있었다. 이처럼 본 프로젝트를 진행하면서 새로운 것을 만들어내는 창의적인 문제에 대해 고민해보고 또 그것을 실제로 구현해보면서 다양한 문제들에 대해 수업시간에 배운 내용과 인터넷 검색 등을 통해 해결해 나가는 것을 배운 것 같다.
  • 유*: 기계정보공학과를 다니면서 처음으로 하드웨어를 고려해가면서 소프트웨어를 작성해본 프로젝트였다. 지금껏 소프트웨어만 작성하였을 때는 반복적으로 테스트하면서 빠른 피드백을 통해 개선해나갈 수 있었는데, 하드웨어를 고려하기 시작하면서 이전과 같은 방식으로 프로젝트를 진행하는 것이 어려웠다. 소프트웨어적으로 이상이 없어보여도 하드웨어의 스펙에 따라 결과물이 달라지기도 하였고, 연결 상태에 따라 센서의 반응시간이 달라지면서 문제가 생기기도 하였다. 이러한 하드웨어적 이슈들을 경험해볼 수 있어서 좋은 경험이었다고 생각한다. 또한 한 학기를 거의 다 투자할 만큼 큰 프로젝트였기 때문에 개발기간동안 힘든 점도 많았지만, 프로젝트를 진행하면서 소통이나 피드백의 방식, 계획을 설계하는 과정에서 중요하게 볼 점, 앞으로 소프트웨어 개발을 함에 있어 내게 부족한 부분 등을 배울 수 있었기 때문에 의미있는 프로젝트였다고 생각한다.
  • 윤**: 작년 겨울 방학 때부터 시작한 내장형 시스템 프로젝트를 통해 정말 많은 공부를 하고 실전에 대해 느낄 수 있었습니다. 주제 선정부터 쉽지 않았는데, 정말 많은 아이디어가 나왔었지만 이를 쉽게 선정할 수 없었습니다. 기술적 한계라던지, 이 아이디어가 어떤 효과가 있을지에 대한 많은 고민을 하고 팀원들과 토의하며 생각했던 것 보다 사용자에게 직접 서비스 해야 하는 제품을 새로 만들어낸다는 것이 매우 어렵다는 것을 알았습니다. 처음으로 주제를 선정했을 때에는 다양한 기능을 넣고, 새로운 것도 개발해 보고, 호기롭게 ‘할 수 있다!’라는 생각만으로 뛰어들었는데 아직 저의 능력이 많이 부족하다는 것도 느끼고 배워야할 것이 정말 많구나, 라고 생각을 많이 했습니다. 혼자였다면 절대 완성할 수 없었던 프로젝트였습니다. 팀원들과 함께 정말 열심히 고민하고 설계하여 완성된 것을 보니 매우 뿌듯했습니다. 팀원들에게 정말 고맙고, 저도 앞으로 더 능력을 키워 다음 프로젝트 때에는 더 멋지고 완성도 높고, 참신한 제품을 설계해 볼 것입니다. 도움 주신 교수님, 조교님들 너무 감사하고, 함께 열심히 끝까지 포기하지 않고 달려 와준 팀원들에게 다시 한번 감사의 말을 남깁니다.
  • 문**: 이번 내장형 시스템 프로젝트를 수행하면서 지난 겨울 방학 때부터 주제를 선정하였습니다. 주제 선정 과정이 생각보다 쉽지는 않았습니다. 하지만 긴 노력 끝에 주제를 무난히 선정하게 됐습니다. 주제 선정만큼 쉽지 않았던 것이 구현이었습니다. 하지만 팀원들이 모두 각자 맡은 파트를 열심히 수행한 결과 성공적으로 구현을 마무리할 수 있었습니다. 저는 프로젝트를 수행하면서 웹 페이지를 만들고 배포하는 과정을 경험할 수 있었습니다. 또한 하드웨어 구현이 소프트웨어만큼 구현하기 까다롭다는 것을 깨닫게 됐습니다. 이번 내장형 시스템 및 실습을 수강하면서 이론 강의와 프로젝트를 통해 실제 제품을 생산하는 과정의 소중한 경험할 수 있었습니다. 프로젝트 수행에 도움을 주신 교수님, 조교님들, 그리고 우리 팀원들에게 감사한 말씀을 전하고 싶습니다.