"창작의 설렘 - 네비게이션 미러(Navigation Mirror)"의 두 판 사이의 차이

MIE capstone
이동: 둘러보기, 검색
(최종 결과물)
(프로젝트 결과)
172번째 줄: 172번째 줄:
 
<li style="display: inline-block;"> [[파일:2022ese1_문자열비교시간.jpg|300픽셀|섬네일|오른쪽|그림 27. 문자열 비교 시간]]</li>
 
<li style="display: inline-block;"> [[파일:2022ese1_문자열비교시간.jpg|300픽셀|섬네일|오른쪽|그림 27. 문자열 비교 시간]]</li>
 
</ul></div>
 
</ul></div>
<br/>
 
 
:목적지 이미지 파일(경로, QR코드)을 화면에 출력해주는 시간을 줄이기 위해 10개의 파일 이미지를 캐싱하는 방식을 사용하였다. 캐싱의 성능을 확인하기 위해 38개의 이미지 파일을 5등분하여 각 Section마다 다른 가중치를 부여한 후 랜덤하게 50개를 선택하여 테스트를 진행하였다.
 
:목적지 이미지 파일(경로, QR코드)을 화면에 출력해주는 시간을 줄이기 위해 10개의 파일 이미지를 캐싱하는 방식을 사용하였다. 캐싱의 성능을 확인하기 위해 38개의 이미지 파일을 5등분하여 각 Section마다 다른 가중치를 부여한 후 랜덤하게 50개를 선택하여 테스트를 진행하였다.
 
<br/>
 
<br/>
 
[[파일:2022ese1_테스트케이스.PNG|600픽셀|섬네일|가운데|목적지 이미지 파일 가중치]]
 
[[파일:2022ese1_테스트케이스.PNG|600픽셀|섬네일|가운데|목적지 이미지 파일 가중치]]
<br/>
 
 
:테스트 케이스에서 캐싱이 구현되지 않은 경우에는 최대 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배를 기록하여 의미있는 성능 향상을 보여주었다.
 
:테스트 케이스에서 캐싱이 구현되지 않은 경우에는 최대 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배를 기록하여 의미있는 성능 향상을 보여주었다.
 
<br/>
 
<br/>

2022년 6월 15일 (수) 06:17 판

프로젝트 소개

프로젝트 명

 네비게이션 미러(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. 내비게이션 미러 본체
  • 그림 23. 외부장치 위치
  • 하드웨어 제원
    • 폭: 47.5cm
    • 높이: 187cm
    • 모니터 중심 높이: 156cm


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


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


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

프로젝트 결과

최종 결과물

  • 시나리오 테스트
사용자의 입력 시간을 제외한 시스템의 시나리오 시간은 Google Web API를 통해 음성 파일을 텍스트로 변환하여 받아오는 시간, 받아온 텍스트를 firebase의 실시간 데이터 베이스와 비교하여 목적지 리스트를 만드는 시간, 사용자가 원하는 목적지를 선택하였을 때 이미지 파일(경로, QR코드)을 firebase storage에서 불러오거나 캐싱되어있는 파일에서 가져와 화면에 출력해주는 시간으로 총 3가지가 있다. 우선 음성 파일을 텍스트로 변환하는 시간은 최대 0.921초, 최소 0.543초를 기록하였고 평균 0.749초의 시간이 소요되었다. 문자열을 데이터 베이스와 비교하는 시간은 최대 0.566초, 최소 0.503초를 기록하였고 평균 0.526초의 시간이 소요되었다.


  • 그림 26. 음성 인식 비교시간
  • 그림 27. 문자열 비교 시간
목적지 이미지 파일(경로, QR코드)을 화면에 출력해주는 시간을 줄이기 위해 10개의 파일 이미지를 캐싱하는 방식을 사용하였다. 캐싱의 성능을 확인하기 위해 38개의 이미지 파일을 5등분하여 각 Section마다 다른 가중치를 부여한 후 랜덤하게 50개를 선택하여 테스트를 진행하였다.


목적지 이미지 파일 가중치
테스트 케이스에서 캐싱이 구현되지 않은 경우에는 최대 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배를 기록하여 의미있는 성능 향상을 보여주었다.


  • 그림 28. 목적지 이미지 파일 출력 시간(캐싱x)
  • 그림 29. 목적지 이미지 파일 출력 시간(캐싱o)
시나리오를 테스트에서 소요시간뿐만 아니라 음성을 정확히 인식하여 사용자가 원하는 경로 파일을 정확히 가져오는 것도 중요하다. 위의 캐싱을 구현하지 않은 경우와 캐싱을 구현한 두가지 경우에 대해 최종 경로를 정확히 출력해주는 정확도를 테스트한 결과, 캐싱을 구현하지 않은 경우에는 50회 실험 중 마이크로부터 음성 신호를 받지 못한 경우가 1회, 음성 신호를 받았지만 STT에 실패하여 정확한 경로를 출력하지 못한 경우가 4회 있었다. 캐싱을 구현한 경우에는 50회 실험 중 마이크로부터 음성 신호를 받지 못한 경우가 1회, 음성 신호를 받았지만 STT에 실패하여 정확한 경로를 출력하지 못한 경우가 3회 있었다. 결론적으로 총 100회 실험에서 9회를 실패하여 91%의 정확도를 보여주었다.

미구현 내용

프로젝트 평가

평가항목

평가결과


  • 그림. 설문조사 질문



  • 그림. 음성인식 만족도 조사 결과
  • 그림. 안내문구 만족도 조사 결과



  • 그림. 음성 안내 만족도 조사 결과
  • 그림. 버튼인식 만족도 조사 결과


느낀점