質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

Python3 Google Cloud Speech APIの表示

kuroto-ra
kuroto-ra

総合スコア0

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0回答

0評価

2クリップ

1480閲覧

投稿2019/01/25 04:58

この記事GitHubのソースを参考にGoogle Cloud Speech APIを利用できるところまではできたのですが、

cmd

音声 音声の 音声のに 音声の認識 音声の認識で 音声の認識です テスト テスト テスト テスト 音声の認識 テスト

といった感じで不要な部分を少し削ることはできたのですが認識中の言葉も表示されてしまい、最終的な認識された結果(音声の認識 テストの部分)だけを取得することができず、困っています。

GitHubのソース
ほとんどこちらの方の引用ですが、該当ソースです。
リアルタイムに取得した音声の最終結果を拾う方法を教えて頂きたいです。

python:mic.py

import pyaudio, time, audioop, math, sys, argparse from gcloud.credentials import get_credentials from google.cloud.speech.v1beta1 import cloud_speech_pb2 from google.rpc import code_pb2 from grpc.beta import implementations class stdout: BOLD = "\033[1m" END = "\033[0m" CLEAR = "\033[2K" def bold(string): return stdout.BOLD + string def printr(string): sys.stdout.write("\r") sys.stdout.write(string) sys.stdout.flush() frames = [] silent_frames = [] is_recording = False should_finish_stream = False class Result: def __init__(self): self.transcription = "" self.confidence = "" self.is_final = False recognition_result = Result() def make_channel(host, port): ssl_channel = implementations.ssl_channel_credentials(None, None, None) creds = get_credentials().create_scoped(args.speech_scope) auth_header = ("authorization", "Bearer " + creds.get_access_token().access_token) auth_plugin = implementations.metadata_call_credentials(lambda _, func: func([auth_header], None), name="google_creds") composite_channel = implementations.composite_channel_credentials(ssl_channel, auth_plugin) return implementations.secure_channel(host, port, composite_channel) def listen_loop(recognize_stream): global should_finish_stream global recognition_result for resp in recognize_stream: if resp.error.code != code_pb2.OK: raise RuntimeError(resp.error.message) for result in resp.results: for alt in result.alternatives: recognition_result.transcription = alt.transcript recognition_result.confidence = alt.confidence recognition_result.stability = result.stability #print(" ".join(alt.transcript)) #printr(" ".join((alt.transcript, " ", "stability: ", str(int(result.stability * 100)), "%"))) if result.is_final: recognition_result.is_final = True should_finish_stream = True return printr(recognition_result.transcription) print() def request_stream(): recognition_config = cloud_speech_pb2.RecognitionConfig( encoding=args.audio_encoding, sample_rate=args.sampling_rate, language_code=args.lang_code, max_alternatives=1, ) streaming_config = cloud_speech_pb2.StreamingRecognitionConfig( config=recognition_config, interim_results=True, single_utterance=True ) yield cloud_speech_pb2.StreamingRecognizeRequest(streaming_config=streaming_config) while True: time.sleep(args.frame_seconds / 4) if should_finish_stream: return if len(frames) > 0: yield cloud_speech_pb2.StreamingRecognizeRequest(audio_content=frames.pop(0)) def pyaudio_callback(in_data, frame_count, time_info, status): # in_data = b"".join(in_data) assert isinstance(in_data, bytes) frames.append(in_data) return (None, pyaudio.paContinue) def run_recognition_loop(): global frames global silent_frames global is_recording global should_finish_stream if len(silent_frames) > 4: silent_frames = silent_frames[-4:] while not is_recording: time.sleep(args.frame_seconds // 4) if len(frames) > 4: for frame_index in range(4): data = frames[frame_index] rms = audioop.rms(data, 2) decibel = 20 * math.log10(rms) if rms > 0 else 0 if decibel < args.silent_decibel: silent_frames += frames[0:frame_index+1] del frames[0:frame_index + 1] return is_recording = True frames = silent_frames + frames silent_frames = [] with cloud_speech_pb2.beta_create_Speech_stub(make_channel(args.host, args.ssl_port)) as service: try: listen_loop(service.StreamingRecognize(request_stream(), args.deadline_seconds)) #printr(" ".join((bold(recognition_result.transcription), " ",str(int(recognition_result.confidence * 100)), "%"))) #printr(" ",str(int(recognition_result.confidence * 100)), "%") #print() except Exception as e: print(str(e)) def main(): global is_recording global should_finish_stream pa = pyaudio.PyAudio() devices = [] for device_index in range(pa.get_device_count()): metadata = pa.get_device_info_by_index(device_index) #print(device_index, metadata["name"]) stream = pa.open(format=pa.get_format_from_width(2), channels=1, rate=args.sampling_rate, input_device_index=args.device_index, input=True, output=False, frames_per_buffer=int(args.sampling_rate * args.frame_seconds), stream_callback=pyaudio_callback) stream.start_stream() while True: is_recording = False should_finish_stream = False run_recognition_loop() stream.stop_stream() stream.close() pa.terminate() if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--sampling-rate", "-rate", type=int, default=16000) parser.add_argument("--device-index", "-device", type=int, default=0) parser.add_argument("--lang-code", "-lang", type=str, default="ja-JP") parser.add_argument("--audio-encoding", "-encode", type=str, default="LINEAR16") parser.add_argument("--frame-seconds", "-fsec", type=float, default=0.1, help="1フレームあたりの時間(秒). デフォルトは100ミリ秒") parser.add_argument("--deadline-seconds", "-dsec", type=int, default=60*3+5) parser.add_argument("--silent-decibel", "-decibel", type=int, default=40) parser.add_argument("--speech-scope", "-scope", type=str, default="https://www.googleapis.com/auth/cloud-platform") parser.add_argument("--ssl-port", "-port", type=int, default=443) parser.add_argument("--host", "-host", type=str, default="speech.googleapis.com") args = parser.parse_args() main()

環境
windows10
python3.7

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。