오늘은 그동안에 문제가 많이 해결이 된 것 같아 기분이 좋군요
STT로 입력을 받아서 AI로 답변을 만들고 TTS로 말해주는 기능을 구현을 할 수 있어서
잘 풀렸구나 라는 생각이 들었고
내가 원하는 방법으로 술술 일이 잘풀리니 팀 프로젝트를 준비하는 것에 기분이 좋아졌습니다 ^^
import os
import time
import speech_recognition as sr
from gtts import gTTS
from openai import OpenAI
import pygame
# 음성 인식 (듣기, STT)
def listen(recognizer, audio):
try:
text = recognizer.recognize_google(audio, language='ko-KR')
print("[고객] : " + text)
if "종료" in text:
stop_listening(wait_for_stop=False)
speak("마이크 입력을 종료 합니다.")
else:
answer(text)
except sr.UnknownValueError:
print("인식 실패") # 음성 인식 실패한 경우
except sr.RequestError as e:
print("요청 실패 : {0}".format(e)) # API key 오류, 네트워크 단절 등
# 대답
def answer(input_text):
client = OpenAI(api_key="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")
menu = ["아메리카노", "카푸치노", "딸기스무디", "블루베리스무디"]
category = ["시원한", "커피", "따뜻한", "과일", "딸기", "블루베리"]
system_instructions = f"""
이제부터 너는 "카페 직원"이야.
너는 고객의 말에 따라 음료를 추천해 줘야해 우리가게에는 {menu}가 있어.
그리고 아래의 카테고리 중에서 고객의 질문과 관련이 있는 항목을 선택해줘:
{category}
선택된 항목은 '선택된 항목: [항목]' 형식으로 반환하고, 고객에게 전달할 메시지는 별도로 작성해줘 추가로 메세지는 무조건 존댓말로 적어줘.
"""
completion = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": system_instructions},
{"role": "user", "content": input_text},
],
)
ai_response = completion.choices[0].message.content
# 선택된 항목과 고객 메시지 추출
selected_choice = None
customer_message = ""
for line in ai_response.split('\n'):
if line.startswith('선택된 항목:'):
selected_choice = line.split('선택된 항목: ')[1].strip()
else:
customer_message += line + '\n'
# 선택된 항목이 있으면 출력
if selected_choice:
print(f"선택된 항목: {selected_choice}")
else:
print("관련 항목을 찾지 못했습니다.")
customer_message = customer_message.strip()
speak(customer_message)
# 소리내어 읽기 (TTS)
def speak(text):
print("[AI도우미] : " + text)
file_name = "voice.mp3"
if os.path.exists(file_name):
try:
os.remove(file_name)
except PermissionError:
print(f"파일 {file_name}이(가) 다른 프로세스에 의해 사용 중입니다.")
return
tts = gTTS(text=text, lang='ko')
tts.save(file_name)
pygame.mixer.init()
pygame.mixer.music.load(file_name)
pygame.mixer.music.play()
while pygame.mixer.music.get_busy(): # 음악이 재생 중인지 확인
time.sleep(0.1)
pygame.mixer.quit()
if os.path.exists(file_name): # 음성 하고 파일 삭제
os.remove(file_name)
r = sr.Recognizer()
m = sr.Microphone()
speak("무엇을 도와드릴까요?")
stop_listening = r.listen_in_background(m, listen) # 처음 인자는 입력 신호, 두번 째 인자는 실행을 하는 함수
while True:
time.sleep(0.1)
우리가 필요로 하는 기능들을 점점 준비해서 맞추어 갈 수 있는 것에 아주 좋은 것 같습니다!
또한 앞으로 준비해야 하는 기능을 더욱 보완을 해야하는데.
위와 같은 기능들을 조금 더 보완해 가면서 만들면 좋을 것 같다는 생각이 들었습니다.
'코딩 교육 TIL' 카테고리의 다른 글
2024-05-21 AI 코딩 TIL (0) | 2024.05.21 |
---|---|
2024-05-17 AI 코딩 TIL (0) | 2024.05.17 |
2024-05-14 AI 코딩 TIL (0) | 2024.05.14 |
2024-05-13 AI 코딩 TIL (0) | 2024.05.13 |
2024-05-09 AI 코딩 TIL (0) | 2024.05.09 |