google speech recognition API을 파이썬 플라스크 서버에 호출하여 마이크에서 음성 인식을하고 웹 페이지에 결과를 표시하는 웹을 작성했습니다. post
과 socket.io를 시도했지만 실패했습니다. 내가 어떻게 해? 웹 클라이언트 :파이썬 서버에서 웹 클라이언트로 Google 음성 인식 결과를 보내는 방법
var socket = io.connect();
$('#start_speech').click(function(){
socket.emit('speech_start');
});
socket.on('speech_result', function(msg){
socket.emit('speech_result')
console.log(msg.data);
$('#interim-span').html(msg.data);
});
음성 인식 기능 :
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@socketio.on('speech_start')
def speech_recognition():
RATE = 16000
CHUNK = int(RATE/10) # 100ms
language_code = 'en-US' # a BCP-47 language tag
client = speech.SpeechClient()
config = types.RecognitionConfig(
encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=RATE,
language_code=language_code,
enable_word_time_offsets=True)
streaming_config = types.StreamingRecognitionConfig(
config=config,
interim_results=True)
with MicrophoneStream(RATE, CHUNK) as stream:
audio_generator = stream.generator()
requests = (types.StreamingRecognizeRequest(audio_content=content)
for content in audio_generator)
responses = client.streaming_recognize(streaming_config, requests)
listen_loop(responses)
def listen_loop(responses):
print("begin loop")
for response in responses:
if not response.results:
continue
result = response.results[0]
if not result.alternatives:
continue
alternative = result.alternatives[0]
transcript = alternative.transcript
if not result.is_final:
print(transcript)
socketio.emit('speech_result', {data: speech})
else:
print(transcript)
socketio.emit('speech_result', {data: speech})
if re.search(r'\b(exit|quit)\b', transcript, re.I):
print('Exiting..')
break
문서에 따르면, 전달 responses
는 응답이 서버에 의해 제공 될 때까지 차단하는 발전기이다. 처음에 post
시도하고 루프에서 결과를 반환하지만 "ValueError :보기 함수 응답을 반환하지 않았습니다."있어요.
그런 다음 문제를 봤고 socketio를 시도했습니다. 콘솔에서 결과를 볼 수있는 speech_recognition
함수가 호출되었지만 speech_result
메시지를받지 못했습니다. 나는 그것이 speech_start
의 연결에있을 때 다른 사람과 연결할 수 없다고 생각합니까?
사실 나는 실시간으로 음성 인식 결과를 보여주는 google speech webpage에 데모를 발견했지만 어떻게했는지는 알 수 없습니다. 그래서 socketio의 문제입니까 아니면 다른 방법을 시도해야합니까?