창작의 설렘 - 네비게이션 미러(Navigation Mirror)
목차
프로젝트 소개
프로젝트 명
네비게이션 미러(Navigation Mirror)
프로젝트 기간
2022.4 ~ 2022.6
팀 소개
서울시립대학교 기계정보공학과 20174300** 권*용 (팀장)
서울시립대학교 기계정보공학과 20174300** 문*수
서울시립대학교 기계정보공학과 20174300** 유*
서울시립대학교 기계정보공학과 20164300** 윤*승
프로젝트 개요
프로젝트 요약
백화점이나 대형 상가와 같은 건물에서는 내부에 여러 매장이 위치하는데, 이로 인해 원하는 매장까지 가는 길이 복잡한 경우에는 매장을 찾기 위해 많은 시간이 소요되기도 한다. 이를 해결하기 위해 현재 위치에서 고객이 찾는 매장의 위치까지의 경로를 스크린에 띄워주는 내비게이션 미러를 제작한다. 평소에는 거울의 역할을 하지만, 기능을 활성화하고 목적지를 입력할 경우 경로를 출력한다. 이 때 음성인식 기술을 사용하여 전자제품을 다루기 어려워하는 IT취약계층의 접근성을 높이고, 개인 스마트폰에서 경로를 확인할 수 있는 QR코드를 제공하여 편의성을 높이도록 한다.
프로젝트의 배경 및 기대효과
인간이 의사소통을 하기 위해 사용하는 일반적이고 효과적인 수단은 언어(말과 글)이고, 음성은 인간의 가장 자연스러운 의사소통 방식이다. 말의 내용과 발화자의 감정을 인식하고 의미를 이해하여, 상황에 따라 자연스러운 대화를 주고받기 위해 필요한 음성 언어 처리 기술은 인간의 자연어 발화를 컴퓨터가 자동으로 이해하고 처리하는 알고리즘을 연구하는 분야로, 대화형 개인 비서 에이전트, 인 공지능 AI 스피커, 자동 통번역, 음성 대화 질의 응답(QA) 시스템 등 다양한 응용 서비스 사례를 들 수 있다.
Speech Recognition, 인공 청각이라 불리는 STT(Speech-to-Text)는 위의 과정 중사람의 음성 인터페이스를 통해 텍스트 데이터를 추출 해내는 기술이다.
백화점이나 대형 상가와 같이 건물에 많은 매장이 입점해 있는 경우, 층마다 안내판이 있다고 하더라도 원하는 매장을 찾는 것이 힘든 경우가 많다. 핸드폰을 다루고 검색하는 것에 익숙한 고객의 경우 어플이나 인터넷을 통해 매장의 위치를 찾을 수도 있지만 많은 고객의 경우 그렇지 못하는 경우가 많다. 이러한 불편함 때문에 코엑스와 같은 대형 건물에는 각 층에 키오스크가 배치되어있어 길을 찾을 수 있는 지도를 제공해준다. 하지만 이러한 키오스크는 터치 방식을 사용하여 IT 취약계층의 경우 사용하기 힘든 경우가 많고 핸드폰으로 경로 정보를 보내주는 것과 같은 개인화된 서비스를 제공해주지 못한다. 이번 프로젝트를 통해 앞서 설명한 STT 기술을 이용하여 몸이 불편하신 분들이나 IT 취약계층에서도 쉽게 접근할 수 있고 QR코드를 이용하여 핸드폰에 원하는 경로를 저장할 수 있는 개인화된 서비스를 제공할 수 있을 것으로 생각된다.
프로젝트 개발 목표
1. 편의성
- 직관성
- 해당 시스템은 일반 사용자 이외에 IT취약 계층에게도 높은 접근성을 제공하는 것을 목표로 하고 있기 때문에 직관성 높은 인터페이스를 제작하는 것이 중요하다. 네비게이션에 초음파 센서를 부착하여 1m이내의 물체가 인지되면“안녕하세요, 길찾기 기능을 사용하려면 아무 버튼이나 눌러주세요.” 와 같은 문구를 입력하여 사용자의 접근성을 높인다. 음성 인식 명령부터는 화면에 “특정 버튼을 눌러주세요.”처럼 필요한 동작을 명시하고 안내 메시지 등을 통해 동작에 대한 적절한 입력을 할 수 있도록 한다.
- 정확성
- 사용자가 편리하게 시스템을 이용하기 위해서는 사용자의 음성 명령을 인식하여 텍스트로 변환하는 STT기술이 정확해야 하고 STT기술을 통해 변환된 텍스트와 유사성이 높은 목적지 후보군들을 올바르게 추출해야 한다. 이를 위해서는 google web API를 사용하고 문자열 비교 알고리즘에 임계값을 주어 서버에 저장된 장소들의 명칭 텍스트 유사도가 높은 장소 후보군들이 추출되도록 한다. 외부에 소음이 발생하는 상황에서도 음성 인식 변환의 정확성이 유지되도록 해야 하는데 이는 주변 소음을 제거해주는 함수를 사용한다. 또한 목적지가 결정되었을 때 Database에서 목적지까지 정확한 경로 정보와 QR코드를 받아와 전달해 주어야 한다.
2. 사양 및 성능
- 경제성
- 해당 시스템은 건물 내 모든 층의 엘리베이터 앞에 위치하는 것을 목적으로 하므로 경제성을 고려하여 설계해야 한다. 하지만 사용자의 편의성을 저하시키지 않는 범위에서 경제성이 확보되도록 설계해야 한다.
- 처리속도
- 해당 시스템에서 사용자의 입력시간을 제외한 처리속도는 google web API에서 음성 인식에 소요되는 시간, 인식된 텍스트가 Database의 어떤 목적지인지를 비교하는 알고리즘에 소요되는 시간, 사용자가 목적지를 선택하였을 때 화면에 띄워줄 때까지 소요되는 시간으로 총 3가지가 있다. 이때, 사용자가 불편함을 느끼지 않도록 음성 명령을 텍스트로 변환하고 Database와 비교하는 과정과 서버에서 가져온 데이터를 출력하는 과정에서 지연을 최소화하여야 한다.
3. 유지 보수성
- 수정 용이성
- 학교 건물과 같이 건물 내부 구성이 자주 바뀌지 않는 경우 데이터 수정이 큰 문제가 되지 않는다. 하지만 대형 상가의 경우 매장이 입점하거나 폐점하는 상황이 발생할 수 있으므로 이를 편리하게 수정할 수 있어야 하고, 수정된 데이터가 시스템에 반영되어야 한다. 이를 위해 관리자용 웹페이지를 만들어 관리자는 간편하게 Database를 수정할 수 있게 하고 시스템은 Database에 실시간으로 접근하여 바로 반영할 수 있도록 한다.
- 보수성
- 해당 내비게이션 미러는 입력장치가 고장나거나 서버와 연결이 끊길 경우 기능의 사용이 불가하므로 이를 쉽게 교체하거나 수리할 수 있어야 한다.
동작 시나리오
1. 내비게이션 미러 시나리오
2. 관리자용 웹페이지 시나리오
구현 내용
1. Speech to Text (STT)
- 음성을 인식하여 텍스트를 출력해주는 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에는 각 층을 디렉토리로 하여 장치의 위치(엘리베이터 앞)을 기준으로 목적지까지의 경로가 표시된 사진이 각 호실 번호로 저장되어 있다.
- 해당 정보들은 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()를 통해 데이터베이스로부터 데이터 입력, 업데이트, 삭제 동작을 할 수 있다.
3. UI 및 GPIO
4. 관리자용 웹사이트
- 관리자용 웹사이트는 로그인 화면, 관리자 수정 화면 2개의 웹페이지로 구성된다.
관리자용 웹사이트의 특성상 관리자에 해당하는 사용자만이 사용하므로, 사전에 제공받은 아이디와 비밀번호를 입력하여 로그인한다. 관리자가 아이디/비밀번호를 올바르게 입력하면 “로그인 성공” 메시지가 출력되고, 관리자 수정 화면 웹페이지로 이동한다. 관리자가 아이디/비밀번호를 틀리게 입력하면 오류 메시지 “로그인 실패: 아이디 또는 비밀번호를 확인하세요.”가 출력된다. 관리자의 로그인 성공/실패와 로그인/로그아웃 상태는 각각 파이어베이스의 auth()클래스의 signWithEmailAndPassword (email, password) 함수와 onAuthStateChanged(user) 함수로 구현하였다. email, password는 각각 관리자가 입력한 아이디와 비밀번호를 저장하고 있는 인자이고, user는 계정의 로그인 상태를 저장하는 인자이다.
- 관리자 수정 화면은 최상단에 Log-out 버튼, Floor 버튼, Save 버튼, 호실 정보 입력창, Manage Zone, User View 로 구성된다. 관리자가 Log-out 버튼을 누르면 계정은 로그아웃 상태가 되며, 로그인 화면으로 이동하게 된다.
- 관리자가 'Floor' 버튼을 활용하여 원하는 층을 선택하면 파이어베이스의 Storage에 저장된 각 층의 지도가 Manage Zone에 출력된다.
- Manage Zone에 출력되는 지도 위에는 각 호실에 대한 버튼이 위치한다. 관리자는 각 버튼을 눌러 각 호실에 대한 정보를 제공받을 수 있다. 호실 정보는 파이어베이스 database()클래스의 ref(floorNumb + roomNumb)함수와 on(‘value’, (snapshot) => {}) 통해 읽어온다. floor Numb과 roomNumb은 데이터베이스의 층 폴더와 호실 폴더이름이 저장된 인자이다.‘value’는 데이터베이스에 저장되어 있는 value들을 가리키는 인자이고, 두 번째 인자인 함수는 ‘value’에 저장된 value를 활용하여 수행되는 함수이다. 호실의 정보는 호실 정보 입력창에 출력된다. 관리자가 제공받는 호실 정보는 담당자 이름(Charge), 호실 이름(Name), 담당자 번호(Call), 세부사항으로 구성된다. 관리자는 호실 정보 입력창에 새로운 정보를 입력하고 Save 버튼을 눌러 호실의 정보를 수정하고 이 수정된 정보를 지도에 반영한다. 정보 수정이 반영된 지도는 User View에 출력되어 관리자는 지도가 올바르게 수정되었는지 확인할 수 있다. 파이어베이스 storage()클래스의 getDownloadURL() 함수를 사용하여 새로 생성된 지도를 Storage로부터 읽어올 수 있다.
시스템 구성
기구부 설계 및 구현
제어부 및 회로 구현
소프트웨어 설계 및 구현
프로젝트 결과
최종 결과물
결과물 사진 혹은 시연 영상 등
