600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > alsa 测试 linux_python语音智能对话聊天机器人--linuxamp;amp;树莓派双平台兼容

alsa 测试 linux_python语音智能对话聊天机器人--linuxamp;amp;树莓派双平台兼容

时间:2020-06-05 14:55:23

相关推荐

alsa 测试 linux_python语音智能对话聊天机器人--linuxamp;amp;树莓派双平台兼容

此项目只不过是之前大三刚学python就想做点好玩的项目试试看(因此技术含量不高),后来这个成为毕业设计的一部分,长期看博客上访问量也不错,就发布出来,希望有想入门python 的朋友可以参考写来玩玩,用项目练技术,用成果获取编码的乐趣。

-------------------*********---------********

项目简介:运用百度语音进行声音转中文的识别与合成,智能对话使用图灵机器人,录音则,linux端用pythonaudio 模块.树莓派端因为pythonaudio不兼容问题,因此用arecord进行录音.最终代码约150行.

代码发布在github上:luyishisi/python_yuyinduihua

博客有该文的原文:python语音智能对话聊天机器人,linux&&树莓派双平台兼容 | | URl-team

0.目录:

1:环境搭建2:百度语音合成与识别3:图灵机器人4:linux下使用pythonaudio进行音频解析5:树莓派下使用arecord进行录音6:linux整体调试7:主要bug解析8:源代码树莓派下的

1.环境搭建

这点非常关键,在后期多数问题都是出现在环境不兼容上.

1.1:linux版本

# -*- coding: utf-8 -*-from pyaudio import PyAudio, paInt16import numpy as npfrom datetime import datetimeimport waveimport timeimport urllib, urllib2, pycurlimport base64import jsonimport osimport sysreload(sys)sys.setdefaultencoding( "utf-8" )

这部分环境最好搭建,只需要

apt-get install python-wave* 这类的安装命令就可以轻松搞定.本质上安装模块就是在找安装的命令.我一半就是把模块肯定会有的名词后面接上*用于模糊匹配.

如果有模块不懂得装,还是百度一下,难度不大.还有mpg123用来播发

1.2:树莓派版本

如果你出现这个博文下出现的错误,请果断弃坑.换用命令行录音实现,不要折腾pyaudio了.

/archives/2321?utm_source=tuicool&utm_medium=referral

##先更新软件包sudo apt-get updatesudo apt-get upgrade##安装必要的程序sudo apt-get -y install alsa-utils alsa-tools alsa-tools-gui alsamixergui

主要使用的工具

想通过终端来调整扬声器的音量,只需要输入alsamixer.这个很重要你使用的录音设备的录音音量需要这里设置,而且你可以明显的看到自己的声卡是否有问题.

使用的录音设备我用的是Raspberry Pi B+ 3代 USB麦克风 话筒 免驱动 pcduino 树莓派专用

录音的命令使用的是arecord

arecord,aplay是命令行的ALSA声卡驱动的录音和播放工具.

arecord是命令行ALSA声卡驱动的录音程序.支持多种文件格式和多个声卡.

aplay是命令行播放工具,支持多种文件格式.

命令格式:这部分需要研读一下.主要使用dfr三个参数

arecord [flags] [filename]参数比较多,请从博客获取。

示例:

aplay -c 1 -t raw -r 22050 -f mu_law foobar播放raw文件foobar.以22050Hz,单声道,8位,mu_law格式.arecord -d 10 -f cd -t wav -D copy foobar.wav以CD质量录制foobar.wav文件10秒钟.使用PCM的"copy".

2:百度语音合成与识别

这部分难度不大,测试代码如下.如有以为情参看之前的博文

代码比较长请从博客或者github获取

3:图灵机器人

官方网址:图灵机器人-中文语境下智能度最高的机器人大脑

图灵机器人部分的测试代码

难度不大非常轻松.你得去注册一下,然后使用他们给你的key和api.剩下的就是json的文本提取

# -*- coding: utf-8 -*-import urllibimport jsondef getHtml(url):page = urllib.urlopen(url)html = page.read()return htmlif __name__ == '__main__':key = '05ba411481c8cfa61b91124ef7389767'api = '/openapi/api?key=' + key + '&info='while True:info = raw_input('我: ')request = api + inforesponse = getHtml(request)dic_json = json.loads(response)print '机器人: '.decode('utf-8') + dic_json['text']

4:linux下使用pythonaudio进行音频解析

这部分,在正常电脑上,只要环境没有大问题就很轻松,代码放在整体的源代码中,这里做个小说明.

这部分代码不可运行,在整体源代码中可以.不过这部分稍微需要抽取出来,作为理解

建立的pa是pyudio对象,可以获取当前的音高,然后检测当音高超过200就启动,录音.同时有一个5秒的额外限制.

NUM_SAMPLES = 2000# pyAudio内部缓存的块的大小SAMPLING_RATE = 8000 # 取样频率LEVEL = 1500 # 声音保存的阈值COUNT_NUM = 20# NUM_SAMPLES个取样之内出现COUNT_NUM个大于LEVEL的取样则记录声音SAVE_LENGTH = 8 # 声音记录的最小长度:SAVE_LENGTH * NUM_SAMPLES 个取样# 开启声音输入pa = PyAudio()stream = pa.open(format=paInt16, channels=1, rate=SAMPLING_RATE, input=True,frames_per_buffer=NUM_SAMPLES)\string_audio_data = stream.read(NUM_SAMPLES)# 将读入的数据转换为数组audio_data = np.fromstring(string_audio_data, dtype=np.short)# 计算大于LEVEL的取样的个数large_sample_count = np.sum( audio_data > LEVEL )temp = np.max(audio_data)if temp > 2000 and t == 0:t = 1#开启录音print "检测到信号,开始录音,计时五秒"begin = time.time()print temp

5:树莓派下使用arecord进行录音

这里主要还是记录下整体的一些资料.在树莓派上能够成功运行下面的命令就算ok.别的是一路研究的资料.

sudo arecord -D "plughw:1,0" -d 5 f1.wav

参数释义: -D这个参数的意思就选择设备,外部设备就是plughw:1,0 内部设备就是plughw:0,0,树莓派本身并没有录音模块,故没有内部设备。-d 5

的意思就是录制时间为5秒,如果不加这个参数就是一直录音直到ctrol+C停止, 最后生成的文件名字叫做f1.wav

百度语音要求的是16比特的所以还需要设定-f

具体pcm的说明如下:

这都是PCM的一种表示范围的方法,所以表示方法中最小值等价,最大值等价,中间的数据级别就是对应的进度了,可以都映射到-1~1范围。

S8: signed 8 bits,有符号字符 = char, 表示范围 -128~127U8: unsigned 8 bits,无符号字符 = unsigned char,表示范围 0~255S16_LE: little endian signed 16 bits,小端有符号字 = short,表示范围 -32768~32767S16_BE: big endian signed 16 bits,大端有符号字 = short倒序(PPC),表示范围 -32768~32767U16_LE: little endian unsigned 16 bits,小端无符号字 = unsigned short,表示范围 0~65535U16_BE: big endian unsigned signed 16 bits,大端无符号字 = unsigned short倒序(PPC),表示范围 0~65535还有S24_LE,S32_LE等,都可以表示数字的方法,PCM都可以用这些表示。上面这些值中,所有最小值-128, 0, -32768, -32768, 0, 0对应PCM描叙来说都是一个值,表示最小值,可以量化到浮点-1。所有最大值也是一个值,可以量化到浮点1,其他值可以等比例转换。

PCMU应该是指无符号PCM:可以包括U8,U16_LE,U16_BE,...

PCMA应该是指有符号PCM:可以包括S8,S16_LE,S16_BE,...

查看声卡

cat/proc/asound/cards cat/proc/asound/modules

6:整体调试linux平台下的

源代码如下:解析在注释上

比较长,请从github获取。

7:主要bug解析

这里算是解析一下主要坑的地方.除了环境因素,就是中文编码,还有对象解析了.源代码中从百度语音识别出来返回的是一个字典对象,而字典对象中有部分是直接一个字符串,有的则是数组,首先得读出字符串来确定是否是succees.然后再读取text数组.中的中文.

另外一个bug是中文编码.要这么处理

import sysreload(sys)sys.setdefaultencoding( "utf-8" )#还有#print '机器人: '.decode('utf-8') + dic_json['text']#huida = ' '.decode('utf-8') + dic_json['text']a = dic_json['text']print type(a)unicodestring = a# 将Unicode转化为普通Python字符串:"encode"utf8string = unicodestring.encode("utf-8")

然后移植到树莓派上出现的主要问题是有aercode命令出现文件目录找不到.那么说明是你声卡选择错了,录音声音太小了也是,使用alsamixer选择清楚.

还有录音识别效率问题,问题主要集中在百度有他的要求,所以得设定16bit.然后再听一遍录制的声音,看看音量会不会太大,,有没有很粗糙的声音.最好能分开测试

8:源代码-树莓派环境下

pyaudio错误得我不要不要的,,所以还是绕开,使用aercode进行录音命令,然后python进行掉用..代码也短很多,但是失去了实时处理音波的能力.

代码比较长,请从github获取

原创文章,转载请注明:转载自URl-team

本文链接地址:python语音智能对话聊天机器人,linux&&树莓派双平台兼容

Related Posts:

学习—用 Python 和 OpenCV 检测和跟踪运动对象 (4)使用pyaiml机器人模块快速做个和你智能对话的大脑 (4)基于树莓派以及语音与人脸识别的迎宾机器人交互系统开发计划(已完结github中) (3)树莓派开机左上角光标闪烁无法进图形系统问题解决 (3)百度语音识别api使用python进行调用 (3)让树莓派开机运行Python脚本 (3)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。