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中urllib2模块的8个使用细节分享
Jan 01 Python
python压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
Python 3中print函数的使用方法总结
Aug 08 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
Python实现识别图片内容的方法分析
Jul 11 Python
python适合人工智能的理由和优势
Jun 28 Python
python删除文件夹下相同文件和无法打开的图片
Jul 16 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
python连接mysql数据库并读取数据的实现
Sep 25 Python
python设置中文界面实例方法
Oct 27 Python
Django分页器的用法你都了解吗
May 26 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版)
2006/10/09 PHP
PHP 程序员应该使用的10个组件
2009/10/31 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
ThinkPHP实现递归无级分类――代码少
2015/07/29 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
php使用正则验证中文
2016/04/06 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
python实现随机密码字典生成器示例
2014/04/09 Python
python文件写入实例分析
2015/04/08 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
Django中多种重定向方法使用详解
2019/07/17 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
机电专业毕业生求职信
2013/10/27 职场文书
业务代表的岗位职责
2013/11/16 职场文书
高职教师岗位职责
2013/12/24 职场文书
财务主管的岗位职责
2013/12/30 职场文书
小学优秀教师材料
2014/12/15 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
关于倡议书的范文
2015/04/29 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
Python各协议下socket黏包问题原理
2022/04/12 Python