首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年07月17日 17:02

最近好久没有写博客了,浅浅记录下如何将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 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")

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

From:https://www.cnblogs.com/CodeForBetter/p/18307777
本文地址: http://www.shuzixingkong.net/article/105
0评论
提交 加载更多评论
其他文章 iOS开发基础109-网络安全
在iOS开发中,保障应用的网络安全是一个非常重要的环节。以下是一些常见的网络安全措施及对应的示例代码: Swift版 1. 使用HTTPS 确保所有的网络请求使用HTTPS协议,以加密数据传输,防止中间人攻击。 示例代码: 在Info.plist中配置App Transport Security (
PixiJS源码分析系列:第二章 渲染在哪里开始?
第二章 渲染在哪里开始? 牢记,按第一章介绍的 npm start 启动本地调式环境才可进行调式 如果是 example 文件夹内的例子还需要 serve . 开启本地静态服务器 上一章介绍了 PixiJS 源码调式环境的安装,以及基本的调试方法。本章要研究一下它是如何渲染的 渲染大致步骤: 注册渲
PixiJS源码分析系列:第二章 渲染在哪里开始? PixiJS源码分析系列:第二章 渲染在哪里开始? PixiJS源码分析系列:第二章 渲染在哪里开始?
tensorflow学习率指数衰减ExponentialDecay的参数介绍与使用方法
本文介绍在tensorflow库中,用于动态调整神经网络的学习率的一种方法——指数衰减ExponentialDecay()策略的参数含义及其具体用法~
tensorflow学习率指数衰减ExponentialDecay的参数介绍与使用方法 tensorflow学习率指数衰减ExponentialDecay的参数介绍与使用方法 tensorflow学习率指数衰减ExponentialDecay的参数介绍与使用方法
Docker通信全视角:原理、实践与技术洞察
本文全面深入地探讨了Docker容器通信技术,从基础概念、网络模型、核心组件到实战应用。详细介绍了不同网络模式及其实现,提供了容器通信的技术细节和实用案例,旨在为专业从业者提供深入的技术洞见和实际操作指南。 关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年
manim边学边做--Matrix
在代数问题中,矩阵是必不可少的工具,manim中提供了一套展示矩阵(Matrix)的模块,专门用于在动画中显示矩阵格式的数据。关于矩阵的类主要有4个: Matrix:通用的矩阵 IntegerMatrix:元素是整数的矩阵 DecimalMatrix:元素包含小数的矩阵 MobjectMatrix:
manim边学边做--Matrix manim边学边做--Matrix manim边学边做--Matrix
咬文嚼图式的介绍二叉树、B树/B-树
网上的很多博客都是只有文字说明,比较抽象,所以笔者决定自己画一些图来解释二叉树,二叉搜索树,B树/B-树。
咬文嚼图式的介绍二叉树、B树/B-树 咬文嚼图式的介绍二叉树、B树/B-树 咬文嚼图式的介绍二叉树、B树/B-树
MViT:性能杠杠的多尺度ViT | ICCV 2021
论文提出了多尺度视觉Transformer模型MViT,将多尺度层级特征的基本概念与Transformer模型联系起来,在逐层扩展特征复杂度同时降低特征的分辨率。在视频识别和图像分类的任务中,MViT均优于单尺度的ViT。 来源:晓飞的算法工程笔记 公众号 论文: Multiscale Vision
MViT:性能杠杠的多尺度ViT | ICCV 2021 MViT:性能杠杠的多尺度ViT | ICCV 2021 MViT:性能杠杠的多尺度ViT | ICCV 2021
yearrecord——一个类似痕迹墙的React数据展示组件
介绍一下自己做的一个类似于力扣个人主页提交记录和GitHub主页贡献记录的React组件。 下图分别是力扣个人主页提交记录和GitHub个人主页的贡献记录,像这样类似痕迹墙的形式可以比较直观且高效得展示一段时间内得数据记录。 然而要从0实现这个功能还是有一些麻烦得,并且该功能可用的场景也比较多,于是
yearrecord——一个类似痕迹墙的React数据展示组件 yearrecord——一个类似痕迹墙的React数据展示组件 yearrecord——一个类似痕迹墙的React数据展示组件