2023-12-27 语音转文字的whisper应用部署
点击 <C 语言编程核心突破> 快速C语言入门
语音转文字的whisper应用部署
- 前言
- 一、部署`whisper`
- 二、部署`whisper.cpp`
- 总结
前言
要解决问题: 需要一款开源的语音转文字应用, 用于视频自动转换字幕.
想到的思路: openai
的whisper
以及根据这个模型开发的whisper.cpp
C++应用.
其它的补充: 最好在linux
下部署, Windows
下困难太多.
一、部署whisper
官方文档要求至少十python3.8-3.10
, 同时需要ffmpeg
, 要有nv
的显卡, 支持cuda
直接安装部署:
pip install -U openai-whisper
期间会安装5-6g
的相关文件, 都是显卡相关和cuda
相关的东西, 如果不换成国内的源, 估计是不太可能安装完的.
Size | Parameters | English-only model | Multilingual model | Required VRAM | Relative speed |
---|---|---|---|---|---|
tiny | 39 M | tiny.en | tiny | ~1 GB | ~32x |
base | 74 M | base.en | base | ~1 GB | ~16x |
small | 244 M | small.en | small | ~2 GB | ~6x |
medium | 769 M | medium.en | medium | ~5 GB | ~2x |
large | 1550 M | N/A | large | ~10 GB | 1x |
需要下载相应的训练文件, 带.en
的是纯英文的, 其它的是多语言的.
越大越慢, 同时耗费的内存及显存越多, 一般我用small
或base
, 再大的就干不动了.
如果是Linux通常是下载时间问题, 而Windows那就是跟自己过意不去, 各种错误, 我是解决不了直接放弃了, 转wsl debian
.
使用比较容易, 我一般用命令行, 毕竟没想着部署到服务器给其他人用, 毕竟是真耗费资源, 自己玩玩就可以了.
'/home/lhb/.local/bin/whisper' --model base --language Chinese '/home/lhb/Cpp/voice/极简SQL_0_课程邀请.mp3' --output_format vtt
我的模型部署后, 系统提示没有放进PATH
中, 所以需要把脚本的绝对路径写上,
model
参数是选择你用的模型, 我一般用base或small
, tiny
基本是个玩具, 不可用, 其他的我的硬件带不起来.
语言是你的是啥就选啥, 好像支持九十多种, 一般就是英语和中文.
请务必安装ffmpeg
, 这个是必选项, 没有它啥也干不了. 因为无论音频还是视频解码都是它.
whisper
模型一般装ffmpeg
后, 大部分文件都可转换.
输出格式, 可以有四五种, 字幕或直接txt
, 我就选vtt
, 目前比较通用.
效果目前看还可以, 我是给自己的课程加字幕, 对于中文, 准确率估计不会小于80%, 需要修修补补, 英文貌似效果不错.
二、部署whisper.cpp
对于没资源的同志们, 有个好消息, 有位大神, 不, 是一堆大神, 将whisper
搞成cpp
版了, 而且可以直接在msys2
资源管理平台安装!
这是Windows
使用者的福音, 这是没有nv
显卡的穷人的福音.
但是, 你还是绕不过ffmpeg
, 在windows
下安装whisper.cpp
只需要一句:
$ pacman -S mingw-w64-clang-x86_64-whisper.cpp
系统会自动帮你安装所有的依赖, 但是轮到ffmpeg
, 以下命令了解一下.
$ pacman -S mingw-w64-clang-x86_64-ffmpeg mingw-w64-clang-x86_64-aom mingw-w64-clang-x86_64-bzip2 mingw-w64-clang-x86_64-dav1d mingw-w64-clang-x86_64-fontconfig mingw-w64-clang-x86_64-frei0r-plugins mingw-w64-clang-x86_64-fribidi mingw-w64-clang-x86_64-gmp mingw-w64-clang-x86_64-gnutls mingw-w64-clang-x86_64-gsm mingw-w64-clang-x86_64-lame mingw-w64-clang-x86_64-libass mingw-w64-clang-x86_64-libbluray mingw-w64-clang-x86_64-libcaca mingw-w64-clang-x86_64-libexif mingw-w64-clang-x86_64-libgme mingw-w64-clang-x86_64-libiconv mingw-w64-clang-x86_64-libmodplug mingw-w64-clang-x86_64-libplacebo mingw-w64-clang-x86_64-librsvg mingw-w64-clang-x86_64-libsoxr mingw-w64-clang-x86_64-libssh mingw-w64-clang-x86_64-libtheora mingw-w64-clang-x86_64-libva mingw-w64-clang-x86_64-libvorbis mingw-w64-clang-x86_64-libvpx mingw-w64-clang-x86_64-libwebp mingw-w64-clang-x86_64-libx264 mingw-w64-clang-x86_64-libxml2 mingw-w64-clang-x86_64-onevpl mingw-w64-clang-x86_64-openal mingw-w64-clang-x86_64-opencore-amr mingw-w64-clang-x86_64-openjpeg2 mingw-w64-clang-x86_64-opus mingw-w64-clang-x86_64-rav1e mingw-w64-clang-x86_64-rtmpdump mingw-w64-clang-x86_64-SDL2 mingw-w64-clang-x86_64-speex mingw-w64-clang-x86_64-srt mingw-w64-clang-x86_64-svt-av1 mingw-w64-clang-x86_64-vid.stab mingw-w64-clang-x86_64-vulkan mingw-w64-clang-x86_64-x265 mingw-w64-clang-x86_64-xvidcore mingw-w64-clang-x86_64-zimg mingw-w64-clang-x86_64-zlib
这还没玩, 如果你安装的库中有版本不匹配的, 哈哈, 找错去吧, 没个几小时是万万不能安装成功的.
此版本的使用方法:
需要将视频或音频文件转换为16khz
的wav
文件, 文件转换非常快, 只要你能装好ffmpeg
.
然后调用whisper.cpp.exe
文件, -m
是模型, 模型与上边的不通用! 需要再下载一波.
其它的差不多, 告诉语言, 我们一般是中文, 这里使用zh
, 不能用Chinese
, -ovtt
是输出格式.
ffmpeg -i D:\极简SQL\课程视频\极简SQL_0_课程邀请.mp4 -ar 16000 -ac 1 -c:a pcm_s16le e:\clangC++\voiceToText\srt.wavwhisper.cpp -m e:\clangC++\voiceToText\ggml-model-whisper-base.bin -l zh e:\clangC++\voiceToText\srt.wav -ovttwhisper.cpp -m e:\clangC++\voiceToText\ggml-model-whisper-small.bin -l zh e:\clangC++\voiceToText\srt.wav -ovtt
效果和openai
的原版有少许不同, 估计是训练模型不一致导致的, 但大差不差, 正确率完全一样.
总结
请开始你的字幕自动加载吧.
点击 <C 语言编程核心突破> 快速C语言入门
相关文章:
2023-12-27 语音转文字的whisper应用部署
点击 <C 语言编程核心突破> 快速C语言入门 语音转文字的whisper应用部署 前言一、部署whisper二、部署whisper.cpp总结 前言 要解决问题: 需要一款开源的语音转文字应用, 用于视频自动转换字幕. 想到的思路: openai的whisper以及根据这个模型开发的whisper.cppC应用. …...

MAVLINK生成自定义消息
git clone https://github.com/mavlink/mavlink.gitcd mavlinkgit submodule update --init --recursivepython -m mavgenerate出现以下界面 XML填写自定义xml路径,内容可以参考mavlink/message_definitions/v1.0 Out为输出路径 <?xml version"1.0"…...
【MediaPlayerSource】播放器源内部的音视频sender的创建和使用
来看下声网播放中的sender相关组件设计:MediaPlayerSourceDummy 是一个MediaPlayerSourceImpl ,输入音视频帧到 播放器。player_worker_ 线程触发所有操作,由外部传递,与其他组件公用 MediaPlayerSourceDummy(base::IAgoraService* agora_service, utils::worker_type play…...

【机器学习】西瓜书第6章支持向量机课后习题6.1参考答案
【机器学习】西瓜书学习心得及课后习题参考答案—第6章支持向量机 1.试证明样本空间中任意点x到超平面(w,b)的距离为式(6.2)。 首先,直观解释二维空间内点到直线的距离: 由平面向量的有关知识,可得: 超平面的法向量为 w w w&am…...

【OpenAI Q* 超越人类的自主系统】DQN :Q-Learning + 深度神经网络
深度 Q 网络:用深度神经网络,来近似Q函数 强化学习介绍离散场景,使用行为价值方法连续场景,使用概率分布方法实时反馈连续场景:使用概率分布 行为价值方法 DQN(深度 Q 网络) 深度神经网络 Q-L…...

Vue axios Post请求 403 解决之道
前言: 刚开始请求的时候报 CORS 错误,通过前端项目配置后算是解决了,然后,又开始了新的报错 403 ERR_BAD_REQUEST。但是 GET 请求是正常的。 后端的 Controller 接口代码如下: PostMapping(value "/login2&qu…...

【Leetcode】重排链表、旋转链表、反转链表||
目录 💡重排链表 题目描述 方法一: 方法二: 💡旋转链表 题目描述 方法: 💡反转链表|| 题目描述 方法: 💡总结 💡重排链表 题目描述 给定一个单链表 L 的头节…...

RabbitMQ 报错:Failed to declare queue(s):[QD, QA, QB]
实在没想到会犯这种低级错误。 回顾整理一下吧: 原因:SpringBoot主配置类默认只会扫描自己所在的包及其子包下面的组件。其他位置的配置不会被扫描。 如果非要使用其他位置,就需要在启动类上面指定新的扫描位置。注意新的扫描位置会覆盖默…...

Neo4j 5建库
Neo4j 只有企业版可以运行多个库,社区版无法创建多个库,一个实例只能运行一个库; 如果业务需要使用多个库怎么办呢? 就是在一个机器上部署多个实例,每个实例单独一个库名 这个库的名字我们可以自己定义; …...

鲁棒最小二乘法 拟合圆
圆拟合算法_基于huber加权的拟合圆算法-CSDN博客 首次拟合圆得到采用的上述blog中的 Ksa Fit 方法。 该方法存在干扰点时,拟合得到的结果会被干扰。 首次拟合圆的方法 因此需要针对外点增加权重因子,经过多次迭代后&…...
LeetCode——动态规划
动态规划 一、一维数组:斐波那契数列 爬楼梯70简单 dp定义: dp[i]表示爬到第i阶有多少种不同的方式 状态转移方程: dp[i] dp[i-1] dp[i-1] (每次可以爬1或2个台阶) 边界条件: dp[0] 1; dp[1] 1;&#…...

opencv和gdal的读写图片波段顺序问题
最近处理遥感影像总是不时听到 图片的波段错了,一开始不明就里,都是图片怎么就判断错了。 1、图像RGB波段顺序判断 后面和大家交流,基本上知道了一个判断标准。 一般来说,进入人眼的自然画面在计算机视觉中一般是rgb波段顺序表示…...
PyQt 打包成exe文件
参考链接 Python程序打包成.exe(史上最全面讲解)-CSDN博客 手把手教你将pyqt程序打包成exe(1)_pyqt exe-CSDN博客 PyInstaller 将DLL文件打包进exe_怎么把dll文件加到exe里-CSDN博客 自己的问题 按照教程走的话,会出现找不到“mmdeploy_ort_net.dll”文件的报错…...
【Web2D/3D】SVG(第二篇)
1. 前言 SVG(Scalable Vector Graphics,可缩放矢量图形)是一种使用XML描述2D图形的语言,由于SVG是基于XML(HTML也是基于XML的),因为SVG DOM中每个元素都是可以操作的,包含修改元素属…...
leetcode18. 四数之和
题目描述 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): …...

(十八)Flask之threaing.local()对象
0、引子: 如下是一段很基础的多线程代码: from threading import Threaddemo 0def task(arg):global demodemo argprint(demo)for i in range(10):t Thread(targettask, args(i, ))t. start()当程序运行时,可能会看到输出的顺序是混乱的…...

ffmpeg 硬件解码零拷贝unity 播放
ffmpeg硬件解码问题 ffmpeg 在硬件解码,一般来说,我们解码使用cuda方式,当然,最好的方式是不要确定一定是cuda,客户的显卡不一定有cuda,windows 下,和linux 下要做一些适配工作,最麻…...

高德地图_公共交通路径规划API,获取两地点之间的驾车里程和时间
import pandas as pd import requests import jsondef get_dis_tm(origin, destination,city,cityd):url https://restapi.amap.com/v3/direction/transit/integrated?key xxx #这里就是需要去高德开放平台去申请key,请在xxxx位置填写,web服务APIlink {}origin{}&desti…...

PyTorch深度学习实战(28)——对抗攻击(Adversarial Attack)
PyTorch深度学习实战(28)——对抗攻击 0. 前言1. 对抗攻击2. 对抗攻击模型分析3. 使用 PyTorch 实现对抗攻击小结系列链接 0. 前言 近年来,深度学习在图像分类、目标检测、图像分割等诸多领域取得了突破性进展,深度学习模型已经能…...

MariaDB单机多实例的配置方法
1、什么是数据库的单机多实例 数据库的单机多实例是指在一台物理服务器上运行多个数据库实例。这种部署方式允许多个数据库实例共享相同的物理资源,如CPU、内存和存储,从而提高硬件利用率并降低成本。每个数据库实例可以独立运行,处理不同的…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...