【世界最高レベル】高精度日本語音声認識モデル。日本語音声コーパス「ReazonSpeech」を無償公開(2023年1月18日)
以下の資料を参考にしました。
URlを踏むとわざわざコードを書かなくても、OKです。
さらに、デモがあるので気軽に試すことができます。
1.パッケージをインストール
%%capture
!pip install -q espnet==0.10.3
!pip install -q espnet_model_zoo
import warnings
warnings.filterwarnings('ignore')
私たちのPythonコードでいくつかのクールなことを行うために、"espnet "というツールと "espnet_model_zoo "というパッケージをインストールしています。また、このプロセスの間に出てくるかもしれない警告メッセージは無視しています。
2.プログラムがどの単語を使うかを決める
import torch
from espnet2.bin.asr_inference import Speech2Text
device = "cuda" if torch.cuda.is_available() else "cpu"
beam_size = 5#@param {type:"integer"}
reazonspeech = Speech2Text.from_pretrained(
"reazon-research/reazonspeech-espnet-v1",
beam_size=beam_size,
batch_size=0,
device=device
)
このプログラムは、話し言葉を理解するために「トーチ」と呼ばれるツールを使用します。また、「Speech2Text」と呼ばれるツールを使って、話し言葉を書き言葉に変換します。このプログラムは、コンピュータに「cuda」チップがあればその上で、また通常の「cpu」上でも実行することができます。5」という数字は、異なる可能性のある単語があるときに、プログラムがどの単語を使うかを決めるのに使われます。
3.話し言葉の音を処理
# Instructions:
You are a professional programmer teacher.
I am studying Python code.
Based on the constraints and input sentences below, please output the [best easy-to-understand sentence].
# Constraints:
• Make it understandable to elementary school students.
• Don't leave important keywords behind.
# Input statement:
import librosa
import librosa.display
from IPython.display import display, Audio
import matplotlib.pyplot as plt
from datetime import datetime
def display_speech(speech, sample_rate):
display(Audio(speech, rate=sample_rate))
librosa.display.waveshow(speech, sr=sample_rate)
plt.show()
def transcribe(speech):
asr_results = reason speech(speech)
print(asr_results[0][0])
# output statement:
このプログラムは、誰かが声に出して言っていることを理解するのを助けることができます。librosa」というツールを使って、話し言葉の音を処理することができます。このプログラムは、話し言葉の音波を絵にすることもできます。プログラムに話し言葉を与えると、「理由発話」というツールを使って、その言葉を書き言葉に変えてくれます。そして、その言葉を印刷することによって、その言葉が何であるかを教えてくれるのです。
4.自分の話し声を録音
from IPython.display import Javascript
from google.colab import output
from base64 import b64decode
RECORD = """
const sleep = time => new Promise(resolve => setTimeout(resolve, time))
const b2text = blob => new Promise(resolve => {
const reader = new FileReader()
reader.onloadend = e => resolve(e.srcElement.result)
reader.readAsDataURL(blob)
})
var record = time => new Promise(async resolve => {
stream = await navigator.mediaDevices.getUserMedia({ audio: true })
recorder = new MediaRecorder(stream)
chunks = []
recorder.ondataavailable = e => chunks.push(e.data)
recorder.start()
await sleep(time)
recorder.onstop = async ()=>{
blob = new Blob(chunks)
text = await b2text(blob)
resolve(text)
}
recorder.stop()
})
"""
def record(sec, file_name='audio.wav', sample_rate=16000):
display(Javascript(RECORD))
s = output.eval_js('record(%d)' % (sec * 1000))
b = b64decode(s.split(',')[1])
with open(file_name, 'wb+') as f:
f.write(b)
return librosa.load(file_name, sr=sample_rate)
このプログラムは、自分の話し声を録音するのに役立ちます。このプログラムは、ウェブブラウザでいくつかのコードを実行するために、「Javascript」と呼ばれるツールを使用します。また、このプログラムは「google.colab」と呼ばれるツールを使ってウェブブラウザと連動しています。このプログラムは、録音する時間を指定すると、その時間だけコンピュータのマイクを使ってあなたの声を録音します。そして、その音声をあなたが選んだ名前のファイルに保存します。最後に、「librosa」というツールを使ってサウンドファイルを読み込み、作業可能な状態にします。
5.実際に、自分の話し声を録音
seconds = 5 #@param {type:"integer"}
print(f"マイクに向けて%d秒お話ししてください..."%seconds, end="")
speech, sample_rate = record(seconds, file_name="audio_%s.wav"%datetime.now().strftime('%Y%m%d%H%M%S'))
print("完成。")
display_speech(speech, sample_rate)
transcribe(speech)
このプログラムは、マイクに向かってある秒数だけ話してもらうものです。何秒間話すかは、プログラムの最初にある数字を変更することで選ぶことができます。あなたが話した後、プログラムはあなたが話した内容をサウンドファイルとして保存し、「リブロサ」というツールを使ってあなたが話した内容の音波の画像を表示します。最後に、プログラムは「transcribe」というツールを使って、あなたが言ったことを文字にしてプリントアウトしようとします。
実際に使った感じは、こんな感じです。

日本語のモデルが無料で使えるのはありがたいですね。日本語って、AI泣かせなので笑
なので、これから15秒以上で使えるものが出てくるみたいなので、ワックワクします。