2023-12-27 语音转文字的whisper应用部署
点击 <C 语言编程核心突破> 快速C语言入门
语音转文字的whisper应用部署
- 前言
- 一、部署`whisper`
- 二、部署`whisper.cpp`
- 总结
前言
要解决问题: 需要一款开源的语音转文字应用, 用于视频自动转换字幕.
想到的思路: openai的whisper以及根据这个模型开发的whisper.cppC++应用.
其它的补充: 最好在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、内存和存储,从而提高硬件利用率并降低成本。每个数据库实例可以独立运行,处理不同的…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
