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之集合的关系
Sep 24 Python
Python中index()和seek()的用法(详解)
Apr 27 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
flask框架json数据的拿取和返回操作示例
Nov 28 Python
AUC计算方法与Python实现代码
Feb 28 Python
Python 面向对象部分知识点小结
Mar 09 Python
python之pygame模块实现飞机大战完整代码
Nov 29 Python
python中remove函数的踩坑记录
Jan 04 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 Python
用Python简陋模拟n阶魔方
Apr 17 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 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
一个简单计数器的源代码
2006/10/09 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
javascript dom 基本操作小结
2010/04/11 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
详解python 爬取12306验证码
2019/05/10 Python
Django之路由层的实现
2019/09/09 Python
python 如何将office文件转换为PDF
2020/09/22 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
清洁工岗位职责
2014/01/29 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
党员三严三实心得体会
2014/10/13 职场文书
见习报告怎么写
2014/10/31 职场文书
会议主持词通用版
2019/04/02 职场文书
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle
浅谈Python中对象是如何被调用的
2022/04/06 Python