見出し画像

PythonのSpeechRecognitionでマイク録音と文字起こしを簡単実装

最近Djangoで音声入力するアプリを作る必要があって探してたら便利なライブラリを見つけたので、備忘録としてここにアウトプットしておきます。TwitterのスペースとかClubhouseで音声系のメディアが増えてきてる流れがあるので開発者側の需要もきっとあるはず。

これです。​

https://github.com/Uberi/speech_recognition

マイク録音から文字起こしまでできるのに支払い方法を登録する必要もないです。内部で​Googleのspeech to text APIを使ってると思うんだけど無限に使い放題なのはどういう仕組みなんだろう。

スクリーンショット 2022-01-25 0.15.44

GitHubのスターも6000とかなり使われてる。

インストール方法から説明します(Python環境があること前提)。

インストール方法

まずSpeechRecognitionをインストールします。

pip install speech_recognition

SpeechRecognitionのマイク入力機能を使うにはPyAudioが必要です。以下の手順でインストールしてください。

【Macの場合】
①Homebrewをインストールしていない場合は以下のリンクを参考にインストールして「brew」コマンドを使えるようにしてください。
[URL](https://qiita.com/balius_1064/items/ac7dff5ef10eaf69996f)

②以下のコマンドを実行します(PyAudioのインストールに必要です)

brew install portaudio

③以下のコマンドを実行します

pip install PyAudio

【Windowsの場合】
①以下のリンクを参考にPyAudioをインストールしてください。
https://arakan-pgm-ai.hatenablog.com/entry/2020/07/20/000000

PCマイクを起動して録音する

録音した音源を取り込んでみます。以下を実行するとPCマイクが起動して発話した音声が取り込まれます。

import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone() as input:
    print("録音中:")
    audio = r.listen(input)

audioに録音したバイナリデータが入ります。

オーディオデータを文字起こしする

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

録音したデータをrecognize_google関数の引数に与えるだけです。第二引数のlanguageを変えれば英語とか他の言語として文字起こしできます。コード短く済んで素敵だ。

試した限りでは固有名詞以外の発話はなかなかの精度で文字起こししてくれます。

ちなみにDjangoなどのWebアプリケーションに組み込む際は、PyAudioがLinuxで動かないのでAWSやHerokuではそのままでは録音ができません(OSが入ってるサーバーに録音デバイスが直接繋がってないとダメなんだと思う)。

Webアプリケーション上で録音もしたい場合はフロントエンドでJavascriptを使ってWebRTC(getUserMediaなど)でchromeからマイクにアクセスする必要があります。それでもiosスマホだとSafariがデフォルトなので動きません。需要とやる気が出たらその記事も書きます。

今回は音声メモアプリの開発に使いましたが、他に思いつくのはSiriのような音声チャットボットをWebアプリで作るだったりですね。

サポートは料理好きなのでの食材費にさせていただきます。