Перейти к содержимому

❗ ___ Как транскрибировать многоязычное аудио файл ??? Не проверял. Нужно поискать другие решения. (Teg: Два языка. )

Вот что выдает программа:
Транскрипция: {‘text’: ‘Guten Tag! Darf ich mich vorstellen? Mein Name ist… Dobry den! Pozwolte predstavitse! Menya zovut…’}

Эта часть текста «Dobry den! Pozwolte predstavitse! Menya zovut…» должна быть написана кириллицей.


Ваша программа использует API OpenAI Whisper для обработки аудиофайлов и получения транскрипции. Проблема с отображением русского текста латиницей может быть вызвана настройками модели или параметрами, которые передаются в запросе.

В частности, причина может быть в следующем:

  1. Автоопределение языка: Whisper пытается автоматически определить язык аудиофайла. Если модель неверно интерпретирует аудио как текст, записанный латиницей (например, из-за акцента или шумов), она может транскрибировать русский текст латиницей.
  2. Отсутствие указания языка: В параметрах вашего запроса нет указания конкретного языка. Whisper по умолчанию выбирает язык самостоятельно.

Решение

Чтобы указать, что ожидаемый язык — русский, добавьте параметр language в запрос. Модифицируйте функцию transcribe_audio следующим образом:

transcribe_audio(file_path, api_key):
    # URL API OpenAI для работы с аудио
    url = "https://api.openai.com/v1/audio/transcriptions"
    
    # Заголовки запроса
    headers = {
        "Authorization": f"Bearer {api_key}"
    }

    # Открываем файл для отправки
    with open(file_path, "rb") as audio_file:
        # Формируем данные для отправки
        files = {
            "file": audio_file,
            "model": (None, "whisper-1"),
            "language": (None, "ru")  # Указываем, что язык — русский
        }

        # Выполняем POST-запрос
        response = requests.post(url, headers=headers, files=files)

    # Обрабатываем ответ
    if response.status_code == 200:
        return response.json()
    else:
        return {"error": response.text}

Изменения:

  1. Добавлен параметр "language": (None, "ru") в files, чтобы указать, что язык записи — русский.

После этого Whisper должен корректно транскрибировать русский текст кириллицей. Попробуйте внести изменения и повторно запустить программу. Если проблема сохраняется, убедитесь, что аудиофайл четко произнесен без значительных шумов.

Вы сказали:

Да но у меня есть и Русский и Немецкий язык в файле. Как мне получить транскрипцию с этих двух языков ?

Если в вашем аудиофайле содержатся два языка, такие как русский и немецкий, и вы хотите получить транскрипцию с использованием обоих языков, вы можете использовать функцию автоматического определения языка в Whisper. В этом случае модель будет пытаться определить язык для каждой части аудиофайла и транскрибировать текст соответственно.

Однако если вы хотите контролировать процесс или обрабатывать каждый язык отдельно, вы можете использовать следующие подходы:


1. Использование автоматического определения языка

API OpenAI Whisper поддерживает автоопределение языка. Если вы удалите параметр language из запроса, модель попытается самостоятельно транскрибировать текст с использованием подходящих языков.

Измените код так, чтобы не указывать язык явно:

files = {
    "file": audio_file,
    "model": (None, "whisper-1")
}

Результат транскрипции будет включать текст на обоих языках.


2. Постобработка результата для разделения языков

После получения результата вы можете разделить текст на русский и немецкий, используя библиотеки обработки текста, такие как langdetect или langid. Например:

Установка библиотеки:

pip install langdetect

Пример кода:

from langdetect import detect

def split_by_language(transcription):
    sentences = transcription.split('. ')  # Разделить текст на предложения
    result = {"ru": [], "de": []}

    for sentence in sentences:
        lang = detect(sentence)  # Определить язык предложения
        if lang == "ru":
            result["ru"].append(sentence)
        elif lang == "de":
            result["de"].append(sentence)

    return result

Вызовите эту функцию после получения транскрипции:

if "text" in result:
    transcription = result["text"]
    separated_text = split_by_language(transcription)
    print("Русский текст:", " ".join(separated_text["ru"]))
    print("Немецкий текст:", " ".join(separated_text["de"]))

3. Ручное разделение аудио на сегменты

Если автоопределение языков не дает желаемого результата, вы можете разделить аудиофайл на части (например, по таймкодам) с использованием библиотеки pydub. Затем обработайте каждый сегмент отдельно, указывая язык вручную.

Пример:

pythonКопировать кодfrom pydub import AudioSegment

audio = AudioSegment.from_file(file_path)

# Разделение аудио: 0-10 секунд для немецкого, 10-20 секунд для русского
german_part = audio[:10000]  # первые 10 секунд
russian_part = audio[10000:20000]  # следующие 10 секунд

# Сохранение сегментов
german_part.export("german_part.wav", format="wav")
russian_part.export("russian_part.wav", format="wav")

После разделения передавайте сегменты в модель с соответствующими параметрами языка.


Какой подход выбрать?

  1. Если языки четко различимы и их порядок предсказуем, используйте разделение аудио.
  2. Если хотите автоматизировать процесс, используйте автоопределение языка с постобработкой результата.

Попробуйте оба варианта и выберите тот, который лучше подходит для вашего сценария.


Программа:

# Make sure requests package is installed  
from icecream import ic #  ic() функция вместо print() для тестирования.
ic.configureOutput(includeContext=True)  # Включить вывод контекста

#ДЕРЕКТОРИЯ_KEY = "D:\project_D_2025\config"
ДЕРЕКТОРИЯ_ПРОЕКТА_ПАЙТН = "D:\\project_D_2025\\python\\test_ChatCPT"
ДЕРЕКТОРИЯ_ТЕКУЩЕГО_ФАЙЛА = ДЕРЕКТОРИЯ_ПРОЕКТА_ПАЙТН + "\\pr\\01_Голосовой_перевод_на_разные_языки"
ДЕРИКТОРИЯ_АУДИО_ФАЙЛА = ДЕРЕКТОРИЯ_ТЕКУЩЕГО_ФАЙЛА + "\\sounds\\A01.wav"

# Импортирование api_key из модуля key_gpt
import sys
sys.path.append('D:/project_D_2025/config')
from key_gpt import api_key #Этот код добавляет путь к sys.path, чтобы Python мог найти модуль key_gpt, а затем импортирует api_key из него.

file_path = ДЕРИКТОРИЯ_АУДИО_ФАЙЛА.replace("\\","/")

import requests

def transcribe_audio(file_path, api_key):
    # URL API OpenAI для работы с аудио (например, модель Whisper)
    url = "https://api.openai.com/v1/audio/transcriptions"
 

    # Заголовки запроса
    headers = {
        "Authorization": f"Bearer {api_key}"
    }

    # Открываем файл для отправки
    with open(file_path, "rb") as audio_file:
        # Формируем данные для отправки
        files = {
            "file": audio_file,
            "model": (None, "whisper-1")  # Указываем модель для транскрипции
            
        }

        # Выполняем POST-запрос
        response = requests.post(url, headers=headers, files=files)

    # Обрабатываем ответ
    if response.status_code == 200:
        return response.json()
    else:
        return {"error": response.text}

#ic(response)

# Пример использования
if __name__ == "__main__":
    # Укажите путь к аудиофайлу
    #file_path = "D:\project_D_2025\python\test_ChatCPT\pr\01_Голосовой_перевод_на_разные_языки\sounds\A01.wav"

    # Укажите ваш API-ключ OpenAI

    #api_key = "your_openai_api_key"

    # Отправляем запрос и получаем результат
    result = transcribe_audio(file_path, api_key)

    # Печатаем результат
    if "error" in result:
        print("Ошибка:", result["error"])
    else:
        print("Транскрипция:", result)

Вот что выдает программа:
Транскрипция: {‘text’: ‘Guten Tag! Darf ich mich vorstellen? Mein Name ist… Dobry den! Pozwolte predstavitse! Menya zovut…’}

Эта часть текста «Dobry den! Pozwolte predstavitse! Menya zovut…» должна быть написана кириллицей.

Добавить комментарий