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 相关文章推荐
在Django的模型和公用函数中使用惰性翻译对象
Jul 27 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
python中子类继承父类的__init__方法实例
Dec 15 Python
Python实现简单的获取图片爬虫功能示例
Jul 12 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
python list删除元素时要注意的坑点分享
Apr 18 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
Jun 11 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
Python StringIO如何在内存中读写str
Jan 07 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 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
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
PHP代码优化的53个细节
2014/03/03 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
php类自动加载器实现方法
2015/07/28 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
详解Python中的type()方法的使用
2015/05/21 Python
NumPy 数组使用大全
2019/04/25 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
台湾三立电视电商平台:电电购
2019/09/09 全球购物
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
如何写出好的Java代码
2014/04/25 面试题
如何在Shell脚本中使用函数
2015/09/06 面试题
技术总监的工作职责
2013/11/13 职场文书
校园十佳歌手策划书
2014/01/22 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
满月酒邀请函
2015/01/30 职场文书
2015年财政局工作总结
2015/05/21 职场文书
小学音乐课教学反思
2016/02/18 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书