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、内存和存储,从而提高硬件利用率并降低成本。每个数据库实例可以独立运行,处理不同的…...
ComfyUI-Custom-Scripts:20+实用功能全面解析与安装指南
ComfyUI-Custom-Scripts:20实用功能全面解析与安装指南 【免费下载链接】ComfyUI-Custom-Scripts Enhancements & experiments for ComfyUI, mostly focusing on UI features 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Custom-Scripts Comfy…...
一键捕获完整网页:Full Page Screen Capture 高效解决方案
一键捕获完整网页:Full Page Screen Capture 高效解决方案 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-e…...
LCC-LCC无线充电恒流/恒压闭环移相控制仿真 Simulink仿真模型,LCC-LCC谐振...
LCC-LCC无线充电恒流/恒压闭环移相控制仿真 Simulink仿真模型,LCC-LCC谐振补偿拓扑,闭环移相控制 1. 输入直流电压350V,负载为切换电阻,分别为50-60-70Ω,最大功率3.4kW,最大效率为93.6% 2. 闭环PI控制&…...
GIL移除≠自动线程安全!揭秘Python 3.13+中asyncio+shared_memory+numpy.ndarray三者交汇处的5个未公开竞态漏洞
第一章:Python无锁GIL环境下的并发安全本质重构当Python脱离CPython解释器的全局解释器锁(GIL)约束——例如在PyPy的STM模式、Jython、Cython多线程扩展,或新兴的Rust-Python绑定(如PyO3 async-std)中运行…...
基于RK3506与LVGUI的CyberGear电机交互式控制台开发实践
1. 从零搭建CyberGear电机控制环境 第一次拿到RK3506开发板和小米CyberGear电机时,我花了整整两天时间才把基础环境搭好。这里分享几个关键步骤,帮你避开我踩过的坑。 硬件连接部分要注意XT30PB插头的防呆设计,插反了会烧毁接口。建议先用万用…...
施密特触发器在智能家居中的7个隐藏用法:从空调变频到漏电保护
施密特触发器在智能家居中的7个隐藏用法:从空调变频到漏电保护 智能家居的普及让我们的生活更加便捷,但背后支撑这些设备的电子技术却鲜为人知。施密特触发器作为一种基础的电子元件,在智能家居系统中扮演着关键角色。它不仅能解决信号抖动问…...
Synthelix-Auto-Bot终极指南:10分钟掌握多钱包节点自动化管理
Synthelix-Auto-Bot终极指南:10分钟掌握多钱包节点自动化管理 【免费下载链接】Synthelix-Auto-Bot **Automated tool for managing Synthelix nodes across multiple wallets** 项目地址: https://gitcode.com/gh_mirrors/syn/Synthelix-Auto-Bot Synthelix…...
猫抓cat-catch:高效媒体捕获与资源下载全指南
猫抓cat-catch:高效媒体捕获与资源下载全指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓cat-catch是一款专注于网页媒体资源捕…...
从Java到AI Agent:传统后端工程师的下一站,不是学AI,是成为系统工程师!
文章探讨了在AI技术发展的背景下,传统后端工程师的转型方向。作者认为,未来的竞争焦点不再是单纯的技术能力,而是如何将AI技术融入现有系统,构建自动化系统。文章提出了AI Agent工程师的概念,强调系统工程能力的重要性…...
高效双电源自动切换电路的设计与实现
1. 双电源自动切换电路的应用场景 双电源自动切换电路在现代电子设备中扮演着关键角色,它能确保设备在不同供电来源之间无缝切换,避免断电导致的系统崩溃。这种电路设计特别适合以下场景: 便携式设备:比如蓝牙音箱、移动电源等&am…...
