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批量下载图片的三种方法
Apr 22 Python
python中使用sys模板和logging模块获取行号和函数名的方法
Apr 15 Python
用Python代码来解图片迷宫的方法整理
Apr 02 Python
Python中判断输入是否为数字的实现代码
May 26 Python
pip安装时ReadTimeoutError的解决方法
Jun 12 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
Python 保存矩阵为Excel的实现方法
Jan 28 Python
python 有效的括号的实现代码示例
Nov 11 Python
python3 deque 双向队列创建与使用方法分析
Mar 24 Python
python实现一个猜拳游戏
Apr 05 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
手把手教你配置JupyterLab 环境的实现
Feb 02 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判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
PHP 实现链式操作
2021/03/09 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python 多线程应用介绍
2012/12/19 Python
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
python中pika模块问题的深入探究
2018/10/13 Python
Python 支付整合开发包的实现
2019/01/23 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
python matplotlib库的基本使用
2020/09/23 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
html5 canvas 使用示例
2010/10/22 HTML / CSS
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
2015年安全生产责任书
2015/01/30 职场文书
会计出纳岗位职责
2015/03/31 职场文书
导游词之唐山景点
2019/12/18 职场文书