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

news/2024/9/20 17:50:34/文章来源:https://www.cnblogs.com/CodeForBetter/p/18307777

最近好久没有写博客了,浅浅记录下如何将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创建项目:

    poetry new demo-py
    
  • 2. 进入项目目录:进入项目目录准备后续操作:

    cd demo-py
    

image

安装依赖

使用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 osfrom 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")# 对于每个文件,存储结果在一个字典列表中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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/745347.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各种图(流程图,思维导图,UML,拓扑图,ER图)简介

原文链接:https://blog.51cto.com/jiqing9006/3284733 流程图 1.定义:流程图是对过程、算法、流程的一种图像表示,在技术设计、交流及商业简报等领域有广泛的应用。 2.案例3.计算机语言只是一种工具。光学习语言的规则还不够,最重要的是学会针对各种类型的问题,拟定出有效…

使用C#/.NET解析Wiki百科数据实现获取历史上的今天

创建一个webapi项目做测试使用。 创建新控制器,搭建一个基础框架,包括获取当天日期、wiki的请求地址等创建一个Http请求帮助类以及方法,用于获取指定URL的信息 使用http请求访问指定url,先运行一下,看看返回的内容。内容如图右边所示,实际上是一个Json数据。我们主要解…

嘿!通义灵码周边「超大鼠标垫」上线啦,更多玩法等待解锁

嘿!通义灵码周边「超大鼠标垫」上线啦,更多玩法等待解锁【领鼠标垫】简单3步体验通义灵码,即可领取灵码限量版超大鼠标垫! 体验通义灵码升级模型和新功能,贏灵码限量周边和大奖! 两种活动玩法,丰富好礼送不停,快来参与吧! 【玩法一】完成安装、学习、体验通义灵码简单…

OceanBase 金融项目优化案例(union all 改写)

在工单系统上看到有一条sql问题还没解决,工单描述看到压测场景被cpu资源被这条sql打爆,目前影响到项目进度,比较紧急。 直接联系这位同学看看是否需要帮忙。 慢SQL:SELECT task.*,sc01.aab300 …

【Linux网络】Linux网络协议栈问题汇集

Linux本机与本机socket通信会走网卡吗? 1.127.0.0.1本机网络IO需要经过网卡吗? 不需要经过网卡,即使把网卡拔了本机网络还是可以正常使用的。 本机网络IO的内核执行流程:跨机网络IO的流程:2.数据包在内核中是什么走向,和外网发送相比流程上有什么区别? 本机网络 IO 和跨…

laravel11: 给接口增加签名验证

一,添加controller/中间件/路由 1,添加中间件 liuhongdi@lhdpc:/data/site/gsapi$ php artisan make:middleware ApiSignINFO Middleware [app/Http/Middleware/ApiSign.php] created successfully. 2,添加路由: 在routes/api.php文件中 Route::controller(VirtualControlle…

Slimes

这个看官方题解就好了,解释一下官方题解 首先一个很大的前提(也比较显然),就是为了达到最优的情况,我们只会让一个史莱姆一直吃,而不会让两个史莱姆都吃,最后再让其中一个史莱姆将另一个史莱姆吃掉这一个区间指的是,只有这个区间的史莱姆进行互相吃,相当于忽略了区间外…

大屏可视化看板变形问题和分辨率问题的解决办法

关于大屏可视化,好看的画面总是千篇一律,但是遇到的问题,可谓是五花八门,就比如画面变形问题,模糊问题。做一个可视化画面,电脑上显示好好的↓ 实际投出来↓ 画面拉长了压扁了扭曲变形…… 回到电脑上一顿调,没啥用,还是变形…… 那种无力感,经历过画面工程师懂的都…

cerebro 报错: Oops, cannot start the server. com.google.common.util.concurrent.UncheckedExecutionExcep

@目录前言环境异常修改方案第二次报错修改方式成功 前言 使用 elasticsearch + springboot 实现新闻搜索功能: https://javapub.net.cn/star/project/news-search-es/ 遇到的错误记录。 环境cerebro 下载地址: https://github.com/lmenezes/cerebro使用了最新的版本: cerebr…

manim边学边做--Matrix

在代数问题中,矩阵是必不可少的工具,manim中提供了一套展示矩阵(Matrix)的模块,专门用于在动画中显示矩阵格式的数据。关于矩阵的类主要有4个:Matrix:通用的矩阵 IntegerMatrix:元素是整数的矩阵 DecimalMatrix:元素包含小数的矩阵 MobjectMatrix:元素可以是图形的矩…