Python+whisper/vosk实现语音识别

server/2024/10/18 16:10:57/

目录

一、Whisper

1、Whisper介绍

2、安装Whisper

3、使用Whisper-base模型

4、使用Whisper-large-v3-turbo模型

二、vosk

1、Vosk介绍

2、vosk安装

3、使用vosk

三、总结


一、Whisper

1、Whisper介绍

Whisper 是一个由 OpenAI 开发的人工智能语音识别模型,它能够将语音转换为文本。Whisper 模型特别之处在于它的设计目标是能够理解和转录多种语言的语音,包括但不限于英语。Whisper 模型在训练时使用了大量不同语言的语音数据,这使得它具有很好的跨语言能力。

2、安装Whisper

pip install openai-whisper# 安装ffmpeg
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
sudo yum install ffmpeg

3、使用Whisper-base模型

whisper.load_model方法会自动下载相应的模型,可选:['tiny.en', 'tiny', 'base.en', 'base', 'small.en', 'small', 'medium.en', 'medium', 'large-v1', 'large-v2', 'large-v3', 'large', 'large-v3-turbo', 'turbo']。

下面使用的测试音频放在了百度云,可自行下载:

百度云链接:https://pan.baidu.com/s/16eGkDCOA02YbFY5V4ObZ1w?pwd=smr7 

import whispermodel = whisper.load_model("base")
result = model.transcribe("test.wav")
print(result['text'])

识别结果如下:

特大暴雨再次清洗滑南地區廣東清州與近日凌晨遭遇極端降雨短段數小時內每小時降雨量門增至40-50毫米以上至上50時清州12小時雷技雨量已經超過227毫米突破了最大暴雨標準同時刷新了當地5月份單日降雨記錄根據我國企項標準24小時降雨量超過50毫米定義為暴雨超100毫米為特大暴雨而超過255毫米則為特大特大暴雨

可通过opencc库将繁体字转换为简体字:

pip install opencc-python-reimplemented
import whisper
from opencc import OpenCC# 初始化转换器,从繁体中文转换到简体中文
converter = OpenCC('t2s')
model = whisper.load_model("base")
result = model.transcribe("test.wav")
print(converter.convert(result['text']))

识别结果如下:

特大暴雨再次清洗滑南地区广东清州与近日凌晨遭遇极端降雨短段数小时内每小时降雨量门增至40-50毫米以上至上50时清州12小时雷技雨量已经超过227毫米突破了最大暴雨标准同时刷新了当地5月份单日降雨记录根据我国企项标准24小时降雨量超过50毫米定义为暴雨超100毫米为特大暴雨而超过255毫米则为特大特大暴雨

4、使用Whisper-large-v3-turbo模型

import whispermodel = whisper.load_model("large-v3-turbo")
result = model.transcribe("test.wav")
print(result['text'])

识别结果如下:

特大暴雨再次侵袭华南地区广东,青州于近日凌晨遭遇极端降雨,短短数小时内每小时降雨量猛增至40-50毫米以上。至上午时时,青州12小时累计雨量已经超过227毫米,突破了最大暴雨标准,同时刷新了当地5月份单日降雨记录。根据我国气象标准,24小时降雨量超过50毫米定义为暴雨,超100毫米为特大暴雨,而超过250毫米则为特大特大暴雨。

可以看到,large-v3-turbo模型比base模型的识别准确性更高,并且识别结果为简体中文,不用额外进行繁转简,更加友好的是,识别结果有标点符号,可读性更强。

英文语音识别

import whispermodel = whisper.load_model("large-v3-turbo")
result = model.transcribe("test_en.mp3")
print(result['text'])

识别结果如下:

In recent years, environmental conservation has become a topic of paramount importance. The rapid industrialization and urbanization have led to numerous environmental challenges, making it crucial for individuals, communities, and governments to take action. This article highlights the significance of environmental conservation and the measures that can be implemented to ensure a sustainable future. The environment provides essential resources for human survival, such as clean air, water, and fertile soil. Unfortunately, human activities have led to the depletion of these resources, causing adverse effects on both the ecosystem and human health. For instance, air pollution from factories and vehicles has resulted in respiratory problems, while water pollution has compromised access to clean drinking water.

二、vosk

1、Vosk介绍

Vosk 是一个开源的语音识别库,它可以在离线环境下工作,不依赖于任何外部服务。 Vosk 基于Kaldi语音识别框架,支持多种语言,包括中文。 Vosk提供了多种预训练模型,可以根据需求选择适合的模型进行语音识别。Vosk的优势在于可以在没有网络连接的情况下进行语音识别,并且支持多种操作系统和编程语言,用户可以根据自己的需求训练和优化模型。

2、vosk安装

模型有small size,也有较大的通用模型,可自行下载需要的语言模型:

https://alphacephei.com/vosk/models

以下下载的是大型通用中文模型vosk-model-cn-0.22.zip。

pip install vosk# 下载模型并解压
wget https://alphacephei.com/vosk/models/vosk-model-cn-0.22.zip
unzip vosk-model-cn-0.22.zip

3、使用vosk

import json
import wave
from vosk import Model, KaldiRecognizerdef recognize_wave(model, file_path):# 打开WAV音频文件with wave.open(file_path, 'rb') as wf:rate = wf.getframerate()  # 采样率frames = wf.readframes(wf.getnframes())  # 读取所有帧rec = KaldiRecognizer(model, rate)rec.SetWords(True)str_ret = ""# 识别音频数据if rec.AcceptWaveform(frames):result = json.loads(rec.Result())if 'text' in result:str_ret += result['text']result = json.loads(rec.FinalResult())if 'text' in result:str_ret += result['text']str_ret = "".join(str_ret.split())return str_retif __name__ == "__main__":model = Model("vosk-model-cn-0.22")file_path = 'test.wav'  # 请确保文件名和路径正确res = recognize_wave(model, file_path)print(res)

识别结果如下:

特大暴雨再次侵袭华南地区广东青州于近日凌晨遭遇极端降雨短短数小时内每小时降水量猛增至四十到五十毫米以上是上午十时青州十二小时累计雨量已经超过二八二七毫米突破了最大暴雨标准同时刷新了当地五月份单日降雨纪录根据我国气象标准二十四小时长相雨量超过五十毫米定义为暴雨超一百毫米为特大暴雨而超过二百五十毫米则为特大特大暴雨

三、总结

Whisper由OpenAI开发,其训练数据的多样性使得它在处理各种口音、背景噪音和专业术语方面具有较好的鲁棒性。large-v3-turbo是Whisper模型的一个改进版本,在保持较高准确性的同时,速度有了很大的提升,这使得它在实时性要求较高的场景下非常有优势。如果需要快速准确地处理语音,并且有足够的计算资源支持大型模型,那么 large-v3-turbo 是很好的选择。

Vosk是一个轻量级的语音识别工具包,基于Kaldi集成,在处理一些复杂语言场景或特殊口音时,可能相对 Whisper 会稍显不足。


http://www.ppmy.cn/server/131395.html

相关文章

python pass的作用

class Phone: IMEI None # 序列号 producer “ITCAST” # 厂商 def call_by_4g(self):print("4g通话")class Phone2022(Phone): face_id “10001” # 面部识别ID def call_by_5g(self):print("2022年新功能:5g通话")class NFCReader: nfc_ty…

Android ViewModel

一问:ViewModel如何保证应用配置变化后能够自动继续存在,其原理是什么,ViewModel的生命周期和谁绑定的? ViewModel 的确能够在应用配置发生变化(例如屏幕旋转)后继续存在,这得益于 Android 系统的 ViewMod…

MySQL 之事务隔离级别

在 MySQL 中,事务隔离级别是用于控制事务之间的隔离程度和并发性能的重要设置。不同的事务隔离级别会对数据库的一致性、并发性和性能产生不同的影响。下面将详细阐述 MySQL 中的四种事务隔离级别:读未提交、读已提交、可重复读和串行化。 一、读未提交…

Video-LLaMA部署

Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding

axios 的 get 请求传参数

在使用 Axios 发起 GET 请求时,参数通常是通过 URL 的查询字符串来传递的。Axios 提供了一个简洁的接口来构建这样的请求,并自动将参数附加到 URL 上。 以下是一个使用 Axios 发起 GET 请求并传递参数的示例: const axios require(axios);…

机器学习篇-day04-逻辑回归-分类评估-混淆矩阵-精确率-召回率-F1值

主要适用于二分法, 也可以使用多个逻辑回归实现多分类 逻辑回归 线性回归结果 -> Sigmoid函数 > 概率 概率范围: [0, 1] > 设置阈值(假设: 大于0.5 > A) 一. 逻辑回归简介 应用场景 数学知识 sigmoid函数 概率 极大似然估计 核心思想 设模型中含有待估参数w&am…

图论day56|广度优先搜索理论基础 、bfs与dfs的对比(思维导图)、 99.岛屿数量(卡码网)、100.岛屿的最大面积(卡码网)

图论day56|广度优先搜索理论基础 、bfs与dfs的对比(思维导图)、 99.岛屿数量(卡码网)、100.岛屿的最大面积(卡码网)) 广度优先搜索理论基础bfs与dfs的对比(思维导图)&…

深度学习:生成对抗网络(Generative Adversarial Network, GAN)

生成对抗网络(Generative Adversarial Network, GAN) 生成对抗网络(GAN)是一种深度学习模型,最初由Ian Goodfellow于2014年提出。这种模型框架通过让两个神经网络——生成器(Generator)和判别器…