해당 게시글은 패스트캠퍼스에서 진행하는 AI 부트캠프에서 학습한내용과 교육과정을 토대로 작성했습니다.
이번주차 개인 프로젝트에서는 음성인식 비서 프로그램 제작 이 프로젝트의 내용이었으며
이를위해 메인파일과 메인파일에서 코드를 실행할때 필요한 패키지를 생성하고
각각 기능별로 네이버 검색, 날씨,미세먼지 , 게임기능 , 유틸리티 등의 클래스와 함수를 만들어서 구조를 분리하여 모듈로써 사용했다.
우선 프로그램을 실행시키면 STT가 음성인식을 한뒤 미리 정해둔 키워드를 유틸리티 클래스에서 가져온뒤 이를 인식하여 원하는 메뉴를 호출하는 식으로 프로그램을 구성했다.
예컨데 시리야 기린 검색해줘
라고 명령을 한다면
검색
이 라는 키워드를 인식하여 문자열로 자른뒤 기린
만 검색하게끔 코드를 구성했고,
날씨 , 미세먼지 의 경우도 마찬가지로 도시
와 행정구역
에 미리 딕셔너리를 구성한 키워드와 일치하는 정보를 찾아 날씨와 미세먼지농도를 말하게끔 처리했다.
유틸리티 클래스 에서는 각각의 독립적인 함수들을 모아서 구성해놓았고
모든 클래스에서 이 유틸리티 클래스를 참조할수 있게 구성했다.
main.py
파일
#===================================================================================================================
# 메인 실행 파일
#===================================================================================================================
import time
from siri_package.utility import Utility as util
from siri_package import siri_system as siri
from siri_package import tts_api as tts
from siri_package.naver_search import NaverSearch as naver
from siri_package.weather import WeatherAPI as wea
from siri_package.air_quality import AirQualityAPI as air
from siri_package.number_game import NumberGame as numGame
from siri_package.word_chain_game import WordChainGame as wordGame
# 메인함수
def main():
# 시작화면 출력
siri.invoke_siri_system()
while True:
# 음성 입력 받기
user_input = siri.get_text_from_voice()
# 입력된 문자열을 리스트로 분할
user_input_list = util.get_splited_string_list(user_input)
# 예약어 리스트 가져오기
reserved_list = util.get_reserved_list()
# 키워드에 반응하여 음성인식 비서 호출
keywords = util.check_keywords_in_input(user_input_list)
# '시리' 음성 인식 활성화
if keywords['siri']:
# 네이버 검색 실행
if keywords['search']:
run_naver_search(user_input_list, reserved_list)
# 날씨 정보 출력
elif keywords['weather']:
display_weather_info()
# 미세먼지 정보 출력
elif keywords['dust']:
display_air_quality_info()
# 숫자 게임 시작
elif keywords['number_game']:
start_number_game()
# 끝말잇기 게임 시작
elif keywords['word_chain_game']:
start_word_chain_game()
# 프로그램 종료
elif keywords['end_siri']
end_siri_system()
#===================================================================================================================
# 함수정의
#===================================================================================================================
# 네이버 검색 실행 함수
def run_naver_search(user_input_list, reserved_list):
search_keyword = util.get_non_duplicate_string_from_two_list(user_input_list, reserved_list) # 중복 제거된 검색 키워드 얻기
naver_module = naver()
naver_module.search_naver(search_keyword)
# 날씨 정보 출력 함수
def display_weather_info():
weather_api = wea()
weather_info = weather_api.get_weather(CITY_NAME)
print(weather_info)
tts.get_text_to_speech(weather_info)
# 미세먼지 정보 출력 함수
def display_air_quality_info():
air_info_api = air()
air_quality_comment_char,air_quality_comment_kor = air_info_api.get_air_info(CITY_NAME, DISTRICT_NAME)
print(air_quality_comment_char)
tts.get_text_to_speech(air_quality_comment_kor)
# 숫자 게임
def start_number_game():
print("숫자게임을 시작합니다...")
numGame().play()
# 끝말잇기게임
def start_word_chain_game():
print("끝말잇기게임 시작을 합니다...")
start_word_chain_game().play()
# 프로그램 종료
def end_siri_system():
print("시리 프로그램을 종료합니다.")
siri().end_siri()
#===================================================================================================================
# 코드실행
#===================================================================================================================
# 코드실행
if __name__ == "__main__":
main()
#===================================================================================================================
해당 메인파일 코드를 리뷰하자면,
생성한 패키지에서 필요한 클래스와 함수를 불러왔고
패키지 내의 __init__.py
파일로 패키지를 묶어서 가져오도록 했다.
메인함수가 실행되면 시작화면을 출력하고 음성인식 준비절차가 진행되면서 STT기능이 작동한다.
STT는 각 키워드를 인식하여 사용자가 선택한 메뉴를 실행하고 다시 while문의 처음으로 돌아가
계속 음성인식을 받는 구조로 메인파일을 구성을 했다.
만일 사용자가 프로그램 종료를 원한다면 종료를 실행하도록 기능을 추가했다.
이번 4주차에서는 파이썬 기초를 학습한것을 바탕으로 음성인식 비서를 만드는 개인 프로젝트를 진행했다.
TTS와 SST를 이용하여 사용자의 말을 인식하고 인터넷 검색, 날씨, 미세먼지등 크롤링한 내용을 연결시켜 만드는 간단하지만 생각할것이 많은 프로젝트였다.
프로젝트를 진행하면서 시리나 빅스비등의 프로그램이 친숙하지만 사용을 잘 안했던것이 이유가 뭘까 하고 생각해 본적이 없었는데 이번에 실제 프로그램을 만드는 과정에서 사용자의 언어를 정확하게 인식하는 것이 생각보다 어려운것이구나 하고 생각하게 되었다.
이번 프로젝트를 진행하면서 음성인식 프로그램을 조금더 확장시켜 자연어처리하는 기능을 넣을수 있다면 훨씬 편리하게 사용할텐데 라는 생각을 하게 되었고 조금더 공부해봐야 알겠지만 인공지능 분야 를 공부하다 보면 이러한 확장성또한 고려해서 다음번에는 더 정교한 프로그램을 만들어 봐야겠다라는 생각이 들었다.