LoginSignup
3
5

More than 1 year has passed since last update.

会議など保存した音声ファイルの文字起こしをVOSKを使ってお手軽にやる

Posted at

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'])
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5