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浅拷贝与深拷贝用法实例
May 09 Python
Linux系统上Nginx+Python的web.py与Django框架环境
Dec 25 Python
python编程嵌套函数实例代码
Feb 11 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
Nov 06 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
关于Python核心框架tornado的异步协程的2种方法详解
Aug 28 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
Python爬取365好书中小说代码实例
Feb 28 Python
Django扫码抽奖平台的配置过程详解
Jan 14 Python
Python移位密码、仿射变换解密实例代码
Jun 27 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
Syphon 使用方法
2021/03/03 冲泡冲煮
php实现mysql同步的实现方法
2009/10/21 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
js 一个关于图片onload加载的事
2013/11/10 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
Python实现Linux的find命令实例分享
2017/06/04 Python
python距离测量的方法
2018/03/06 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
联强国际笔试题面试题
2013/07/10 面试题
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
机械专业毕业生推荐信范文
2013/11/25 职场文书
中专三年学习的个人自我评价
2013/12/12 职场文书
市场开发与营销专业求职信
2013/12/31 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
2014年教师节寄语
2014/04/03 职场文书
医药营销个人求职信
2014/04/12 职场文书
促销活动总结报告
2014/04/26 职场文书
酒店管理求职信
2014/06/09 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书