分享

python语音通话

 新用户79878317 2023-01-07 发布于河南

一名极客运维人员,走在脑洞大开的路上....

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./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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多