vosk аудио в текст

Мощный инструмент для конвертами аудио в текст с открытым доступом
 avatar
user_2065311
markdown
a year ago
6.1 kB
80
Indexable

Установка Vosk

Установите Python: Если у вас еще не установлен Python, скачайте и установите его с официального сайта Python. Vosk работает на Python, поэтому он необходим для его использования.

Установите Vosk через pip:

Откройте терминал и выполните следующую команду для установки Vosk:


pip install vosk

Скачайте модели для нужного языка:

https://alphacephei.com/vosk/models

https://github.com/alphacep/vosk-api

Перейдите на страницу моделей Vosk и скачайте модель для нужного вам языка. Эти модели необходимы для распознавания речи.

Используйте Vosk в своих скриптах: После установки вы можете использовать Vosk в своих Python скриптах для распознавания речи. Примеры использования и документацию можно найти на GitHub странице Vosk.

пример скрипта

from vosk import Model, KaldiRecognizer
import sys
import os
import wave
import subprocess

# Function to convert M4A to WAV
def convert_m4a_to_wav(input_m4a, output_wav):
    subprocess.run(['ffmpeg', '-i', input_m4a, '-ac', '1', '-ar', '16000', '-vn', output_wav], check=True)

# Path to the audio file
audio_file = "/Users/wl/Desktop/видео с семинара/аудио.m4a"
wav_file = "/Users/wl/Desktop/видео с семинара/аудио.wav"

# Convert M4A to WAV
convert_m4a_to_wav(audio_file, wav_file)

# Check if the model directory exists
model_dir = "model" # Change to "model-small" for the small model
if not os.path.exists(model_dir):
    print(f"Model directory '{model_dir}' not found. Please download and unpack the model.")
    exit(1)

# Open the WAV file
wf = wave.open(wav_file, "rb")
if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
    print("Audio file must be WAV format mono PCM.")
    exit(1)

# Load the model
model = Model(model_dir)
rec = KaldiRecognizer(model, wf.getframerate())

# Process the audio file
while True:
    data = wf.readframes(4000)
    if len(data) == 0:
        break
    if rec.AcceptWaveform(data):
        print(rec.Result())
    else:
        print(rec.PartialResult())

# Final result
print(rec.FinalResult())

Вариант #2

from vosk import Model, KaldiRecognizer
import sys
import os
import wave
import subprocess

# Function to convert M4A to WAV
def convert_m4a_to_wav(input_m4a, output_wav):
    subprocess.run(['ffmpeg', '-i', input_m4a, '-ac', '1', '-ar', '16000', '-vn', output_wav], check=True)

# Path to the audio file
audio_file = "/Users/wl/Desktop/видео с семинара/аудио.m4a"
wav_file = "/Users/wl/Desktop/видео с семинара/аудио.wav"

# Convert M4A to WAV
convert_m4a_to_wav(audio_file, wav_file)

# Check if the model directory exists
model_dir = "/Users/wl/VOSK_models/vosk-model-small-ru-0.22"
if not os.path.exists(model_dir):
    print(f"Model directory '{model_dir}' not found. Please download and unpack the model.")
    exit(1)

# Open the WAV file
wf = wave.open(wav_file, "rb")
if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
    print("Audio file must be WAV format mono PCM.")
    exit(1)

# Load the model
model = Model(model_dir)
rec = KaldiRecognizer(model, wf.getframerate())

# File to save the results
result_file = "/Users/wl/Desktop/видео с семинара/результат.txt"

# Process the audio file and write results to the file
with open(result_file, "w") as file:
    while True:
        data = wf.readframes(4000)
        if len(data) == 0:
            break
        if rec.AcceptWaveform(data):
            result = rec.Result()
            print(result)
            file.write(result + "\n")
        else:
            print(rec.PartialResult())

    # Final result
    final_result = rec.FinalResult()
    print(final_result)
    file.write(final_result + "\n")

print(f"Results written to {result_file}")

Вариант #3 без конвертации

from vosk import Model, KaldiRecognizer
import sys
import os
import wave

# Путь к готовому WAV-файлу
wav_file = "/Users/wl/Desktop/видео с семинара/аудио.wav"

# Проверяем, существует ли директория модели
model_dir = "/Users/wl/VOSK_models/vosk-model-small-ru-0.22"
if not os.path.exists(model_dir):
    print(f"Model directory '{model_dir}' not found. Please download and unpack the model.")
    exit(1)

# Открываем WAV файл
wf = wave.open(wav_file, "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_dir)
rec = KaldiRecognizer(model, wf.getframerate())

# Обрабатываем аудиофайл
while True:
    data = wf.readframes(4000)
    if len(data) == 0:
        break
    if rec.AcceptWaveform(data):
        print(rec.Result())
    else:
        print(rec.PartialResult())

# Конечный результат
print(rec.FinalResult())

В этом скрипте:

  • Удалена функция convert_m4a_to_wav и её вызов, так как она больше не нужна.
  • Путь к аудиофайлу (wav_file) указывает напрямую на ваш WAV-файл.

Убедитесь, что параметры вашего WAV-файла соответствуют требованиям Vosk (моно, 16 бит PCM, частота дискретизации 16000 Гц). Если ваш файл уже в этом формате, скрипт будет работать корректно.