시스템 설명
개발 기간
개발자
목적 및 필요성
차별화된 점
사용 하드웨어
사용 프로그램
사용 기술 -음성 분석/합성, 웹 크롤링 등
알고리즘 -온·습도 기준 설정, 외부 조건 고려, 사용자 피드백 등
솔루션 List
결과
발전 가능성
참고 자료
-
독거노인을 위한 AI 스피커
-
일반 AI 스피커와는 다르게 사용자가 있는 환경의 온·습도를 주기적으로 측정하여 온·습도의 개선을 돕는다.
-
환경 개선을 돕는 솔루션과 개인 솔루션을 제공한다.
-
그 외 대화 기능, 유튜브 노래 재생 기능 등이 가능하다.
-
여기 에서 시연 영상을 확인 가능하다.
- 2019/09/25 ~ 2019/12/05
- 윤대호(@DaeHoo-Yun @201810788), 이혜인(@hyeinlee725), 정민지(@minji-o-j)
-
노인들은 체온 조절이 원활하지 않아 온열질환에 노출될 위험이 큼
-
온·습도를 주기적으로 측정하여 적절한 온·습도 환경을 만드는 환경 솔루션 및 개인 솔루션을 제공함
-
폭염과 한파와 같은 상황에서 적절한 대처를 할 수 있어서 여름과 겨울을 안정적으로 보낼 수 있을 것으로 예상됨.
- 기존의 AI 스피커의 기능 뿐 아니라 사용자가 찾지 않아도 스스로 솔루션 제공 및 사용자와 상호 소통 가능
-
python 3.8
-
Thonny
-
VNC Viewer
- 라즈베리파이를 연결하기 위해 VNC server의 IP address를 확인 한 후 노트북에서 VNC viewer를 실행하는 과정 필요
AMK의 작동 원리
- 사용자 음성 인식
- 아날로그 음성 신호를 디지털 음성 신호로 변환
- 디지털 음성 신호 데이터를 서버로 전송
- 서버에서
STT 음성인식
,TTS 음성합성
,대화 해석
기능 수행 - 반환된 결과를 스피커를 통해 출력
-
DHT 22를 소형 브레드보드에 연결
-
온·습도를 받아오는 함수가 있는 곳에
humidity, temperature = dht.read_retry (dht.DHT22, 4)
라는 코드를 작성<--DATA 연결하는 부분: GPIO 4번 핀
-
매우 자세하게 읽어줄 필요는 없기 때문에 소수점 첫째 자리까지 받아오도록 프로그래밍
-
크롬에서
개발자 도구
(F12)를 이용하면 페이지에 뜨는 정보에 대한 소스를 얻을 수 있다. -
라즈베리파이는 GPS 기능이 없기 때문에 라즈베리파이가 연결된 무선 인터넷 을 이용하여 사용자의 위치 정보를 알아내기로 하였다.
-
BeautifulSoup4
패키지를 이용 -
같은 영역 안에 들어있는 내용은
find()
가 아니라findAll()
함수를 이용 하여 배열처럼 불러온다.- cf.
find()
는 맨 위에 있는 것 하나만 반환한다.
- cf.
-
유튜브 검색 API 설치
-
파이썬에서 Google API를 access할 수 있는 client library 설치
-
google-auth를 위해 httplib2 전송 제공하는 library 설치
-
URL 변환, 이를 wav파일로 바꿔서 출력하는 패키지 설치
설치 패키지 리스트
- 이후 Google Developer에서 개인 키 발급받은 후 파이썬 코드에 입력
DEVELOPER_KEY = '' ## Google Developer에서 제공하는 유튜브 API 키 이용
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
-
솔루션 제공 순서는
환경 개선 솔루션
->개인 솔루션
-
사용자는 스피커가 제공한 솔루션을 실행했음을 버튼을 누름 으로써 스피커에게 알려준다.
버튼 실행 Flow Chart
환경 개선 솔루션
을 실행했지만 환경의 개선이 되지 않은 경우개인 솔루션
을 제공한다.
-
현재 날짜를 받아와 여름 / 겨울 / 그외로 계절을 나눔
-
이 기준을 정하기 위하여 24절기중 하지(6/22)~처서(8/23) 를 여름으로, 소설(11/22)~경칩(3/6) 까지를 겨울로 설정.
-
이 때 여름과 겨울은 '한여름', '한겨울'을 뜻하는 것으로, 폭염주의보나 한파주의보가 발생할만할 시기를 골라서 나눈 것.
-
-
외부 온도를 고려하여 현재 온·습도의 높고 낮음을 판단하고자 함.
-
노인분들에게 권장하는 적정 실내 온도 (여름 26-28도, 겨울 22-26도)와 극단적 실내 온도(여름 33도 이상, 겨울 18도 이하)까지의 값 중 적절하다고 생각하는 값을 뽑아 이를 기준값으로 삼음.
-
여름 기준값: 30도
-
30도보다 같거나 높아지기 시작하면 솔루션 제공하기 시작함.
-
사용자가 솔루션을 실천함으로써 실내온도가 극단적인 지점까지 올라가지 않도록 방지.
-
-
겨울 기준값: 22도
-
사용자가 '노인'이라는 점을 고려.
-
노인분들은 추위에 노출되면 다른 나이대의 사람들보다 저체온증에 걸릴 위험이 더 높기 때문에 안전하게 적정온도의 최솟값을 그대로 적용.
-
-
여름에는 에어컨으로 인해 실내·외 온도 차가 발생하게 되는데, 이로 인해 우발성 저체온이나 냉방병과 같은 질환이 생길 수 있음.
-
따라서 실내·외 온도 차가 8도 가 넘거나 외부 습도가 내부 습도보다 높은 경우 창문을 여는 솔루션을 제공하지 않도록 함.
-
이 중 환경부에서 권고한 기준 에 따라 4단계로 분류.
-
미세먼지가 나쁨 또는 매우 나쁨 일 경우 환기에 관한 솔루션을 제공하지 않음.
-
솔루션 반복 시간 감소
-
4번까지 시도
-
환경 개선 솔루션
과개인 솔루션
에 동일하게 적용.
-
AI 스피커를 통해 사용자가
'들려줘'
또는'틀어줘'
라는 단어가 들어간 말을 하면 그 앞의 단어 전부를 받아와 유튜브에 검색하여 링크를 반환.-
ex) '아이유 Love poem 틀어줘' <--
'아이유 Love poem' 을 검색하여 링크 반환
-
'노래 들려줘'
또는'노래 틀어줘'
라는 단어가 정확히 일치할 때에는 '노래' 앞의 단어를 받아와 검색, 링크 반환
-
-
반환된 검색 링크중 최상단에 있는 영상의 제목과 URL을 반환 후 패키지를 통해 URL에 있는 영상을 wav 파일로 변환하여 노래르 재생.
-
노래 재생 완료 혹은 사용자가 중간에 버튼을 누른 경우 에는 재생된 노래의가 완료되었음을 알리고, 다시 대기 상태로 돌아감.
- 노래를 재생하기 이전에
환경 개선 솔루션
을 실행한 후개인 솔루션
여부를 판단하고 있었을 상황인 경우, 다시개인 솔루션
판단 상태로 돌아감.
- 노래를 재생하기 이전에
elif text.find("틀어줘") >= 0 or text.find("들려줘") >=0 :
search_text=''
if(text.find("노래 틀어줘")>=0):
for i in range (0,text.find("노래 틀어줘")):
search_text+=text[i]
print(search_text)
elif(text.find("노래 들려줘")>=0):
for i in range (0,text.find("노래 들려줘")):
search_text+=text[i]
print(search_text)
elif(text.find("틀어줘")>=0):
for i in range (0,text.find("틀어줘")):
search_text+=text[i]
print(search_text)
elif(text.find("들려줘")>=0):
for i in range (0,text.find("들려줘")):
search_text+=text[i]
print(search_text)
####
result_url = youtube_search(search_text)
play_with_url(result_url)
return("유튜브에서 " + search_text + "노래를 재생했어요.")
- 솔루션 List의 이름이 실내와 실외 상황을 고려하여 선택됨.
- List 내에서 index를 이용해
환경 개선 솔루션
과개인 솔루션
을 나누어 접근
##온도를 낮추는 솔루션
down_t = ["창문을 열어 환기를 시켜주세요",
"선풍기를 집 밖을 향해서 틀어주세요",
"커튼을 쳐주세요",
"물을 마셔주세요",
"따뜻한 물로 샤워해주세요"] # 3
##습도를 낮추는 솔루션
down_h = ["창문을 열어 환기를 시켜주세요",
"제습기를 틀어주세요",
"환풍기를 틀어주세요",
"물을 마셔주세요"] # 3
##미세먼지를 고려했을 때 온도를 낮추는 솔루션
down_t_dust = ["선풍기를 집 밖을 향해서 틀어주세요",
"커튼을 쳐주세요",
"물을 마셔주세요",
"따뜻한 물로 샤워해주세요"] # 2
## 미세먼지를 고려했을 때 습도를 낮추는 솔루션
down_h_dust = ["제습기를 틀어주세요",
"환풍기를 틀어주세요",
"물을 마셔주세요"] # 2
##온도를 올리는 솔루션
up_t = ["난방을 틀어주세요.",
"따뜻한 물로 샤워해주세요.",
"따뜻한 물을 마셔주세요.",
"내복을 입어주세요.",
"양말을 신어주세요.",
"목에 손수건을 둘러주세요." ] # 1
## 습도를 올리는 솔루션
up_h = ["가습기를 틀어주세요",
"빨래나 물에 젖은 손수건을 널어주세요",
"목에 손수건이 스카프를 둘러주세요",
"물을 마셔주세요" ] # 1
- DHT22 온·습도 센서를 사용하여 현재공간의 온도를 측정함
- 웹 크롤링 기능을 통해 솔루션과 대화를 위해 필요한 정보를 수집한다.
- https://youtu.be/K_w6aFeymhE -->
외부 날씨 측정
- https://youtu.be/bbUIpBh_X_0 -->
미세먼지 농도 측정
- https://youtu.be/K_w6aFeymhE -->
- 사전에 만들어 놓은 솔루션 배열에서 현재 환경을 개선하는데 적합하다고 판단된 솔루션을 찾아서 제공한다.
- https://youtu.be/ARG9JXJMfzQ -->
환경 개선 솔루션
- https://youtu.be/65K3Wm7hLv8 -->
개인 솔루션
- https://youtu.be/myzHxkwULpM -->
개인 솔루션
- https://youtu.be/ARG9JXJMfzQ -->
- 노래 재생과 간단한 대화에 답하는 기능 수행이 가능하다.
- https://youtu.be/fcjAcT-ZhWA -->
노래 재생
- https://youtu.be/bY6rJIp8ais -->
대화 기능
- https://youtu.be/fcjAcT-ZhWA -->
-
현재 '독거노인' 분들을 대상으로 한다는 점에서 스마트 장비(iot, internets of things, 스마트 홈, 스마트 커튼, 스마트 에어컨 등)를 고려하지 않았음.
-
추후에 iot 와 연결한다면
환경 개선 솔루션
을 말로만 제공해 주는 것이 아니라 자동으로 환경을 개선하는 기능을 수행할 수 있을 것 으로 예상. -
스마트폰 애플리케이션 과 연동한다면 사용자가 피드백을 너무 오랫동안 주지 않았을 시에 가까운 지인에게 연락을 보내는 기능, 온도가 너무 높을 때 현재 위치와 함께 화재 신고를 하는 기능 등 더 많은 기능을 수행할 수 있을 것으로 예상됨.
clova 스피커 사진
픽토그램
내맘대로 AI 메이커스
유튜브 재생 관련 패키지
AMK 작동 원리
DHT 22
미세먼지, 초미세먼지 분류표 라즈베리파이 구동을 위한 기본 코드
내 몸이 웃는 온도…내복 착용해 맞추세요
건강한 사람에게 적정 실내온도 20℃, 만성 질환자는?
여름 건강관리, 특히 신경써야 할 ‘고위험자’는?
습도 60% 넘으면 땀 잘 안 말라… 체온 조절 안 돼 열탈진