Вот что выдает программа:
Транскрипция: {‘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 для обработки аудиофайлов и получения транскрипции. Проблема с отображением русского текста латиницей может быть вызвана настройками модели или параметрами, которые передаются в запросе.
В частности, причина может быть в следующем:
- Автоопределение языка: Whisper пытается автоматически определить язык аудиофайла. Если модель неверно интерпретирует аудио как текст, записанный латиницей (например, из-за акцента или шумов), она может транскрибировать русский текст латиницей.
- Отсутствие указания языка: В параметрах вашего запроса нет указания конкретного языка. 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}
Изменения:
- Добавлен параметр
"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")
После разделения передавайте сегменты в модель с соответствующими параметрами языка.
Какой подход выбрать?
- Если языки четко различимы и их порядок предсказуем, используйте разделение аудио.
- Если хотите автоматизировать процесс, используйте автоопределение языка с постобработкой результата.
Попробуйте оба варианта и выберите тот, который лучше подходит для вашего сценария.
Программа:
# 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…» должна быть написана кириллицей.