python 实现语音聊天机器人的示例代码


Posted in Python onDecember 02, 2018

前言

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

原理简介

许多现代语音识别系统会在HMM识别之前使用神经网络,通过特征变换和降维技术来简化语音信号,也可以使用语音活动检测器将音频信号减少到可能包含语音的部分。

幸运的是,对于python来讲,一些语音识别的服务可通过API在线使用,且其中大部分也提供了Python SDK。

本文做的聊天机器人是基于百度语音识别和图灵机器人二者之上共同实现的。大致的流程如下图:

python 实现语音聊天机器人的示例代码

原理流程图.PNG

这里需要用的模块库有 requests、time、datetime、pyaudio、wave、aipspeech 等。

话不多说,上代码:

##@氢立方 2018.0911

import requests
import time
import pygame
from datetime import datetime
from aip import AipSpeech
from pyaudio import PyAudio,paInt16
import wave
import os


framerate=8000
NUM_SAMPLES=2000
channels=1
sampwidth=2
TIME=2


def save_wave_file(filename,data):
  '''save the date to the wavfile'''
  wf=wave.open(filename,'wb')
  wf.setnchannels(channels)
  wf.setsampwidth(sampwidth)
  wf.setframerate(framerate)
  wf.writeframes(b"".join(data))
  wf.close()


def my_record():
  pa=PyAudio()
  stream=pa.open(format = paInt16,channels=1,
          rate=framerate,input=True,
          frames_per_buffer=NUM_SAMPLES)
  my_buf=[]
  count=0
  while count<TIME*6:#控制录音时间
    string_audio_data = stream.read(NUM_SAMPLES)
    my_buf.append(string_audio_data)
    count+=1
    print('.')
  save_wave_file('0001.wav',my_buf)
  stream.close()

##def play():
##  wf=wave.open(r"D:/41125.mp3",'rb')
##  p=PyAudio()
##  stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=
##  wf.getnchannels(),rate=wf.getframerate(),output=True)
##  while True:
##    data=wf.readframes(chunk)
##    if data=="":break
##    stream.write(data)
##  stream.close()
##  p.terminate()
##

这里大家需要改成自己的ID和KEY


APP_ID = '11****843'
API_KEY = '3Mnv***8**88******GbXa'

SECRET_KEY = '147***8*88****1227684'
aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)




def getText(url):
  text = requests.post(url).json()
  return text['text']



##
##key = '6ddc57c5761a4c62a30ea840e5ae163f'
#api = 'http://www.tuling123.com/openapi/api?key=' + key +'&info ='
key = '8b005db5f57556fb96dfd98fbccfab84' 
api = 'http://www.tuling123.com/openapi/api?key=' + key + '&info=' 
##
while True:
  
##  info = input("我说\n")

 
##  chunk=2014

  my_record()
  print("录音完成")
  

  
  def get_file_content(filePath):
    with open(filePath,'rb') as fp:
      return fp.read()
    
  a = aipSpeech.asr(get_file_content('0001.wav '),'wav',8000,{})
  print(a)
  b = str(a['result'])
  info = b

  
  url = api + info
  #print(url)

  text_01 = getText(url)
  print("机器人回\n",text_01)

  now = datetime.now().strftime("%Y-%m-%d_%H_%M_%S")
  filename_01 = now + ".mp3"

  result = aipSpeech.synthesis(  text_01,'zh',1,{'vol': 5,'per' : 2} )
  
  if not isinstance(result, dict):
    
    with open(filename_01, 'wb') as f:
      f.write(result)
  print("--------------------------------------")
  time.sleep(1)
  
  
  pygame.mixer.init()
  print("语音1")
  file= filename_01
  track = pygame.mixer.music.load(file)

  pygame.mixer.music.play()
  time.sleep(15)
  pygame.mixer.music.stop()
  pygame.quit()

运行结果如下:

小编说的是:今天看了电视剧。机器人回复的是:看了有没有开心点

在某种意义上来说,语境还是符合常理的。

python 实现语音聊天机器人的示例代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python性能优化的20条建议
Oct 25 Python
python通过pip更新所有已安装的包实现方法
May 19 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 Python
在python image 中安装中文字体的实现方法
Aug 22 Python
python科学计算之narray对象用法
Nov 25 Python
python 实现单通道转3通道
Dec 03 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 Python
Python非单向递归函数如何返回全部结果
Dec 18 Python
python3美化表格数据输出结果的实现代码
Apr 14 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 #Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 #Python
PyCharm配置mongo插件的方法
Nov 30 #Python
对python自动生成接口测试的示例讲解
Nov 30 #Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 #Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 #Python
python2与python3的print及字符串格式化小结
Nov 30 #Python
You might like
PHP与SQL注入攻击[一]
2007/04/17 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
编程语言Python的发展史
2014/09/26 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
django 中QuerySet特性功能详解
2019/07/25 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
户外活动策划方案
2014/03/12 职场文书
专科生就业求职信
2014/06/22 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
公司感谢信范文
2015/01/22 职场文书
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js