【python的魅力】:教你如何用几行代码实现文本语音识别

news2024/11/19 20:18:59

文章目录

    • 引言
      • 一、运行效果
      • 二、文本转换为语音
        • 2.1 使用pyttsx3
        • 2.2 使用SAPI实现文本转换语音
        • 2.3 使用 SpeechLib实现文本转换语音
      • 三、语音转换为文本
        • 3.1 使用 PocketSphinx实现语音转换文本

引言

语音识别技术,也被称为自动语音识别,目标是以电脑自动将人类的语音内容转换为相应的文字和文字转换为语音。

一、运行效果

Python语音识别

二、文本转换为语音

2.1 使用pyttsx3

pyttsx3 是一个流行的 Python 第三方库,用于实现文本到语音(TTS)的转换。这个库支持多种操作系统,包括 Windows、Linux 和 macOS,并且可以在没有互联网连接的情况下工作,因为它使用的是计算机上安装的本地语音引擎。

主要特点

  • 跨平台:可以在不同的操作系统上运行。
  • 离线工作:不依赖于互联网连接。
  • 多种语音和语言:支持多种语音和语言选项。
  • 自定义设置:允许用户调整语速、音量和语调等参数。
  • 简单易用:具有直观的 API,易于集成和使用。

安装

pip install pyttsx3 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

【示例】:使用 pyttsx3 实现文本转换语音

import pyttsx3 as pyttsx

engine = pyttsx.init()  # 初始化引擎
engine.say('独断万古荒天帝, 唯负罪州火桑女')  # 添加文本到语音队列
engine.runAndWait()  # 开始语音输出
2.2 使用SAPI实现文本转换语音

在 python 中,你也可以使用 SAPI 来做文本到语音的转换。
在Python中,win32com库是一个用于与Windows操作系统中的COM(Component Object Model)组件进行交互的模块。win32com.client模块提供了一种使用COM自动化的Python接口。通过win32com.client.Dispatch方法,可以访问和控制支持COM自动化的任何Windows应用程序或服务。
对于SAPI(Speech Application Programming Interface),可以通过win32com库来访问其功能,从而实现文本到语音(TTS)和语音识别。

【示例】:使用 SAPI 实现文本转换语音

from win32com.client import Dispatch

msg = "独断万古荒天帝, 唯负罪州火桑女"
speaker = Dispatch('SAPI.SpVoice')  # 创建SAPI的语音引擎实例
speaker.Speak(msg)  # 将文本转换为语音并朗读
del speaker  # 删除 speaker 对象,释放与之关联的资源。
2.3 使用 SpeechLib实现文本转换语音

SpeechLib 是微软提供的一个用于语音功能的 COM 库,它允许开发者在 Windows 平台上进行文本到语音(TTS)和语音识别的开发。通过 SpeechLib,您可以控制语音引擎的多种属性,比如语速、音量、语调以及使用的语音库。
使用 SpeechLib,可以从文本文件中获取输入,再将其转换为语音。

使用使用 SpeechLib需要安装第三方库:comtypes

安装命令

pip install comtypes -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

【示例】:使用 SpeechLib 实现文本转换语音
demo文件
在这里插入图片描述

from comtypes.client import CreateObject
from comtypes.gen import SpeechLib  # 导入 SpeechLib
engine = CreateObject("SAPI.SpVoice")  # 创建 SAPI.SpVoice 对象的实例
stream = CreateObject("SAPI.SpFileStream")  # 创建 SAPI.SpFileStream 对象的实例
infile = 'demo.txt'
outfile = 'demo_audio.wav'
stream.Open(outfile, SpeechLib.SSFMCreateForWrite)  # 输出文件,准备写入音频数据
engine.AudioOutputStream = stream  # 音频输出流设置为 stream 对象
f = open('demo', 'r', encoding='utf-8')  # 打开输入文本文件
TheText = f.read()  # 读取文件
f.close()  # 关闭文件
engine.speak(TheText)  # 使用语音引擎将文本转换为语音并输出。
stream.close()  # 关闭音频流,完成音频文件的写入

在这里插入图片描述

三、语音转换为文本

3.1 使用 PocketSphinx实现语音转换文本

PocketSphinx 是一个轻量级的语音识别库,它是 CMU Sphinx 开源语音识别系统的一个子集。CMU Sphinx 由卡内基梅隆大学开发,是一个功能强大且灵活的语音识别系统。PocketSphinx 特别适用于嵌入式系统和移动设备,因为它的体积小、速度快,同时提供了相对较高的识别准确率。

PocketSphinx 的主要特点包括

  • 轻量级:适用于资源受限的环境,如移动设备和嵌入式系统。
  • 实时性能:能够实现实时的语音识别。
  • 易于使用:提供了简单的 API,方便开发者快速集成和使用。
  • 可定制:允许开发者根据需要定制语言模型和声学模型。

所需的第三方模块:PocketSphinxSpeechRecognition
安装命令

pip install PocketSphinx -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
pip install SpeechRecognition -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

【示例】:使用 PocketSphinx 实现语音转换文本

import speech_recognition as sr

audio_file = 'demo_audio.wav'
r = sr.Recognizer()
with sr.AudioFile(audio_file) as source:
    audio = r.record(source)
try:
    # print('文本内容:',r.recognize_sphinx(audio,language="zh_CN"))
    print('文本内容:', r.recognize_sphinx(audio))
except Exception as e:
    print(e)

如果在使用PocketSphinx时遇到问题,比如初始化失败,需要检查:

  • 是否已经正确安装了pocketsphinx。
  • 是否有合适的语言模型和字典可供使用。
  • 是否有足够的权限访问所需的文件。
  • 系统是否满足PocketSphinx的运行要求。

安装完 speech_recognition 之后是不支持中文的,需要在 Sphinx 语音识别工具包里面下载对应的普通话升学和语言模型 。
下载链接:

https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/
将下载好的普通话升学和语言模型放到安装 Python\Lib\site-packages\speech_recognition\pocketsphinx-data目录下

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

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

相关文章

【网站项目】社区互助平台

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

Object Desktop - Stardock 软件开发商系列套件

Windows 的一大优势在于可高度自定义,能让我们把它打造成一个最符合自己需求的工作和娱乐工具。 在桌面增强工具套件 Object Desktop 中,包含了 Stardock 旗下 10 款生产力和美化工具,可帮助我们打造出美观、实用、高效的 Windows 系统。 St…

Leetcode—163. 缺失的区间【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—163. 缺失的区间 实现代码 class Solution { public:vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {int n nums.size();vector<vector<int>> an…

文件(夹)批量重命名数字、字母、日期、中文数字大写小写

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 目标是重命名下面5个文件&#xff08;也可以是文件夹等&#xff0c;任意&#xff09;&#xff0c;从大写中文数字“贰”开始 打开工具&#xff0c;找到“文…

SNR: Signal to Noise Ratio

https://www.xx.com/watch?vmyrZ_R6xIZA Fang, Y., Armin, A., Meredith, P. et al. Accurate characterization of next-generation thin-film photodetectors. Nature Photon 13, 1–4 (2019). https://doi.org/10.1038/s41566-018-0288-z Wang, F., Zhang, T., Xie, R. e…

[XYCTF新生赛]-PWN:fmt解析(scanf格式化字符串漏洞,任意地址写)

查看保护 查看ida 这里没什么好说的 完整exp&#xff1a; from pwn import* context(log_leveldebug) #pprocess(./fmt) premote(gz.imxbt.cn,20975) backdoor0x4012BEp.recvuntil(bgift: ) printf_addrint(p.recv(14),16) print(hex(printf_addr)) libcELF(./libc-2.31.so) …

【计算机网络】循环冗余校验:Cyclic Redundancy Check

1. 任务目标 利用循环冗余校验&#xff08;CRC&#xff09;检测错误。 循环冗余校验&#xff08;英语&#xff1a;Cyclic redundancy check&#xff0c;通称 CRC&#xff09;是一种根据网上数据包或计算机文件等数据产生简短固定位数校验码的一种散列函数&#xff0c;主要用来…

消息队列与信号量(基本概念及操作接口介绍)

一、消息队列 基本概念 System V消息队列是Unix系统中一种进程间通信&#xff08;IPC&#xff09;机制&#xff0c;它允许进程互相发送和接收数据块&#xff08;消息&#xff09; 操作系统可以在内部申请一个消息队列&#xff0c;可以让不同的进程向消息队列中发送数据块&…

Java中使用RediSearch进行高效数据检索

RediSearch是一款构建在Redis上的搜索引擎&#xff0c;它为Redis数据库提供了全文搜索、排序、过滤和聚合等高级查询功能。通过RediSearch&#xff0c;开发者能够在Redis中实现复杂的数据搜索需求&#xff0c;而无需依赖外部搜索引擎。本文将介绍如何在Java应用中集成并使用Red…

2024抖音直播带货-直播间拆解:抖店运营从入门到精通(56节课)

起号原理方式以及节点处理 类目的选择选品思路 付费流量投放原理 直播间进阶玩法 课程内容 直播间搭建标准自然起号(0-1)原理 方式 以及节点处理 老号重启(0-1)原理 方式 以及节点处理 账号在线人数稳定 原理 方式 以及节点处理 账号销售额放大 原理 方式 以及节点处理…

【Linux】namespace 隔离、cgroup 控制

文章目录 五、namespace 隔离dd -- 读取、转换并输出数据mkfs -- 格式化文件系统df -- 显示文件系统磁盘使用情况mount -- 加载文件系统到指定的加载点unshare -- 创建子进程&#xff0c;同时与父程序不共享namespace一个 demo 六、cgroup(Control Group) 相关命令pidstat -- 监…

Stable Diffusion AI绘画

我们今天来了解一下最近很火的SD模型 ✨在人工智能领域&#xff0c;生成模型一直是研究的热点之一。随着深度学习技术的飞速发展&#xff0c;一种名为Stable Diffusion的新型生成模型引起了广泛关注。Stable Diffusion是一种基于概率的生成模型&#xff0c;它可以学习数据的潜…

nginx变量自定义日志收集

内置变量 $remote_addr&#xff1b;存放了客户端的地址&#xff0c;注意是客户端的公网IP&#xff0c;也就是一家人访问一个网站&#xff0c;则会显示为路由器的公网IP。 $args&#xff1b;变量中存放了URL中的指令 [rootlocalhost conf.d]# cat pc.conf server {listen 80;se…

二.Django项目之电商购物商城 -- 校验用户输入密码是否合法

Django项目之电商购物商城 – 校验用户输入密码是否合法 需要开发文档和前端资料的可私聊 一. 创建用户逻辑操作 1. 创建用户app – users python manage.py startapp users2.注册app users.apps.UsersConfig,3. 创建视图 from django.shortcuts import render from djan…

mysql 指定根目录 迁移根目录

mysql 指定根目录 迁移根目录 1、问题描述2、问题分析3、解决方法3.1、初始化mysql前就手动指定mysql根目录为一个大的分区(支持动态扩容)&#xff0c;事前就根本上解决mysql根目录空间不够问题3.1.0、方法思路3.1.1、卸载mariadb3.1.2、下载Mysql安装包3.1.3、安装Mysql 8.353…

华为机考入门python3--(22)牛客22- 汽水瓶

分类&#xff1a;数字 知识点&#xff1a; 整除符号// 5//3 1 取余符号% 5%3 2 题目来自【牛客】 import sysdef calc_soda_bottles(n):if n 0: # 结束输入&#xff0c;不进行处理returnelse:# 循环进行汽水换算total_drunk 0 # 记录总共喝了多少瓶汽水while…

手把手教你安装 Garnet

什么是 Garnet Garnet 是微软使用 C# 编写的 Redis 客户端兼容缓存组件&#xff0c;你可以使用 Redis 客户端的连接方式来连接 Garnet 但是 Garnet 需要 .NET8 运行环境才可以使用&#xff0c;为了便捷性&#xff0c;可以考虑构建成 Docker 镜像 裸机部署 首先&#xff0c;…

初始数据类型

注释补充 在我们编写任何代码的时候&#xff0c;都有一个叫做注释的功能 在golang中有两种 单行注释 // 如下图所示 加入了注释的话&#xff0c;代码在执行的时候会自动忽视这段内容 //fmt.Println("天上") //fmt.Println("天下") //fmt.Println("唯…

Web端重叠路径可视化

近几年来&#xff0c;由于信息技术的发展&#xff0c;大数据成为了这个时代的代名词之一&#xff0c;“数据可视化”风靡一时。得益于HTML5提供的新标签“canvas”&#xff0c;Web端也能分“数据可视化”一杯羹。 随着越来越多的可视化方案和需求&#xff0c;需要解决问题也越来…

Java中接口的默认方法

为什么要使用默认方法 当我们把一个程序的接口写完后 用其他的类去实现&#xff0c;此时如果程序需要再添加一个抽象方法的时候我们只有两种选择 将抽象方法写在原本的接口中 但是这样写会导致其他所有改接口的实现类都需要实现这个抽象方法比较麻烦 写另一个接口 让需要的实…