Разработка приложения для транскрипции и перевода речи с помощью OpenAI Whisper и Streamlit
Данное руководство объясняет, как использовать Streamlit (конкретно, st.audio_input) для записи аудио с микрофона и обработку его с помощью модели OpenAI Whisper. Результатом станет текстовый файл (.txt
) с транскрипцией и/или переводом на английский язык.
Необходимые компоненты:
- Базовые знания Python
- Знакомство со Streamlit
- Ключ API OpenAI (требуется регистрация).
Описание Whisper:
Whisper – это открытая нейронная сеть, обеспечивающая высокоточное распознавание английской речи.
API OpenAI предлагает два основных функционала:
- Транскрипцию речи
- Перевод речи.
Описание Streamlit:
Streamlit – это инструмент для быстрого создания и публикации приложений, работающих с данными. Эта библиотека Python с открытым кодом позволяет создавать веб-приложения, визуализировать данные, итеративно улучшать приложения на основе новых моделей машинного обучения.
Streamlit идеально подходит для разработчиков Python, предоставляя удобные средства для взаимодействия с пользователем (ввод текста, чисел, дат) и создания интерактивных графиков с помощью популярных библиотек Python.
Установка Streamlit
Для запуска любых приложений Streamlit необходимо сначала установить Streamlit с помощью команды:
pip install streamlit
Установка других библиотек
Поскольку мы работаем с преобразованием аудио в текст, нам необходимо надежно хранить переменные среды.
pip install openai python-dotenv
Создание переменной среды
Создайте новый файл в корневом каталоге проекта и назовите его .env
.
Вставьте свой ключ API OpenAI:
OPENAI_API_KEY="sk-..."
Создание приложения
В своем каталоге создайте файл streamlit_app.py
, который будет содержать весь код Python для транскрибирования и перевода нашего аудио и вывода полученного текста.
Чтобы инициализировать экземпляр клиента OpenAI, скопируйте и вставьте этот код:
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
api_key = os.getenv('OPENAI_API_KEY')
client = OpenAI()
Блок кода подключается и считывает наш секретный ключ в файле .env
, гарантируя, что мы аутентифицированы как пользователи.
P.S.: Использование Openal API не является бесплатным, так как для использования сервиса вам необходимо приобрести несколько кредитов.
Транскрипция с помощью Whisper
Давайте обновим streamlit_app.py
следующим образом:
...
import streamlit as st
st.logo(
"logo.png",
size="medium",
link="https://platform.openai.com/docs",
)
st.title("Transcription with Whisper")
audio_value = st.audio_input("record a voice message to transcribe")
if audio_value:
transcript = client.audio.transcriptions.create(
model="whisper-1",
file = audio_value
)
transcript_text = transcript.text
st.write(transcript_text)
API транскрипций преобразует наш звук с помощью виджета st.audio_input
для записи нашего голоса. Если запись существует, то model, Whisper используется для создания нужного формата файла для транскрипции аудио и вывода текста с помощью функции st.write(), которая берет строку и записывает ее непосредственно в наше веб-приложение.
Чтобы использовать тот же логотип, что и в левом верхнем углу приложения, загрузите его и сохраните в каталоге вашего проекта.
Теперь давайте запустим это приложение с помощью этой команды в терминале:
streamlit run streamlit_app.py
Загрузка Transcribed текста
Возможность загрузки транскрибированного сообщения для последующего использования пригодится для ведения записей, когда вам это понадобится.
Streamlit предлагает виджет ввода, который позволяет отображать кнопку загрузки. Вернитесь к файлу streamlit_app.py
, обновите кодовую базу следующим образом:
...
txt_file = "transcription.txt"
# Initialize session state for download confirmation
if "downloaded" not in st.session_state:
st.session_state.downloaded = False
# Download button
if st.download_button(
label="Download Transcription",
file_name="transcription.txt",data=transcript_text,
):
st.session_state.downloaded = True
# Show success message after download
if st.session_state.downloaded:
st.success("Transcription file downloaded successfully!")
В строках кода выше происходит следующее:
st.session_state
в Streamlit позволяет вам совместно использовать переменные между повторами для каждого сеанса пользователя- Переменная
transcript_text
будет содержать содержимое транскрибированного текста - Переменная
txt_file
с назначенным значениемtranscription.txt
— это имя файла транскрибированного текста при загрузке файла. - В функции
st.download_button()
метка описывает пользователю, для чего предназначена кнопка.
Элемент статуса st.success
отображает сообщение об успешном завершении при сохранении файла.
Перевод с помощью Whisper
Процесс создания перевода аналогичен созданию транскрипции. Конечная точка перевода переведет иностранный язык в письменный текст на английском языке из входных данных аудиофайла.
Скопируйте и вставьте этот код.
...
st.header("Translation with Whisper", divider="gray")
audio_translate = st.audio_input("record a voice message to translate")
if audio_translate:
translate = client.audio.translations.create(
model="whisper-1",
file=audio_translate
)
st.write(translate.text)
Для сохранения переведенного аудио в текстовом формате, воспользуйтесь кнопкой «Загрузить транскрипцию». Исходный код приложения доступен в репозитории – попробуйте его! Успехов!
Заключение
В отличие от примеров OpenAI, использующих предварительно записанные аудио, это приложение, созданное с помощью Streamlit, позволяет транскрибировать и переводить вашу собственную речь, напрямую взаимодействуя с API OpenAI.