【小沐学Python】Python实现语音识别(SpeechRecognition)

文章目录

  • 1、简介
  • 2、安装和测试
    • 2.1 安装python
    • 2.2 安装SpeechRecognition
    • 2.3 安装pyaudio
    • 2.4 安装pocketsphinx(offline)
    • 2.5 安装Vosk (offline)
    • 2.6 安装Whisper(offline)
  • 3 测试
    • 3.1 命令
    • 3.2 fastapi
    • 3.3 google
    • 3.4 recognize_sphinx
    • 3.5 语音生成音频文件
  • 结语

1、简介

https://pypi.org/project/SpeechRecognition/
https://github.com/Uberi/speech_recognition

SpeechRecognition用于执行语音识别的库,支持多个引擎和 API,在线和离线。

在这里插入图片描述

Speech recognition engine/API 支持如下接口:
在这里插入图片描述

recognize_bing():Microsoft Bing Speech
recognize_google(): Google Web Speech API
recognize_google_cloud():Google Cloud Speech - requires installation of the google-cloud-speech package
recognize_houndify(): Houndify by SoundHound
recognize_ibm():IBM Speech to Text
recognize_sphinx():CMU Sphinx - requires installing PocketSphinx
recognize_wit():Wit.ai

以上几个中只有 recognition_sphinx()可与CMU Sphinx 引擎脱机工作, 其他六个都需要连接互联网。另外,SpeechRecognition 附带 Google Web Speech API 的默认 API 密钥,可直接使用它。其他的 API 都需要使用 API 密钥或用户名/密码组合进行身份验证。

2、安装和测试

  • Python 3.8+ (required)

  • PyAudio 0.2.11+ (required only if you need to use microphone input, Microphone)

  • PocketSphinx (required only if you need to use the Sphinx recognizer, recognizer_instance.recognize_sphinx)

  • Google API Client Library for Python (required only if you need to use the Google Cloud Speech API, recognizer_instance.recognize_google_cloud)

  • FLAC encoder (required only if the system is not x86-based Windows/Linux/OS X)

  • Vosk (required only if you need to use Vosk API speech recognition recognizer_instance.recognize_vosk)

  • Whisper (required only if you need to use Whisper recognizer_instance.recognize_whisper)

  • openai (required only if you need to use Whisper API speech recognition recognizer_instance.recognize_whisper_api)

2.1 安装python

https://www.python.org/downloads/
在这里插入图片描述

2.2 安装SpeechRecognition

安装库SpeechRecognition:

#python -m pip install --upgrade pip
#pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple/
#pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
#pip install 包名 -i https://pypi.org/simple
pip install SpeechRecognition

在这里插入图片描述
在这里插入图片描述

import speech_recognition as sr
print(sr.__version__)

在这里插入图片描述
麦克风的特定于硬件的索引获取:

import speech_recognition as sr
for index, name in enumerate(sr.Microphone.list_microphone_names()):print("Microphone with name \"{1}\" found for `Microphone(device_index={0})`".format(index, name))

在这里插入图片描述

2.3 安装pyaudio

pip install pyaudio

在这里插入图片描述

2.4 安装pocketsphinx(offline)

pip install pocketsphinx

或者https://www.lfd.uci.edu/~gohlke/pythonlibs/#pocketsphinx找到编译好的本地库文件进行安装。
在这里插入图片描述
在这里使用的是recognize_sphinx()语音识别器,它可以脱机工作,但是必须安装pocketsphinx库.
若要进行中文识别,还需要两样东西。
1、语音文件(SpeechRecognition对文件格式有要求);
SpeechRecognition支持语音文件类型:

WAV: 必须是 PCM/LPCM 格式
AIFF
AIFF-C
FLAC: 必须是初始 FLAC 格式;OGG-FLAC 格式不可用

2、中文声学模型、语言模型和字典文件;
pocketsphinx需要安装的中文语言、声学模型。

https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/Mandarin/

在这里插入图片描述
下载cmusphinx-zh-cn-5.2.tar.gz并解压:
在这里插入图片描述
在这里插入图片描述
在python安装目录下找到Lib\site-packages\speech_recognition:
在这里插入图片描述

点击进入pocketsphinx-data文件夹,并新建文件夹zh-CN:
在这个文件夹中添加进入刚刚解压的文件,需要注意:把解压出来的zh_cn.cd_cont_5000文件夹重命名为acoustic-model、zh_cn.lm.bin命名为language-model.lm.bin、zh_cn.dic中dic改为pronounciation-dictionary.dict格式。

在这里插入图片描述
编写脚本测试:

import speech_recognition as srr = sr.Recognizer()    #调用识别器
test = sr.AudioFile("chinese.flac")   #导入语音文件
with test as source:       # r.adjust_for_ambient_noise(source)audio = r.record(source) #使用 record() 从文件中获取数据
type(audio)
# c=r.recognize_sphinx(audio, language='zh-cn')     #识别输出
c=r.recognize_sphinx(audio, language='en-US')     #识别输出
print(c)
import speech_recognition as sr# obtain path to "english.wav" in the same folder as this script
from os import path
AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), "english.wav")
# AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), "french.aiff")
# AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), "chinese.flac")# use the audio file as the audio source
r = sr.Recognizer()
with sr.AudioFile(AUDIO_FILE) as source:audio = r.record(source)  # read the entire audio file# recognize speech using Sphinx
try:print("Sphinx thinks you said " + r.recognize_sphinx(audio))
except sr.UnknownValueError:print("Sphinx could not understand audio")
except sr.RequestError as e:print("Sphinx error; {0}".format(e))

在这里插入图片描述

import speech_recognition as srrecognizer = sr.Recognizer()
with sr.Microphone() as source:# recognizer.adjust_for_ambient_noise(source)audio = recognizer.listen(source)
c=recognizer.recognize_sphinx(audio, language='zh-cn')     #识别输出
# c=r.recognize_sphinx(audio, language='en-US')     #识别输出
print(c)
import speech_recognition as sr# obtain audio from the microphone
r = sr.Recognizer()
with sr.Microphone() as source:print("Say something!")audio = r.listen(source)# recognize speech using Sphinx
try:print("Sphinx thinks you said " + r.recognize_sphinx(audio))
except sr.UnknownValueError:print("Sphinx could not understand audio")
except sr.RequestError as e:print("Sphinx error; {0}".format(e))

在这里插入图片描述

2.5 安装Vosk (offline)

python3 -m pip install vosk

在这里插入图片描述
您还必须安装 Vosk 模型:
以下是可供下载的模型。您必须将它们放在项目的模型文件夹中,例如“your-project-folder/models/your-vosk-model”
https://alphacephei.com/vosk/models

在这里插入图片描述
在测试脚本的所在文件夹,新建model子文件夹,然后把上面下载的模型解压到里面如下:
在这里插入图片描述
在这里插入图片描述
编写脚本:

import speech_recognition as sr
from vosk import KaldiRecognizer, Modelr = sr.Recognizer()
with sr.Microphone() as source:audio = r.listen(source, timeout=3, phrase_time_limit=3)r.vosk_model = Model(model_name="vosk-model-small-cn-0.22")
text=r.recognize_vosk(audio, language='zh-cn') 
print(text)

在这里插入图片描述

2.6 安装Whisper(offline)

pip install zhconv
pip install whisper
pip install -U openai-whisper
pip3 install wheel
pip install soundfile

在这里插入图片描述
编写脚本:

import speech_recognition as sr
from vosk import KaldiRecognizer, Modelr = sr.Recognizer()
with sr.Microphone() as source:audio = r.listen(source, timeout=3, phrase_time_limit=5)# recognize speech using whisper
try:print("Whisper thinks you said: " + r.recognize_whisper(audio, language="chinese"))
except sr.UnknownValueError:print("Whisper could not understand audio")
except sr.RequestError as e:print("Could not request results from Whisper")

在这里插入图片描述

3 测试

3.1 命令

python -m speech_recognition

在这里插入图片描述

3.2 fastapi

import json
import os
from pprint import pprintimport speech_recognition
import torch
import uvicorn
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import soundfile
import whisper
import voskclass ResponseModel(BaseModel):path: strapp = FastAPI()def get_path(req: ResponseModel):path = req.pathif path == "":raise HTTPException(status_code=400, detail="No path provided")if not path.endswith(".wav"):raise HTTPException(status_code=400, detail="Invalid file type")if not os.path.exists(path):raise HTTPException(status_code=404, detail="File does not exist")return path@app.get("/")
def root():return {"message": "speech-recognition api"}@app.post("/recognize-google")
def recognize_google(req: ResponseModel):path = get_path(req)r = speech_recognition.Recognizer()with speech_recognition.AudioFile(path) as source:audio = r.record(source)return r.recognize_google(audio, language='ja-JP', show_all=True)@app.post("/recognize-vosk")
def recognize_vosk(req: ResponseModel):path = get_path(req)r = speech_recognition.Recognizer()with speech_recognition.AudioFile(path) as source:audio = r.record(source)return json.loads(r.recognize_vosk(audio, language='ja'))@app.post("/recognize-whisper")
def recognize_whisper(req: ResponseModel):path = get_path(req)r = speech_recognition.Recognizer()with speech_recognition.AudioFile(path) as source:audio = r.record(source)result = r.recognize_whisper(audio, language='ja')try:return json.loads(result)except:return {"text": result}if __name__ == "__main__":host = os.environ.get('HOST', '0.0.0.0')port: int = os.environ.get('PORT', 8080)uvicorn.run("main:app", host=host, port=int(port))

3.3 google

import speech_recognition as sr
import webbrowser as wb
import speakchrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'r = sr.Recognizer()with sr.Microphone() as source:print ('Say Something!')audio = r.listen(source)print ('Done!')try:text = r.recognize_google(audio)print('Google thinks you said:\n' + text)lang = 'en'speak.tts(text, lang)f_text = 'https://www.google.co.in/search?q=' + textwb.get(chrome_path).open(f_text)except Exception as e:print (e)

3.4 recognize_sphinx


import logging
import speech_recognition as srdef audio_Sphinx(filename):logging.info('开始识别语音文件...')# use the audio file as the audio sourcer = sr.Recognizer()with sr.AudioFile(filename) as source:audio = r.record(source)  # read the entire audio file# recognize speech using Sphinxtry:print("Sphinx thinks you said: " + r.recognize_sphinx(audio, language='zh-cn'))except sr.UnknownValueError:print("Sphinx could not understand audio")except sr.RequestError as e:print("Sphinx error; {0}".format(e))    if __name__ == "__main__":logging.basicConfig(level=logging.INFO)wav_num = 0while True:r = sr.Recognizer()#启用麦克风mic = sr.Microphone()logging.info('录音中...')with mic as source:#降噪r.adjust_for_ambient_noise(source)audio = r.listen(source)with open(f"00{wav_num}.wav", "wb") as f:#将麦克风录到的声音保存为wav文件f.write(audio.get_wav_data(convert_rate=16000))logging.info('录音结束,识别中...')target = audio_Sphinx(f"00{wav_num}.wav")wav_num += 1

3.5 语音生成音频文件

  • 方法1:

import speech_recognition as sr# Use SpeechRecognition to record 使用语音识别包录制音频
def my_record(rate=16000):r = sr.Recognizer()with sr.Microphone(sample_rate=rate) as source:print("please say something")audio = r.listen(source)with open("voices/myvoices.wav", "wb") as f:f.write(audio.get_wav_data())print("录音完成!")my_record()
  • 方法2:

import wave
from pyaudio import PyAudio, paInt16framerate = 16000  # 采样率
num_samples = 2000  # 采样点
channels = 1  # 声道
sampwidth = 2  # 采样宽度2bytes
FILEPATH = 'voices/myvoices.wav'def save_wave_file(filepath, data):wf = wave.open(filepath, 'wb')wf.setnchannels(channels)wf.setsampwidth(sampwidth)wf.setframerate(framerate)wf.writeframes(b''.join(data))wf.close()#录音
def my_record():pa = PyAudio()#打开一个新的音频streamstream = pa.open(format=paInt16, channels=channels,rate=framerate, input=True, frames_per_buffer=num_samples)my_buf = [] #存放录音数据t = time.time()print('正在录音...')while time.time() < t + 10:  # 设置录音时间(秒)#循环read,每次read 2000framesstring_audio_data = stream.read(num_samples)my_buf.append(string_audio_data)print('录音结束.')save_wave_file(FILEPATH, my_buf)stream.close()

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WTF ‘Questions‘

WTF ‘Tech Team Lead’ As a Tech Team Lead, your role is to oversee the technical aspects of a project or team, and to provide guidance, support, and leadership to your team members. Here are some key responsibilities and aspects of the role: Leadership …

vue 中国省市区级联数据 三级联动

vue 中国省市区级联数据 三级联动 安装插件 npm install element-china-area-data5.0.2 -S 当前版本以测试&#xff0c;可用。组件中使用了 element-ui, https://element.eleme.cn/#/zh-CN/component/installation 库 请注意安装。插件文档 https://www.npmjs.com/package/ele…

Alibaba分布式事务组件Seata AT实战

1. 分布式事务简介 1.1 本地事务 大多数场景下&#xff0c;我们的应用都只需要操作单一的数据库&#xff0c;这种情况下的事务称之为本地事务(Local Transaction)。本地事务的ACID特性是数据库直接提供支持。本地事务应用架构如下所示&#xff1a; 在JDBC编程中&#xff0c;我…

使用SPSS的McNemar检验两种深度学习模型的差异性

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 使用SPSS的McNemar检验两种深度学习模型的差异性 前言简述&#xff1a;一、McNemar检验1.1来源1.2 两配对样本的McNemar(麦克尼马尔)变化显著性检验1.3 适用范围&#xff1a;…

卷积神经网络(含案例代码)

概述 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一类专门用于处理具有网格结构数据的神经网络。它主要被设计用来识别和提取图像中的特征&#xff0c;但在许多其他领域也取得了成功&#xff0c;例如自然语言处理中的文本分类任务。 C…

Nginx快速入门

nginx准备 文本概述参考笔记 狂神&#xff1a;https://www.kuangstudy.com/bbs/1353634800149213186 前端vue打包 参考&#xff1a;https://blog.csdn.net/weixin_44813417/article/details/121329335 打包命令&#xff1a; npm run build:prod nginx 下载 网址&#x…

Java集合--Map

1、Map集合概述 在Java的集合框架中&#xff0c;Map为双列集合&#xff0c;在Map中的元素是成对以<K,V>键值对的形式存在的&#xff0c;通过键可以找对所对应的值。Map接口有许多的实现类&#xff0c;各自都具有不同的性能和用途。常用的Map接口实现类有HashMap、Hashtab…

uniapp+vue3使用canvas保存海报的使用示例,各种奇奇怪怪的问题解决办法

我们这里这里有一个需求&#xff0c;是将当前页面保存为海报分享给朋友或者保存到本地相册&#xff0c;因为是在小程序端开发的&#xff0c;所以不能使用html2canvas这个库&#xff0c;而且微信官方新推出Snapshot.takeSnapshot这个api还不是很完善&#xff0c;如果你是纯小程序…

【问题处理】—— lombok 的 @Data 大小写区分不敏感

问题描述 今天在项目本地编译的时候&#xff0c;发现有个很奇怪的问题&#xff0c;一直提示某位置找不到符号&#xff0c; 但是实际在Idea中显示确实正常的&#xff0c;一开始以为又是IDEA的故障&#xff0c;所以重启了IDEA&#xff0c;并执行了mvn clean然后重新编译。但是问…

ASF-YOLO开源 | SSFF融合+TPE编码+CPAM注意力,精度提升!

目录 摘要 1 Introduction 2 Related work 2.1 Cell instance segmentation 2.2 Improved YOLO for instance segmentation 3 The proposed ASF-YOLO model 3.1 Overall architecture 3.2 Scale sequence feature fusion module 3.3 Triple feature encoding module …

【Python网络爬虫入门教程3】成为“Spider Man”的第三课:从requests到scrapy、爬取目标网站

Python 网络爬虫入门&#xff1a;Spider man的第三课 写在最前面从requests到scrapy利用scrapy爬取目标网站更多内容 结语 写在最前面 有位粉丝希望学习网络爬虫的实战技巧&#xff0c;想尝试搭建自己的爬虫环境&#xff0c;从网上抓取数据。 前面有写一篇博客分享&#xff0…

【实用技巧】从文件夹内批量筛选指定文件并将其复制到目标文件夹

原创文章&#xff0c;转载请注明出处&#xff01; 从文件夹中批量提取指定文件。 使用DOS命令&#xff0c;根据TXT文件中列出指定文件名&#xff0c;批量实现查找指定文件夹里的文件并复制到新的文件夹。 文中给出使用DOS命令和建立批处理文件两种方法。 文件准备 工作文件…

vite(一)——基本了解和依赖预构建

文章目录 一、什么是构建工具&#xff1f;1.为什么使用构建工具&#xff1f;2.构建工具的作用&#xff1f;3.构建工具怎么用&#xff1f; 二、经典面试题&#xff1a;webpack和vite的区别1.编译方式不同2.基础概念不同3.开发效率不同4.扩展性不同5.应用场景不同6.总结&#xff…

QT- QT-lximagerEidtor图片编辑器

QT- QT-lximagerEidtor图片编辑器 一、演示效果二、关键程序三、下载链接 功能如下&#xff1a; 1、缩放、旋转、翻转和调整图像大小 2、幻灯片 3、缩略图栏&#xff08;左、上或下&#xff09;&#xff1b;不同的缩略图大小 4、Exif数据栏 5、内联图像重命名 6、自定义快捷方式…

Vue3安装使用Mock.js--解决跨域

首先使用axios发送请求到模拟服务器上&#xff0c;再将mock.js模拟服务器数据返回给客户端。打包工具使用的是vite。 1.安装 npm i axios -S npm i mockjs --save-dev npm i vite-plugin-mock --save-dev 2.在vite.config.js文件中配置vite-plugin-mock等消息 import { viteMo…

mysql中NULL值

mysql中NULL值表示“没有值”&#xff0c;它跟空字符串""是不同的 例如&#xff0c;执行下面两个插入记录的语句&#xff1a; insert into test_table (description) values (null); insert into test_table (description) values ();执行以后&#xff0c;查看表的…

harmonyOS鸿蒙内核概述

内核概述 内核简介 用户最常见到并与之交互的操作系统界面&#xff0c;其实只是操作系统最外面的一层。操作系统最重要的任务&#xff0c;包括管理硬件设备&#xff0c;分配系统资源等&#xff0c;我们称之为操作系统内在最重要的核心功能。而实现这些核心功能的操作系统模块…

【经验分享】gemini-pro和gemini-pro-vision使用体验

Gemini Gemini已经对开发者开放了Gemini Pro的使用权限&#xff0c;目前对大家都是免费的&#xff0c;每分钟限制60条&#xff0c;至少这比起CloseAI的每个账户5刀限速1min3条要香的多&#xff0c;目前已于第一时间进行了体验 一句话总结&#xff0c;google很大方&#xff0c;但…

【Spring】@SpringBootApplication注解解析

前言&#xff1a; 当我们第一次创建一个springboot工程时&#xff0c;我们会对启动类&#xff08;xxxApplication&#xff09;有许多困惑&#xff0c;为什么只要运行启动类我们在项目中自定义的bean无需配置类配置&#xff0c;扫描就能自动注入到IOC容器中&#xff1f;为什么我…

仿牛客论坛的一些细节改进

私信列表的会话头像链接到个人主页 原来的不足 点击私信列表的会话头像应该要能跳转到该目标对象的个人主页。 原来的代码&#xff1a; <a href"profile.html"><img th:src"${map.target.headerUrl}" class"mr-4 rounded-circle user-he…