项目地址:https://github.com/RapidAI/RapidASR
一、项目运行
对于输入数据:对.mp4直接识别不行,要提取出wav文件再进行识别,并且采样率得是16000。
可使用如下ffmpeg指令从mp4中提取音频文件:
ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 16000 output.wav
对于C++部分,安装 VS2022 打开 cpp_onnx 目录下的 cmake 工程,直接 build即可。 本仓库已经准备好所有相关依赖库。Windows下已经预置fftw3、onnxruntime及openblas库。
依赖:
- fftw3
- onnxruntime
打开命令行终端,进入 cpp_onnx 目录,执行以下命令:
mkdir build
cd build
cmake ..
用VS打开cmake出来的FastASR.sln,将tester设为启动项目。如果有报错,看一下【三、报错与解决】中是否有相同内容。
配置属性-调试-命令参数,填入D:\xz\RapidASR\cpp_onnx\models D:\xz\data\woman.wav
,分别是预训练模型和语音的路径。
配置属性-VC+±包含目录,增加D:\xz\RapidASR\cpp_onnx\win\include
二、输出结果
输入:1分钟音频,声音是流行的合成声 D:\xz\data\dhy.wav
Model initialization takes 3.791000s.
Result: “姐妹们刷六关二十四比刷利练更划算啊总共先来看看十个铜币和六杠二十四总以拿到多少金币打一关有四千铜币三个经验书一 个紫星耀打完后的小铜币有五千五铜币和八个经验书第二关和第三关掉落的奖励是一样的总共三个铜卡总个打完还有六千铜币和五个经验书总结一下花十体打六关二十四总共能拿到的奖励有这些而打历练呢一关二十题假设我们打一关铜币和一关铜币总共花费四十题能拿到十万铜币和一万点经验对比六刚二十四花费四十题能拿到的铜币多三万八总共多五千二甚至还有十二颗紫星要关心多份铜币不用我说了吧这个公寓是Facebook上看到的感谢关光希望能有更多的姐妹知道这个方法我们下期再见”.
Audio length 120.837685s.
Model inference takes 3.749000s.
Model inference RTF: 0.031025.
输入:3分钟音频,声音是真实人声 D:\xz\data\xhs.wav
Model initialization takes 4.071000s.
Result: “我妹你说我和么么情的事情我我到现在每天都难过非常的快乐非常的心心非常的高傲非常的心奋我妹现在在种小事晚上一两点 才睡觉我现在是除了睡六小时以外上一时间全都在工作我们两个人在不同的高压环境下我没有觉得心痛好事就我心里上可能会有点压痛痛痛但是心里上一点都不会开气就是么不心心了她不会意为这么抑郁我现在就把这种方法交给你我首先要看到你身边的那事万我都是美好的然后把这样没好的事我和你自己发生事了了就就心不自己说自自己坏你挂的身病了我现在我身上发发生了好多的事了我看到以后我就会想说这个颜色难过我的这么会是我想的我想能这么便宜还能买到这么柔软的事情我就的就么想我不会失了我买东西就没有想心的然后就就说我经常这么夸自己我医生也会模仿我的眼胶这么快乐我不管买啥她都会说我就说你怎么这么会买东西了我就说就不是一种大事但是我会特别快乐就是我给我一种非常美好的感觉就是我周围的一切事我都是那么伤心心心我妹妹之前这么放自了就买一这包零事事家然后就就前发生她的奥利奥忘记装袋子己了她瞬间难过然后她就说那一盒七块五呢太贵了我当时怎么就没有好好检查一下就怎么抱怨自己我就说就怎么常不过了了就当做这个这么下气了然后她就说自己不行我太难过了我当时咬牙买的我就说你好不放假了因为那这怪无让你这两天不开心咱们的心情可不止七块了怎么不必为这种事伤心你以后的人生发生了糟糕事多了去了你根本都么伤心那你还活不活了我后今就这么么非常的心乐咱放假就是开心行不行他说行所以你以为情绪稳定是傻事就是这样样总评问问我自道非不的负绪稳定情绪稳定不是无悲无喜是我们不会因为自己的负面情绪影响到自己和别人我们能够把这个事情疏解而来散开一点这么大的情绪稳定我跟你说我们每个人的人生都不好过我现在已经三十几小时没黑眼了我录完这些视频真的要去睡觉了但是我不会让我的心理疲惫去影响到你们我越开心我越兴奋的跟你聊我我越不心我我我我我的正反反馈非常重尤尤其你你不到别人人的非表表扬夸奖的时候你一定要更努烈的我极其夸张的正向评价去轰炸你自己我跟我是在一起以后他非常的翘毛病我如你会贬低别人的语言习惯不光贬低我也贬低他自己我如果一直这样就非常影响我的自信于是我就开始调教他非常极致的自己我说你是世界上最自的最好的男朋友我说你无比优秀你长得又帅学习又好又投人巴拉巴拉一大堆你干完以后他并没有大男子主义他现在也是如此夸我再也不评理我了我现跟跟他说工作上的事情这是有点不顺利我说这也是我的问题结果他跟我说是你从来不想叫我去我的妈我真的被激励到了我们两个人真的在互相给对方极大的温暖所以你如何疯狂的热爱生活热爱自己坚定的认可自己深度自己就是从生活中这种无所谓的小事上入手动不动夸自己动不动夸别人当你对自己无限的奉出和沉蜜乐此不疲的讨好自己你的人生态度和生活状态一定和现在截然不同请你不遗余力的让自己和身边人快乐自信美丽”.
Audio length 374.120941s.
Model inference takes 14.066000s.
Model inference RTF: 0.037597.
三、报错与解决
1、 ALL_BUILD 拒绝访问
解决:将目标程序设置为启动项目。
2、找不到 libfftw3f-3.dll
由于找不到 libfftw3f.dll,无法继续执行代码。重新安装程序可能会解决此问题。
将 libfftw3f.dll 文件放到程序目录下,报错 应用程序无法正常启动(0xc000007b),该错误提示通常是由于程序无法找到程序所依赖的某些库文件,或者是库文件版本不匹配导致的。
尝试解决(无效):去FFTW官网安装FFTW,http://www.fftw.org/install/windows.html(代码里有这个DLL文件,和官网下载的一致)
如果想在 Visual C++ 中链接 FFTW 库需要使用 VC++ 中附带的 lib.exe
程序创建 .lib“导入库”。如果你在 Visual Studio 2008 中使用 64 位模式,或者其他情况下需要显式指定机器类型,你可以使用以下命令:
lib /machine:x64 /def:libfftw3-3.def
lib /machine:x64 /def:libfftw3f-3.def
lib /machine:x64 /def:libfftw3l-3.def
这些命令将会创建三个导入库文件,分别对应 FFTW 库的三种精度级别(单精度、双精度和长双精度),用于在 Visual Studio 中链接 FFTW 库。
lib.exe
是 Visual Studio 中的一个工具,用于创建和修改静态库和导入库。在默认情况下,lib.exe
位于 VC\bin
目录下,例如 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
。你需要打开命令行窗口,使用 lib.exe
的全路径作为指令,或者将 lib.exe
的路径添加到系统环境变量中。
通过 Dependency Walker,发现其实还缺失
onnxruntime.dll
解决(成功运行):将onnxruntime.dll
和libfftw3f.dll
文件(位于D:\xz\RapidASR\cpp_onnx\win\bin\x64)复制到tester.exe
程序目录下(位于D:\xz\RapidASR\cpp_onnx\build\tester\Debug)。
什么是 Dependency Walker ?
Dependency Walker 是一个用于检查 Windows 程序所依赖的动态链接库(DLL)的工具。可以用来检查程序所依赖的 DLL 文件,以确定它们是否正确地安装或可用。以下是使用 Dependency Walker 的一般步骤:
- 下载并安装 Dependency Walker。你可以从官方网站 https://www.dependencywalker.com/ 下载最新版本的 Dependency Walker。安装完成后,运行 Dependency Walker。
- 打开程序文件。在 Dependency Walker 中,选择“File”菜单,然后选择“Open”选项,选择你要检查的程序文件。
- 查看程序所依赖的 DLL 文件。在 Dependency Walker 中,你可以看到程序所依赖的 DLL 文件。这些 DLL 文件将显示在左侧的模块列表中。如果某个 DLL 文件缺失或无法找到,它将以红色或黄色的颜色显示。
- 查看 DLL 文件的详细信息。在 Dependency Walker 中,你可以查看每个 DLL 文件的详细信息,包括它们的导出函数、依赖关系、版本信息等。这些信息将显示在右侧的模块属性窗口中。
- 解决缺失的 DLL 文件问题。如果某个 DLL 文件缺失或无法找到,你可以尝试使用以下方法来解决问题:
- 确保缺失的 DLL 文件已经正确地安装在你的系统中。
- 确保缺失的 DLL 文件已经正确地复制到了程序的运行目录中。
- 检查程序是否正确地链接到了所依赖的 DLL 文件。
- 检查程序是否针对正确的操作系统和处理器架构编译的,以确保程序可以正确地加载所依赖的 DLL 文件。
- 保存检查结果。在 Dependency Walker 中,你可以选择“File”菜单,然后选择“Save As”选项,将检查结果保存为一个文件。
总之,使用 Dependency Walker 可以帮助你检查程序所依赖的 DLL 文件,确定它们是否正确地安装或可用,并解决缺失的 DLL 文件问题。如果你遇到了 DLL 文件缺失或无法找到的问题,使用 Dependency Walker 可以帮助你找到问题的根源,并采取相应的措施来解决问题。