Вот что выдает программа:
Транскрипция: {‘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…» должна быть написана кириллицей.