VOSKが流行っていたのでやってみました。
Google Colaboratoryで実施しましたが、Pythonだったら何でも大丈夫なはずです。
下準備する
!pip3 install vosk
!git clone https://github.com/alphacep/vosk-api.git
!wget https://alphacephei.com/vosk/models/vosk-model-small-ja-0.22.zip
!unzip vosk-model-small-ja-0.22.zip
!mv vosk-model-small-ja-0.22 model
WAVファイルを準備する(アップロードする)
WAVファイルを準備する
16kHz,16bit,monoである必要あり。
以下の記事などを参考に
zoomで録画した動画からffmpeg, soxあたりで変換すると幸せになれました。
以下を実行する
以下を参考に以下を実行する
経過はすっ飛ばして、最終的に出力されるテキストだけ表示するようにしました。
アップロードしたファイルをhogehoge.wavとしています。アップロードしたファイル名に変更してください。
#!/usr/bin/env python3
from vosk import Model, KaldiRecognizer, SetLogLevel
import sys
import os
import wave
import json
SetLogLevel(0)
if not os.path.exists("model"):
print ("Please download the model from https://alphacephei.com/vosk/models and unpack as 'model' in the current folder.")
exit (1)
wf = wave.open("hogehoge.wav", "rb")
if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
print ("Audio file must be WAV format mono PCM.")
exit (1)
model = Model("model")
rec = KaldiRecognizer(model, wf.getframerate())
rec.SetWords(True)
while True:
data = wf.readframes(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
output = rec.Result()
json_dict = json.loads(output)
print(json_dict['text'])
print(json.loads(rec.FinalResult())['text'])