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 相关文章推荐
php使用递归与迭代实现快速排序示例
Jan 23 Python
python中使用pyhook实现键盘监控的例子
Jul 18 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
python删除某个字符
Mar 19 Python
python将txt文件读入为np.array的方法
Oct 30 Python
Python转换时间的图文方法
Jul 01 Python
pymysql模块的使用(增删改查)详解
Sep 09 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
利用Python如何实时检测自身内存占用
May 09 Python
Python实现自动签到脚本功能
Aug 20 Python
requests在python中发送请求的实例讲解
Feb 17 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
一个改进的UBB类
2006/10/09 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
js中replace的用法总结
2013/12/27 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
分享五个有用的jquery小技巧
2015/10/08 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
利用vue-router实现二级菜单内容转换
2016/11/30 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
pycharm安装和首次使用教程
2018/08/27 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Python文件名匹配与文件复制的实现
2020/12/11 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
总经理文秘岗位职责
2014/02/03 职场文书
小学信息技术教学反思
2014/02/10 职场文书
公司开业庆典主持词
2014/03/21 职场文书
校长寄语大全
2014/04/09 职场文书
英语投诉信范文
2015/07/03 职场文书
2016年安全月活动总结
2016/04/06 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL