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中MySQLdb模块用法实例
Nov 10 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
python仿evething的文件搜索器实例代码
May 13 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
python删除列表元素的三种方法(remove,pop,del)
Jul 22 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
python获取Pandas列名的几种方法
Aug 07 Python
python3中for循环踩过的坑记录
Dec 14 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 Python
详解Pymongo常用查询方法总结
Jan 29 Python
pytorch 如何使用amp进行混合精度训练
May 24 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
输出控制类
2006/10/09 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
使用PYTHON创建XML文档
2012/03/01 Python
Python中decorator使用实例
2015/04/14 Python
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
详解supervisor使用教程
2017/11/21 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python中常见的数制转换有哪些
2020/05/27 Python
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
Linux文件系统类型
2012/02/15 面试题
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
单位消防安全制度
2014/01/12 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
对教师的评语
2014/04/28 职场文书
四年级小学生评语
2014/12/26 职场文书
公司租车协议书
2015/01/29 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python