树莓派文字转语音 python_树莓派的语音识别

news/2024/7/24 9:36:05 标签: 树莓派文字转语音 python

树莓派的语音识别

1. 安装linux下的声音库

sudo apt-get install alsa-base

sudo apt-get install alsa-utils

sudo apt-get install libasound2-dev

可能遇到的问题:

E: Unable to locate package alsa-base

解决:更换系统的源

cd /etc/apt/

cp sources.list sources.list.bak

sudo apt-get install vim

sudo vim source.list

...中科大的软件源

deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

...

sudo apt-get update # 更新源

sudo apt-get -f install #修复损坏的软件包

sudo apt-get upgrade #更新软件

换源可能出现的问题:

Err:1 http://mirrors.aliyun.com/ubuntu xenial InRelease

The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32

解决:

sudo gpg --keyserver keyserver.ubuntu.com --recv 3B4FE6ACC0B21F32 //(这个公钥根据提示来写的)

sudo gpg --export --armor 3B4FE6ACC0B21F32 | sudo apt-key add -

sudo apt-get update

输入alsamixer

2.声音的输入和输出

将usb声卡作为默认的声卡:

cd

vim .asoundrc

... 内容如下

pcm. !default sysdefault:Device

...

声音的输出: 挑选一个wav格式的音乐: 可以在这个网站下载示例 https://www.ape8.cn/

sudo aplay loveme.wav #开始播放音乐

声音输入:

sudo arecord -D hw:1,0 -c1 -r16000 -fS16_LE test.wav #对着话筒说话进行录制

参数说明:

-h,—help(帮助)

-V,–version(打印版本信息)

-l,–list-devices(列出全部声卡和数字音频设备)

-L,–list-pcms(列出全部PCM定义)

-D,–device(指定PCM设备名称)

-q,–quiet(安静模式)

-t,–file-type(文件类型voc,wav,raw或au)

-c,–channels(设置通道数)

-f,–format(设置格式)

-r,–rate(设置频率)

-d,–duration(设置持续时间,单位为秒)

-s,–sleep-min(设置最小休眠时间)

-M,–mmap(mmap流)

-N,–nonblock(设置为非块模式)

-B,–buffer-time(缓冲持续时长,单位为微秒)

-v,–verbose(显示PCM结构和设置)

-I,–separate-channels(设置为每个通道一个单独文件)

3. 语音识别

采用开源库: PocketShinx

下载安装:

#下载

wget https://sourceforge.net/projects/cmusphinx/files/sphinxbase/5prealpha/sphinxbase-5prealpha.tar.gz/download -O sphinxbase.tar.gz

wget https://sourceforge.net/projects/cmusphinx/files/pocketsphinx/5prealpha/pocketsphinx-5prealpha.tar.gz/download -O pocketsphinx.tar.gz

# 解压

tar -xzvf sphinxbase.tar.gz

tar -xzvf pocketsphinx.tar.gz

# 安装依赖

sudo apt-get install bison libasound2-dev swig

#先安装sphinxbase

cd sphinxbase-5prealpha

sudo ./configure --enable-fixed

sudo make

sudo make install

#安装pocketsphinx

cd pocketsphinx-5prealpha

sudo ./configure

sudo make

sudo make install

#让系统知道PocketPhinx库文件的位置

sudo vim /etc/ld.so.conf

...追加一行

/usr/local/lib

...

# 进入pocketPhinx下的src/programs

./pocketsphinx_continuous -inmic yes #这样就可以对着话筒说了,语音识别完成

4. 提高识别精度

通过上述的开源库,测试发现十分的不准确,提高准确率的方法有两种,一种是通过训练模型,过程很复杂,另一种是通过制定一些关键字进行范围限定.下面是第二种方法的操作步骤

创建字典

vim keyword.txt

...

up

down

left

right

light

hello

...

生成程序识别的文件:访问http://www.speech.cs.cmu.edu/tools

将字典文件上传,生成指定的.tgz压缩文件,点击下载

./pocketsphinx_continuous -lm 3253.lm -dict 3253.dic -inmic yes

发现识别精度直线上升

5.理解语音并发起动作

动作可以多种多样,他可以是触发一个脚本,可以是回复一句话,下面的实例,做一个简单回应,当我说出hello, 他回复im okay,这样的功能

让程序说话: 文本转语音: TTS(TextToSpeach)

sudo apt-get install espeak

修改pocketPhinx的程序

cp continuous.c continuous.c.bak # 做好备份

...修改如下

if (!in_speech && utt_started) {

/* speech -> silence transition, time to start new utterance */

ps_end_utt(ps);

hyp = ps_get_hyp(ps, NULL );

if (hyp != NULL) {

printf("开始识别了昂....");

if(strcmp(hyp,"HELLO")==0){

system("sudo espeak \"im okay\"");

}

printf("%s\n ", hyp);

fflush(stdout);

}

if (ps_start_utt(ps) < 0)

E_FATAL("Failed to start utterance\n");

utt_started = FALSE;

E_INFO("Ready....\n");

}

sudo make # 重新编译

./pocketsphinx_continuous -lm 3253.lm -dict 3253.dic -inmic yes


http://www.niftyadmin.cn/n/1721294.html

相关文章

python--(set /dict)交集 差集 并集 补集(功能用来做交差并补的)

# ### 集合 作用:交集 差集 并集 补集(功能用来做交差并补的)特征:自动去重 无序#定义一个空集合setvar set() #set()强制转换成一个空集合的数据类型 print(setvar,type(setvar))setvar {"张学友","周杰伦","王大师","刘德华"} …

python实现归并排序_python 实现归并排序算法

理论不多说&#xff1a; 代码如下: #!/usr/bin/python import sys def merge(array, q, p, r): left_array array[q:p1] right_array array[p1:r1] left_array_num len(left_array) right_array_num len(right_array) i, j , k [0, 0, q] while i left_array_num and j rig…

如何访问阿里云上sqlserver数据库

本人在阿里云上安装了sqlserver 2008 R2数据库后一直本地无法连接访问&#xff0c;现在按以下几个步骤来配置即可 一&#xff1a;在阿里云安装sqlserver数据库之后&#xff0c;测试本地连接是否可以连接 二&#xff1a;当本地连接成功之后&#xff0c;配置服务器防火墙sqlserv…

前端笔记之ES678WebpackBabel(下)AMD|CMD规范模块webpackPromise对象Generator函数...

一、AMD和CMD规范&#xff08;了解&#xff09; 1.1传统的前端开发多个js文件的关系 yuan.js中定义了一个函数 function mianji(r){return 3.14 * r * r } main.js文件中调用这个函数&#xff1a; alert(mianji(10)) 在页面上按顺序引入这两个js文件&#xff1a; <html> …

使用+Leapms查看线性规划的单纯形表,itsme命令

知识点 Leapms的itsme命令 Leapms的直接代数模型 查看线性规划直接代数模型的单纯形表和计算过程 Leapms的直接代数模型 Leapms的直接代数模型十分简单&#xff0c;只是使用了s.r.表示变量的符号限制约束&#xff0c;其余是常用的模型写法。 模型关键词兼容多种写法&#xff0c…

查看自己所有的工程提交次数

git branch -r --contains [ hash index] 远程仓库是否包含当前的提交 我写的注释什么的很少出现 日期的英文, 所以很好统计 #!/bin/bashCOUNTS0 DATE$(date | awk {print $2}) DIRS$(ls) CHECK_URLgit10.0.128.128:sw/ INDEX0 TODAY$(date | awk {printf "%s %s %s"…

解决小程序字体加粗在开发工具中起作用,但是发布或者体验确不行

数字值 400 相当于 关键字 normal&#xff0c;700 等价于 bold。每个数字值对应的字体加粗必须至少与下一个最小数字一样细&#xff0c;而且至少与下一个最大数字一样粗。 可能的值 但是在实际使用小程序时&#xff0c;虽然配置了字体font-weight:700,在开发工具里面显示都是正…

逻辑回归算法原理_【算法原理】逻辑回归

逻辑回归属于经典的二分类算法&#xff0c;但是为什么叫回归呢&#xff1f;是因为逻辑回归可以通过sigmoid函数&#xff0c;将线性回归的结果&#xff08;数值&#xff09;映射为概率&#xff0c;有了概率&#xff0c;就可以根据概率大小判断属于哪一类。Sigmoid函数公式及其几…