利用FastAPI和OpenAI-Whisper打造高效的语音转录服务

cnblogs 2024-07-18 08:13:00 阅读 52

最近好久没有写博客了,浅浅记录下如何将<code>OpenAI-Whisper做成Web服务吧🤣

介绍

在这篇指导性博客中,我们将探讨如何在Python中结合使用FastAPIOpenAI-WhisperOpenAI-Whisper是一个前沿的语音识别模型,而FastAPI是一个高性能的现代Web框架,专门用于构建API。这两种技术的结合,能够帮助我们快速搭建一个高效的语音转录服务。

环境安装

如想本地安装可参考官网教程。如想将其做成web服务,我们需要准备好开发环境。请按照以下步骤安装所需环境:

  • Python 3.10.10:前往Python官网下载并安装。Windows用户请确保在安装过程中勾选“Add Python to PATH”,不然需自己配置环境变量。

  • Poetry:Poetry是一个Python的依赖管理和包管理工具。安装指令如下,具体可以查看Poetry安装指南:

    # Linux、macOS、Windows(WSL)

    curl -sSL https://install.python-poetry.org | python3 -

    # Windows(Powershell)

    (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -

  • Pycharm:Pycharm是最强大的Python编辑器,可以从JetBrains官网下载并安装。

项目创建

Pycharm创建项目(推荐方式)

  1. 打开Pycharm,选择创建新项目。

  2. 在弹出的窗口中选择安装路径,并设置项目相关配置。

  3. 点击创建以初始化新项目。

    image

    )

使用命令行创建项目

  • 1. 使用Poetry创建项目:我们可以直接使用Poetry创建项目:

    <code>poetry new demo-py

  • 2. 进入项目目录:进入项目目录准备后续操作:

    cd demo-py

image

安装依赖

使用<code>Poetry安装FastAPI、Uvicorn(ASGI服务器)和OpenAI-Whisper:

poetry add fastapi uvicorn whisper

Poetry依赖配置如下(可直接复制使用,不用手动add依赖):

[tool.poetry.dependencies]

python = "^3.10"

fastapi = "^0.111.1"

uvicorn = "^0.30.1"

openai-whisper = { git = "https://github.com/openai/whisper.git", rev = "v20231117" }

setuptools-rust = "^1.9.0"

numpy = "^1.26.4"

创建FastAPI应用

在项目目录中创建一个新的Python文件,例如main.py,并添加以下代码:

from fastapi import FastAPI, File, UploadFile, HTTPException

from fastapi.responses import JSONResponse

from tempfile import NamedTemporaryFile, TemporaryDirectory

import whisper

import torch

import os

from typing import List

# 检查是否有NVIDIA GPU可用

torch.cuda.is_available()

DEVICE = "cuda" if torch.cuda.is_available() else "cpu"

# 加载Whisper模型

model = whisper.load_model("base", device=DEVICE)

app = FastAPI()

@app.post("/whisper/")

async def handler(files: List[UploadFile] = File(...)):

if not files:

raise HTTPException(status_code=400, detail="No files were provided")code>

# 对于每个文件,存储结果在一个字典列表中

results = []

# 使用TemporaryDirectory创建临时目录

with TemporaryDirectory() as temp_dir:

for file in files:

# 在临时目录中创建一个临时文件

temp_file_path = os.path.join(temp_dir, file.filename)

with open(temp_file_path, "wb") as temp_file:

# 将用户上传的文件写入临时文件

temp_file.write(file.file.read())

temp_file.flush() # 确保所有数据写入磁盘

# 确保文件在转录前已关闭

result = model.transcribe(temp_file_path)

# 存储该文件的结果对象

results.append({

'filename': file.filename,

'transcript': result['text'],

})

# 返回包含结果的JSON响应

return JSONResponse(content={'results': results})

运行FastAPI应用

使用Uvicorn运行FastAPI应用:

poetry run uvicorn main:app --reload

在浏览器中打开http://127.0.0.1:8000/docs,你将看到自动生成的API文档,可以在这里测试上传音频文件并获取转录结果。

image

点击“Try it out”上传音视频文件后点击“Execute”执行请求。

image

至此,我们已经成功集成了Whisper并将其作为服务提供。大家可以自行研究和扩展这个项目。

image

总结

通过这篇博客,我们学习了如何在Python中使用FastAPI集成OpenAI-Whisper,并创建了一个简单的语音转录服务。

如这篇博客对你有所帮助可以贡献一颗您的小⭐⭐! 项目仓库地址ai-whisper



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。