python で音声認識して自作のSiriを作るには

Pythonで音声認識
この記事は約6分で読めます。

python で日本語の音声認識をリアルタイムで実施できるライブラリとして

Speech recognitionがあります。英語であればオフラインも対応しています

windows向けapiとして無料で日本語認識をできますので

インストールから使い方まで説明致します。

本日の伝えたいこと

✔ pythonで無料で音声認識を実施したいときは、Speech recognitionでgoogleと連携した音声認識がすぐに出来る

困ったこと

python 音声認識をしたくてもwindowsでリアルタイムで実施出来なかった

内容

speech recognition モジュールを使い音声認識をする

メリット

目的に応じて

・日本語のリアルタイム音声認識が簡単にできる

・英語の音声認識であればオフラインでも音声認識実施できる(精度低め)

解決方法

pythonでspeech recognitionを使う事前準備

以下サイトを参考にさせていただきました

Pythonで音声入力に入門しよう(SpeechRecognition)
SpeechRecognitionライブラリをつかったPythonによる音声入力の紹介をします
SpeechRecognitionを使って音声入力からテキスト化する自動議事録を作ってみた - Qiita
背景 最近音声認識に興味があり、調べるといろいろとできるようになってきているようなので、 わかりやすい例として、音声からテキスト化する自動議事録を作ってみました。 やってみてうまくいったところ、課題が見えたので備忘録も込めて残し...

※オフラインでの音声認識を実施する場合は、Pocket Sphinxが対応しておらず3.6.8でないと実施できません

speech recognitionのinstallが必要となるため、下記pipコマンドにてインストール

>>pip install SpeechRecognition

>>pip install pyaudio

>>pip install pocketsphinx

[2021.5.3 追記] どうしてもPython 3.7, 3.8, 3.9で使いたいという場合は、

オフラインのみでしか使用できないが、下記からダウンロードし、直接インストールすると、

問題なくインストールできる。(ただし非公式のため注意)

※繰り返しになるが、3.7以降はPocket Sphinxは非対応なので、Google APIでオンライン版のみが使用できる

>>pip install PyAudio‑0.2.11‑cp38‑cp38‑win_amd64.whl

Archived: Python Extension Packages for Windows - Christoph Gohlke

使い方

音声待機状態にする

speech recognitionのRecognizerクラスをインスタンス化し、

listen関数にて待機する。

序盤におまじないとして、ambient_noise(定常化ノイズ)を除去する関数を入れておく

r = sr.Recognizer()

    with sr.Microphone() as source:

        r.adjust_for_ambient_noise(source)

        print(“=== 何か、話しかけてください ===”)

        audio = r.listen(source)

Googleに音声を飛ばし、音声認識結果を受信する

下記コマンドで実施できる。

引数でlanguageを指定できるので、そこで日本語を指定すると音声認識の精度が上がる

 text = r.recognize_google(audio, language=’ja-JP’)

ちなみに、オフラインでどうしても実施したい場合は

英語であれば、CMU Sphinxを使うことで実施できる。

recognizer_instance.recognize_sphinx

ただし、精度はかなり低いので要注意だ。

[2021.5.3 更新]

下記記事にてCMU Sphinxを使ってオフラインでも日本語認識させる方法記事にしました

サンプルコード

下記では、音声認識結果に”hey”と”google”が入っていた場合に

特定のバッチファイルをサブプロセスで起動するものにしている。

あとはこの内容を鍛えることで、自作Siriが完成していく

# -*- coding: utf-8 -*-
import speech_recognition as sr
import subprocess

def Getspeaking_value():
    r = sr.Recognizer()  
    with sr.Microphone() as source:
        r.adjust_for_ambient_noise(source)
        print("=== 何か、話しかけてください ===")
        audio = r.listen(source)
        print("[o] ===> オーディオGET")
    try:
        print("=== 音声解析中 ===")
        text = r.recognize_google(audio,language="ja-JP")
        print("You said : " + text)
    except:
        pass

    # Heyと Googleが入っていたら特定のバッチを起動する
    if (("Hey" in text) & ("Google" in text)):
        subprocess.run(“xxx.bat”)

if __name__ == "__main__":
    Getspeaking_value()

実際の現場で求められること

楽しいの間違いないが、音声認識を日頃使うことがあるか。と言われるとまずないだろう。

議事メモが音声認識で出来たら便利かな?ぐらいなものである

まとめ

✔ Speech recognitionを使うと、googleと連携した音声認識がすぐに出来る

✔ オフライン実行は、精度は低いがCMU Sphinxを使うとできる

タイトルとURLをコピーしました