반응형
@ 38 : 음성인식 비서 만들기
1. 음성녹음, 저장, 재생하기
2. 구글음성인식 사용하여 음성 인식하기
3. 2번에 추가하여 특정 단어에 반응하기
1. 음성녹음, 저장, 재생하기
- pyaudio 설치 (오류가 났을 때 해결 : https://naradora78.tistory.com/84 )
import pyaudio
import wave
from playsound import playsound
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = r'38_assistant\output.wav'
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print('음성녹음을 시작합니다.')
frames = []
for i in range(0, int(RATE/CHUNK*RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print('음성녹음을 완료하였습니다.')
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b' '.join(frames))
wf.close()
print('녹음된 파일을 재생합니다.')
playsound(WAVE_OUTPUT_FILENAME)
결과.
되기는 하나 잡음이 매우 심하게 들린다.
둘 중 하나의 원인일 듯
1. 버전이 안맞아서 제대로 동작을 안한다.
2. 필터링없이 오디오 데이터 그대로를 재생한다.
2. 구글음성인식 사용하여 음성 인식하기
import speech_recognition as sr
try:
while True:
r = sr.Recognizer()
with sr.Microphone() as source:
print('음성을 입력하세요.')
audio = r.listen(source)
try:
print('음성변환 : ' + r.recognize_google(audio, language='ko-KR'))
except sr.UnknownValueError:
print('오디오를 이해할 수 없습니다.')
except sr.RequestError as e:
print(f'에러가 발생하였습니다. 에러원인 : {e}')
except KeyboardInterrupt:
pass
결과.
뭐지... 왜 이렇게 잘 되지? 역시 구글
3. 2번에 추가하여 특정 단어에 반응하기
import speech_recognition as sr
try:
while True:
r = sr.Recognizer()
with sr.Microphone() as source:
print('음성을 입력하세요.')
audio = r.listen(source)
try:
stt = r.recognize_google(audio, language='ko-KR')
print('음성변환 : ' + stt)
if '안녕' in stt:
print('네, 안녕하세요')
elif '날씨' in stt:
print('정말 날씨가 좋네요')
except sr.UnknownValueError:
print('오디오를 이해할 수 없습니다.')
except sr.RequestError as e:
print(f'에러가 발생하였습니다. 에러원인 : {e}')
except KeyboardInterrupt:
pass
결과.
지난번 얼굴인식도 그렇지만 음성인식도 구글에서 제공하는 API를 사용하니 너무 좋고 편하다.
시중에 나오는 인공지능 관련 코딩 서적들을 좀 둘러봐야겠다.
영상처리나 음성처리나...
이렇게 제공되는 API를 사용해서 진행되는 것들이라면
응용방법에서 좋은 아이디어를 얻을 수 있을 것이다.
알고리즘이 아니라 활용방법에 있어서
마치 프론트엔드와 백엔드처럼
반응형
최근댓글