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入门篇之面向对象
Oct 20 Python
Python中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
python基于K-means聚类算法的图像分割
Oct 30 Python
appium+python adb常用命令分享
Mar 06 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
Python urllib库如何添加headers过程解析
Oct 05 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 18 Python
python异常中else的实例用法
Jun 15 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验证码类代码分享(已封装成类)
2011/07/17 PHP
PHP的PSR规范中文版
2013/09/28 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
javascript轮播图算法
2016/10/21 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
python lxml中etree的简单应用
2019/05/10 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
教育局长自荐信范文
2013/12/22 职场文书
农业资源与环境专业自荐信范文
2013/12/30 职场文书
学习之星事迹材料
2014/05/17 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
2014年班主任工作总结
2014/11/08 职场文书
2015年司法所工作总结
2015/04/27 职场文书
二年级作文之动物作文
2019/11/13 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python
Golang 并发编程 SingleFlight模式
2022/04/26 Golang