此项目只不过是之前大三刚学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, paInt16
import numpy as np
from datetime import datetime
import wave
import time
import urllib, urllib2, pycurl
import base64
import json
import os
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

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

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

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

1.2:树莓派版本

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

http://komey.utdme.com/archives/2321?utm_source=tuicool&utm_medium=referral

##先更新软件包
sudo apt-get update
sudo 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 urllib
import jsondef getHtml(url):page = urllib.urlopen(url)html = page.read()return htmlif __name__ == '__main__':key = '05ba411481c8cfa61b91124ef7389767'api = 'http://www.tuling123.com/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~127
  • U8: unsigned 8 bits,无符号字符 = unsigned char,表示范围 0~255
  • S16_LE: little endian signed 16 bits,小端有符号字 = short,表示范围 -32768~32767
  • S16_BE: big endian signed 16 bits,大端有符号字 = short倒序(PPC),表示范围 -32768~32767
  • U16_LE: little endian unsigned 16 bits,小端无符号字 = unsigned short,表示范围 0~65535
  • U16_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 sys
reload(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)

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

  1. AIGC:ChatGPT(一个里程碑式的对话聊天机器人)的简介(意义/功能/核心技术等)、使用方法(七类任务)、案例应用(提问基础性/事实性/逻辑性/创造性/开放性的问题以及编程相关)之详细攻略

    AIGC:ChatGPT(一个里程碑式的对话聊天机器人)的简介(意义/功能/核心技术等).使用方法(七类任务).案例应用(提问基础性/事实性/逻辑性/创造性/开放性的问题以及编程相关)之详细攻略 导读 ...

  2. 【NLP】自己搭一个多轮对话聊天机器人(附实现源码)

    [NLP]自己搭一个多轮对话聊天机器人(附实现源码) 01 项目框架 02 模型 2.1 粗排 2.1.1BM25 2.1.1 Bool检索 2.2 精排 意图识别 03 API交互 04 微信前端 ...

  3. 树莓派百度语音识别+图灵机器人对话聊天机器人

    硬件 树莓派3B.USB声卡.麦克.USB音响 软件 python.百度语音识别API.图灵机器人.espeak 树莓派官方系统自带python环境.注册百度语音识别开发者账号,获取api key. ...

  4. python微信语音转发_Python 微信公众号开发(2)——听得懂语音消息的聊天机器人...

    提要: 这篇文章里我们会写: 1.如何对一个聊天机器人进行抓包分析接口: 2.如何将现成的聊天机器 API 部署到自己的公众号上: 3.如何实现接收语音消息并调用聊天机器人 API 自动回复文字: 4 ...

  5. 基于百度UNIT的微信智能问答聊天机器人小程序

    微信聊天机器人小程序 方法 人人都能拥有的聊天小程序 登录百度ai开放平台,申请百度unit智能聊天机器人,获取ak和sk密钥. 将密钥复制到chat.js对应处即可. 功能 可以进行闲聊,天气查询, ...

  6. 使用TensorFlow.js的AI聊天机器人五:创建电影对话聊天机器人

    目录 设置UpTensorFlow.js代码 康奈尔电影报价数据集 通用句子编码器 电影聊天机器人在行动 终点线 下一步是什么? 下载项目文件-9.9 MB TensorFlow+JavaScript ...

  7. 入选最受关注AI公司的Kitt.AI:多轮对话聊天机器人开发也可以很简单

    移动互联网发展之初,很多习惯了开放.自由的PC网民是充满绝望的,他们把手机上各个App之间无法跳转.内容封闭的情况称为"信息孤岛".这可能是聊天机器人,即chatbot随着人工智能 ...

  8. python 实现对话聊天机器人

    前言 在不远的将来,实现一定程度上的语音支持将成为日常科技的基本要求,整合了语音识别的python程序提供了其他技术无法比拟的交互性和可访问性.最重要的是,在python程序中实现语音识别非常简单.整 ...

  9. 自己的智能AI聊天机器人,可自定义头像,免费html源码分享,粘贴即用!

    1.展示效果 效果预览图: 新增小功能: ① 在原有的基础上加入了本地实时存档的功能,按照下面的步骤便可以随时在本地查看以往和智能AI所有的聊天记录哦!再也不用担心关闭网页后先前的聊天内容全部消失啦! ...

最新文章

  1. Asp.net中具体的日期格式化用法
  2. JAVA NIO - Buffer Channel
  3. 如何配置天融信NGFW4000防火墙基于长连接的访问策略
  4. 10 i lt shell的if_shell学习(10)- if的使用
  5. numpy使用MKL库提升计算性能
  6. 项目管理工具篇(一、Maven)
  7. 使用SAP WebIDE给SAP UI5应用添加data source
  8. 端口复用和重映射--STM32F103
  9. 【LeetCode】【HOT】39. 组合总和(回溯)
  10. 配色方案为您的下一个设计项目准备,照着配准没错!
  11. 《一分钟经理人》学习笔记第五部分---一分钟表扬为什么有效
  12. 常见加密解密简单总结
  13. Win32汇编——内存映射文件
  14. 《Web漏洞防护》读书笔记——第9章,XSS防护
  15. [渝粤教育] 四川信息职业技术学院 Linux网络管理 参考 资料
  16. [3D数学基础:图形与游戏开发]读书笔记 第12章(几何图元直线、AABB、球圆、平面、三角形、多边形)
  17. 信工所复试收集材料分享
  18. CentOS7.6 安装Oracle12C(上)
  19. FreeBase介绍
  20. python 控制手机摄像头_用Python获取摄像头并实时控制人脸 !

热门文章

  1. 【转】C# 开发Chrome内核浏览器(WebKit.net)
  2. IT风险管理专家CISRE认证
  3. freopen - C/C++文件输入输出利器
  4. 实验十 配置EIGRP协议
  5. Python_note6 组合数据类型+jieba库+文本词频统计
  6. matplotlib画图绘制辅助线
  7. Grafana4.2安装
  8. More Effective C++: 01基础议题
  9. Ext.Net学习笔记06:Ext.Net DirectEvents用方补充
  10. NES模拟器开发-CPU笔记