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 相关文章推荐
Python3中多线程编程的队列运作示例
Apr 16 Python
Python实现对比不同字体中的同一字符的显示效果
Apr 23 Python
python使用代理ip访问网站的实例
May 07 Python
Python开启线程,在函数中开线程的实例
Feb 22 Python
Python中正则表达式的用法总结
Feb 22 Python
Python3字符串encode与decode的讲解
Apr 02 Python
PyQt5响应回车事件的方法
Jun 25 Python
在Python中append以及extend返回None的例子
Jul 20 Python
Python爬虫爬取杭州24时温度并展示操作示例
Mar 27 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 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
PHP 图片文件上传实现代码
2010/12/29 PHP
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
js实现日历
2020/11/07 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
学习python (1)
2006/10/31 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
护理专业毕业生推荐信
2013/10/31 职场文书
学子宴答谢词
2014/01/25 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
企业环保标语
2014/06/10 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
保安2014年终工作总结
2014/12/06 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技