반응형

@ 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를 사용해서 진행되는 것들이라면

응용방법에서 좋은 아이디어를 얻을 수 있을 것이다.

 

알고리즘이 아니라 활용방법에 있어서

마치 프론트엔드와 백엔드처럼

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기