python语音通话_如何优雅的用Python玩转语音聊天机器人
一名极客运维人员,走在脑洞大开的路上....
Python聊天机器人:可以感应人是否存在,识别语音,通过图灵API语音回答
-------------------------上图镇楼----------------------------
【详细攻略】
所需硬件:
树莓派B+
人体红外线感应模块
申请API:
百度语音api
图灵api
语音聊天机器人实现原理:当有人来到跟前时--》触发聊天功能,开始以每2s检测录制语音--》通过百度语音api合成文字--》传递给图灵api返回回答信息--》通过百度语音合成播放
【人体感应识别部分Python代码renti.py】#/usr/bin/python
#coding:utf-8
import RPi.GPIO as GPIO
import time
import os
import signal
import atexit
GPIO.setmode(GPIO.BCM)
GPIO_PIR = 14
GPIO.setup(GPIO_PIR,GPIO.IN) # Echo
jing = 0
dong = 0
sum = 0
sum1 = 0
oldren = 0
sleep = 0
def ganying():
i = 0
ok = 0
error = 0
while i
if GPIO.input(GPIO_PIR) == 1 :
ok = ok + 1
if GPIO.input(GPIO_PIR) == 0 :
error = error + 1
time.sleep(0.01)
i = i + 1
ren = ok/(error+1)
return renGPIO_PIR = 14
为 红外线检测模块与树莓派的针脚,脚本函数返回0表示无人,>0 为有人
【Python语音识别聊天部分robot.py】#/usr/bin/python
# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import urllib
import urllib2
import json
import uuid
import base64
import os
import time
from renti import *
#获取百度token
appid=7647466
apikey="百度API"
secretkey="百度API"
baidu_url="https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apikey + "&client_secret=" + secretkey;
y_post=urllib2.urlopen(baidu_url)
y_read=y_post.read()
y_token=json.loads(y_read)[‘access_token‘]
#print y_read
#print y_token
#------------------function-------------
def luyin():
os.system(‘arecord -D plughw:1,0 -c 1 -d 2 1.wav -r 8000 -f S16_LE 2>/dev/null‘)
def fanyi():
#http://vop.baidu.com/server_api?lan=zh&cuid=***&token=***
#---------------语音识别部分
mac_address="haogeoyes"
with open("1.wav",‘rb‘) as f:
s_file = f.read()
speech_base64=base64.b64encode(s_file).decode(‘utf-8‘)
speech_length=len(s_file)
data_dict = {‘format‘:‘wav‘, ‘rate‘:8000, ‘channel‘:1, ‘cuid‘:mac_address, ‘token‘:y_token, ‘lan‘:‘zh‘, ‘speech‘:speech_base64, ‘len‘:speech_length}
json_data = json.dumps(data_dict).encode(‘utf-8‘)
json_length = len(json_data)
asr_server = ‘http://vop.baidu.com/server_api‘
request = urllib2.Request(url=asr_server)
request.add_header("Content-Type", "application/json")
request.add_header("Content-Length", json_length)
fs = urllib2.urlopen(url=request, data=json_data)
result_str = fs.read().decode(‘utf-8‘)
json_resp = json.loads(result_str)
if json_resp.has_key(‘result‘):
out_txt=json_resp[‘result‘][0]
else:
out_txt="Null"
return out_txt
def tuling(b):
f=urllib.urlopen("http://www.tuling123.com/openapi/api?key="此处为图灵API"&info=%s" % b)
f=json.loads(f.read())[‘text‘]
return f
def hecheng(text,y_token):
#text="你好我是机器人牛牛很高兴能够认识你"
geturl="http://tsn.baidu.com/text2audio?tex="+text+"&lan=zh&per=1&pit=9&spd=6&cuid=CCyo6UGf16ggKZGwGpQYL9Gx&ctp=1&tok="+y_token
return os.system(‘omxplayer "%s" > /dev/null 2>&1 ‘%(geturl))
#return os.system(‘omxplayer "%s" > /dev/null 2>&1 ‘%(geturl))
def nowtime():
return time.strftime(‘%Y-%m-%d %H:%M:%S ‘)
#---------------main-----------------
num=0 #num用来判断是第一次说话,还是在对话过程中
first=1 #判断是不是第一说话 当1000次没有人动认为是第一次
while True:
if ganying()!=0:
run=open(‘run.log‘,‘a‘)
if first==0:
hecheng("你好,我是牛牛机器人,你可以和我聊天,不过说话的时候你必须靠近话筒近一点,",y_token)
hecheng("说点什么吧,2秒钟内说完哦.",y_token)
first=1 #为1一段时间就不执行
num=0 #从新计数
#print ganying()
run.write(nowtime()+"说点神马吧..........."+‘\n‘)
print nowtime()+"说点神马吧.........."
luyin() #开始录音
out=fanyi().encode("utf-8") #翻译文字
run.write(nowtime()+"我说:"+out+‘\n‘)
print nowtime()+"我说:"+out
if out == "Null":
text="没有听清楚你说什么"
os.system(‘omxplayer "shenme.wav" > /dev/null 2>&1 ‘)
else:
text=tuling(out)
hecheng(text,y_token)
print nowtime()+"牛牛:"+text
run.write(nowtime()+"牛牛:"+text+‘\n‘)
run.close()
else:
#print ganying() #调试查看是否为0有人没人
#print num
num=num+1 #num长时间增大说明没有人在旁边
if num > 1000:
first=0 #0表示第一次说话
万事俱备 运行nohup python robot.py 哈哈就可以脱离屏幕开始愉快的语音聊天啦
下面看看聊天的日志记录吧
后续更新。。。。。。Python如何用语音优雅的控制小车
haogeoyes
原文:http://haoge0yes.blog.51cto.com/2754130/1773157
python语音通话_如何优雅的用Python玩转语音聊天机器人相关推荐
- python代码书写_如何优雅的书写Python代码, python使用小技巧
博客链接 文章目录 Python使用技巧 变量命名技巧 用有意义易读的命名 同类型使用相同词汇 可搜索的名字 自我描述的变量 不要取隐晦的名字 精简不重复 默认参数代替运算和条件 实用小窍门 变量值交 ...
- python画校徽_如何优雅的用python来解绕口令
周末了,大段长篇技术文不发了,知道没人愿意看,但是学习不能落下,毕竟我的心里只有学习 这里分享一个自然语言处理中对中文分词支持比较好的结巴分词库,属于NLP中的重量级分词库,我们通过下面有趣的解绕口令 ...
- 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...
话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...
- python做运动控制_第一课:用Python操控小龟小车运动
欢迎来到小龟的课堂,今天我们讲如何用小龟小车的车载Python控制小车运动. 如果小伙伴还不会使用小龟小车的Python编辑器的话,可以阅读这篇教程<如何使用小龟小车的Python编辑器> ...
- print python excel分隔_合并/拆分 Excel?Python、VBA轻松自动化
作者 | Ryoko 来源 | 凹凸数据 当你收集了 n 个人的 EXCEL 记录表,需要将它们汇成一个总表时你会怎么做呢? 如果不通过技术手段,要一个个打开再复制粘贴也太麻烦了吧! 此时就需要一个通 ...
- 怎么学python知乎_你是怎么学习Python的 ?
大家不要看到这个文章的题目,就认为这是一篇广告软文.然而并不是,因为我看到了很多同行都被大数据.人工智能的热潮吸引了,开始纷纷学习python.这是好事,但看到了好多人都走了不少弯路,浪费了时间.于是 ...
- python半圆代码_趣味项目:用Python代码做个月饼送给你!
所用工具 1.Python中的turtle包 2.对Python似火的热情 先来介绍一番 Turtle作图又叫海龟作图,是Python中比较有趣的一个模块,功能强大,使用方便.简单来说,比如有一块空地 ...
- python uppercase函数_字符串-短rot13函数-Python
字符串-短rot13函数-Python 我正在Python中寻找一个简短而又酷的rot13函数;-)我已经写了这个函数: def rot13(s): chars = "abcdefghijk ...
- 易语言和python混合编程_关于易语言与Python的一点想法
易语言与python的一点想法">关于易语言与Python的一点想法 小香蕉 2019年7月11日 说在前面 最近吃饭的时候总是会想很多关于易语言的事情.易语言是我学会的第一门语言,虽 ...
- python精通大学_小白21天精通Python是如何做到的?
题记:大二的时候发现人生苦短,所以信了拍神,开始学Python.学了大半年之后成功转行做前端了.来写个教程帮助大家入门Python. Python零基础入门 零基础入门就得从最基本的变量,语法格式,数 ...
最新文章
- zookeeper-一个关于paxos的故事
- Gumbel-Softmax Trick和Gumbel分布 附VAE讲解
- 项目中用到的BAPI合集
- SAP Spartacus home页面的layout,template,section和slots
- 【Java每日一题】20161219
- 尝试:Script Lab,开发模式之知识储备//SL02
- 【CodeForces - 798A】Mike and palindrome (回文串,水题,字符串问题)
- windows svn
- 循环小数与费马小定理
- freertos 创建互斥量_freertos任务通信
- 使用create-keyframe-animation实现js动画
- 【企鹅电竞直播源】浏览器抓取真实直播源地址(纯前端JS PHP解析源码)
- MTK通用驱动的安装
- Postman下载及安装详细教程
- excel常用函数及快捷键
- 关于 联想昭阳 E43A 无线开关设置的 正确解决办法
- Essay写作具体内容怎么了解?
- python 计算gdp_菜鸟笔记Python3——数据可视化(三)世界GDP分析
- python 多态 知乎_Python鸭子类型和多态
- SQL删除数据库表中重复的数据
热门文章
- 云队友丨任正非内部演讲:星光不问赶路人
- 电脑主板线路连接图解_台式机电源线接法图解(电脑主板接线图解高清
- xss.haozi.me靶场详解
- 多伦多大学计算机专音乐专业,多伦多大学音乐理论专业介绍
- Java 接口 及其在 Minecraft mod中相关应用
- python快乐数字怎么表达_Python中的快乐数字
- 基于R语言的Kaggle案例分析学习笔记(七)
- 波司登 × 阿里云 × 奇点云:教科书式的数智化转型实践
- 在输入框输入时限制输入框只能输入正整数以及两位小数正则表达式
- 输入两个正整数m和n,求其最大公约数和最小公倍数(常见的错误代码分析)