利用FastAPI和OpenAI-Whisper打造高效的语音转录服务
最近好久没有写博客了,浅浅记录下如何将OpenAI-Whisper做成Web服务吧
介绍
在这篇指导性博客中,我们将探讨如何在Python中结合使用FastAPI和OpenAI-Whisper。OpenAI-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创建项目(推荐方式)
打开
Pycharm,选择创建新项目。在弹出的窗口中选择安装路径,并设置项目相关配置。
点击创建以初始化新项目。

)
使用命令行创建项目
1. 使用Poetry创建项目:我们可以直接使用Poetry创建项目:
poetry new demo-py
2. 进入项目目录:进入项目目录准备后续操作:
cd demo-py

安装依赖
使用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文档,可以在这里测试上传音频文件并获取转录结果。

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

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

总结
通过这篇博客,我们学习了如何在Python中使用FastAPI集成OpenAI-Whisper,并创建了一个简单的语音转录服务。
如这篇博客对你有所帮助可以贡献一颗您的小! 项目仓库地址ai-whisper
利用FastAPI和OpenAI-Whisper打造高效的语音转录服务的更多相关文章
- 利用 WSL 在 Windows下打造高效的 Linux 开发环境
WSL-Windows Subsystem for Linux 介绍 The Windows Subsystem for Linux lets developers run Linux environ ...
- 打造高效前端工作环境 - tmux
打造高效前端工作环境 - tmux 前言 现在前端开发可不容易啊,先打开个VIM,然后再打开个lite-server,一不小心写个ES2015还要打开个gulp来做预编译,如果能把这么多个窗口放在一 ...
- 《微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记1)WePY开发环境的安装
WePY的安装或更新都通过npm进行,全局安装或更新WePY命令行工具,使用以下命令: npm install wepy-cli -g 稍等片刻,成功安装后,即可创建WePY项目. 注意:如果npm安 ...
- 微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记4)支持React.js语法的Taro框架
Taro本身实现的情况类似于mpvue,mpvue的未来展望中也包含了支付宝小程序,现在的版本中,也可以使用不同的构建命令来构建出百度小程序的支持,如第10章所示,但是现在Taro先于mpvue实现了 ...
- # Pycharm打造高效Python IDE
Pycharm打造高效Python IDE 建议以scientific mode运行,在科学计算时,可以方便追踪变量变化,并且会提示函数的用法,比普通模式下的提示更加智能,一般在文件中引入了numpy ...
- 使用Ratpack和Spring Boot打造高性能的JVM微服务应用
使用Ratpack和Spring Boot打造高性能的JVM微服务应用 这是我为InfoQ翻译的文章,原文地址:Build High Performance JVM Microservices wit ...
- 教你如何通过CodeArts IDE插件调用API,高效合成语音
摘要:本实验基于华为云自研CodeArts IDE,指导用户通过使用华为云API,来实现一个文字合成语音的应用. 本文分享自华为云社区<通过CodeArts IDE插件调用API,高效合成语音! ...
- 利用 istio 来对运行在 Kubernetes 上的微服务进行管理
尝试在一个准生产环境下,利用 istio 来对运行在 Kubernetes 上的微服务进行管理. 这一篇是第一篇,将一些主要的坑和环境准备工作. 内容较多,因此无法写成手把手教程,希望读者有一定 Ku ...
- Android 框架练成 教你打造高效的图片加载框架(转)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41874561,本文出自:[张鸿洋的博客] 1.概述 优秀的图片加载框架不要太多, ...
- Android 框架练成 教你打造高效的图片加载框架
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41874561,本文出自:[张鸿洋的博客] 1.概述 优秀的图片加载框架不要太多, ...
随机推荐
- zabbix第二篇
常用命令 查看版本 [root@zabbix001 xx]# zabbix_server -V zabbix_server (Zabbix) 4.2.8 Revision cb5d5b10f4 28 ...
- 2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。 定义一个“美丽下标”,当满足以下条件时: 1.找到字符串 a 在字符串 s 中的位
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k. 定义一个"美丽下标",当满足以下条件时: 1.找到字符串 a ...
- 【winform】解决datagridview里放combox,combox不能按下键快速选择的问题
效果图: 一开始,是拖个下拉框到窗体上,用dgv.controls.Add(combox)添加到表格里,在通过表格事件,触发时,改变下拉框的位置和大小,这样做,下拉框是会出现在表格里,但是有问题,不能 ...
- docker创建容器数据持久化资源限制基础命令
1. docker简介和核心概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使 ...
- Stable diffusion采样器详解
在我们使用SD web UI的过程中,有很多采样器可以选择,那么什么是采样器?它们是如何工作的?它们之间有什么区别?你应该使用哪一个?这篇文章将会给你想要的答案. 什么是采样? Stable Diff ...
- Yolov8和Yolov10的差异以及后处理实现
Yolo模型可分为4个维度的概念 模型版本.数据集.模型变体(Variants).动态/静态模型. Yolo各模型版本进展历史 Yolov(2015年华盛顿大学的 Joseph Redmon 和 Al ...
- 一文带你搞清楚Python的多线程和多进程
本文分享自华为云社区<Python中的多线程与多进程编程大全[python指南]>,作者:柠檬味拥抱. Python作为一种高级编程语言,提供了多种并发编程的方式,其中多线程与多进程是最常 ...
- 如何基于R包做GO分析?实现秒出图
GO分析 基因本体论(Gene Ontology, GO)是一个用于描述基因和基因产品属性的标准术语体系.它提供了一个有组织的方式来表示基因在生物体内的各种角色.基因本体论通常从三个层面对基因进行描述 ...
- kubernetes安装Prometheus
安装 在目标集群上,执行如下命令: kubectl apply -f https://github.com/512team/dhorse/raw/main/conf/kubernetes-promet ...
- 记录EF 排序配上自定义的比较器
记录EF 排序配上自定义的比较器 前言 要求页面文件显示的时候能够按照序号去排序要求如下: 数据库有一个列存放文件名,如: 1.1文件 1.2文件 1.1.1文件 1.1.11文件1.0.txt 1. ...