在 Django 应用中集成语音转换文本功能

realtime news  Sep 28, 2024 04:58  UTC 20:58

1 Min Read

在 Django 应用中集成语音转换文本功能可以通过允许应用内直接转录音频来显著增强用户体验。根据 AssemblyAI 的说法,开发人员可以利用他们的 API 无缝地实施这一功能。

项目设置

首先,创建一个新的项目文件夹并建立虚拟环境:

# Mac/Linux
python3 -m venv venv
. venv/bin/activate

# Windows
python -m venv venv
.\venv\Scripts\activate.bat

接下来,安装必要的包,包括 Django,AssemblyAI Python SDK 和 python-dotenv:

pip install Django assemblyai python-dotenv

创建 Django 项目

创建一个名为 'stt_project' 的新 Django 项目,并在其中创建一个名为 'transcriptions' 的新应用:

django-admin startproject stt_project
cd stt_project
python manage.py startapp transcriptions

构建视图

在 'transcriptions' 应用中,创建一个视图来处理文件上传和转录。打开 transcriptions/views.py 并添加以下代码:

from django.shortcuts import render
from django import forms
import assemblyai as aai

class UploadFileForm(forms.Form):
    audio_file = forms.FileField()

def index(request):
    context = None
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            file = request.FILES['audio_file']
            transcriber = aai.Transcriber()
            transcript = transcriber.transcribe(file.file)
            file.close()
            context = {'transcript': transcript.text} if not transcript.error else {'error': transcript.error}
    return render(request, 'transcriptions/index.html', context)

定义 URL 配置

通过创建 transcriptions/urls.py 将视图映射到 URL:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

stt_project/urls.py 中的全局项目 URL 配置中包含此应用的 URL 模式:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('', include('transcriptions.urls')),
    path('admin/', admin.site.urls),
]

创建 HTML 模板

在 'transcriptions/templates' 目录中,创建一个 index.html 文件并包含以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AssemblyAI Django App</title>
</head>
<body>
    <h1>Transcription App with AssemblyAI</h1>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <input  accept="audio/*" name="audio_file">
        <button >Upload</button>
    </form>
    <h2>Transcript:</h2>
    {% if error %}
        <p >{{ error }}</p>
    {% endif %}
    <p>{{ transcript }}</p>
</body>
</html>

设置 API 密钥

在根目录中创建 .env 文件,并存储 AssemblyAI 的 API 密钥:

ASSEMBLYAI_API_KEY=your_api_key_here

stt_project/settings.py 中加载此环境变量:

from dotenv import load_dotenv
load_dotenv()

运行 Django 应用

使用以下命令启动服务器:

python manage.py runserver

在浏览器中访问该应用,上传音频文件,并查看转录文本。

非阻塞实现

为了避免阻塞操作,请考虑使用 Webhook 或异步函数。Webhook 在转录准备好时通知您,而异步调用则允许应用在转录过程中继续运行。

使用 Webhook

在转录配置中设置一个 Webhook URL,并在单独的视图函数中处理 Webhook 交付:

webhook_url = f'{request.get_host()}/webhook'
config = aai.TranscriptionConfig().set_webhook(webhook_url)
transcriber.submit(file.file, config)

定义 Webhook 接收器:

def webhook(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        transcript_id = data['transcript_id']
        transcript = aai.Transcript.get_by_id(transcript_id)

将此视图映射到 URL:

urlpatterns = [
    path('', views.index, name='index'),
    path('webhook/', views.webhook, name='webhook'),
]

使用异步函数

在 Django 中利用异步视图进行非阻塞转录:

transcript_future = transcriber.transcribe_async(file.file)
if transcript_future.done():
    transcript = transcript_future.result()

Django 应用的语音转换文本选项

在实施语音转换文本功能时,考虑使用 AssemblyAI 或 Google Cloud Speech-to-Text 等云端 API,以获得高准确性和可扩展性,或者使用 SpeechRecognition 和 Whisper 等开源库,以获得更大的控制权和隐私性。

结论

本指南展示了如何使用 AssemblyAI API 将语音转换文本功能集成到 Django 应用中。开发人员可以选择阻塞和非阻塞的实现方式,并根据需要选择最佳的语音转换文本解决方案。

欲了解更多详情,请访问 AssemblyAI 博客



Read More