树莓派c语言百度语音识别,树莓派语音识别
8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
参考:
配置:
喇叭:3.5音频口
麦克风:摄像头自带麦克风(Usb)
1. 安装需要的软件1
2sudo apt-get install python-pip mplayer flac python2.7-dev libcurl4-gnutls-dev
sudo pip install requests pycurl
2. 配置配置麦克风和音箱1
2
3
4
5
6
7
8
9
10$ cat /proc/asound/cards
0 [ALSA ]: bcm2835 - bcm2835 ALSA
bcm2835 ALSA
1 [Camera ]: USB-Audio - USB 2.0 Camera
Sonix Technology Co., Ltd. USB 2.0 Camera at usb-3f980000.usb-1.2, high speed
$ cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio
第一个命令查看声卡是否存在
第二个命令应该是看声卡的驱动的
调整输入输出音频工具alsamixer:sudo alsamixer
3. 播放声音aplay make.wav
结果声音没有播放
网上查了,
By default output will be automatic (hdmi if hdmi supports audio, otherwise analogue). You can force it with:amixer cset numid=3 where n is 0=auto, 1=headphones, 2=hdmi.
If you have pulseaudio installed you need to also specify the card number:amixer -c 0 cset numid=3
所以运行amixer cset numid=3 1
就可以听到3.5输出了
4. 麦克风测试sudo arecord –duration=10 –device=plughw:1,0 –format=cd aaa.wav
指令中的’–device=plughw:1,0’ 选项指派特定的录音设备,而Raspberry Pi的内置音效设备是’plughw:0,0’
使用百度api进行语音播放:
5. 使用百度API进行语音识别和播放
测试取的token:1
2
3
4
5
6
7
8
9
10
11import requests
import json
url = 'https://openapi.baidu.com/oauth/2.0/token'
payload = {'grant_type':'client_credentials',
'client_id':'ZEzwlE2gipnqoE3jqiCKN7SN',
'client_secret':'KOyWkyE57qWnDnFoc5afwIk0zBMw2X1p'}
r = requests.post(url,data=payload)
print json.loads(r.text)['access_token']
测试ok后,开始正式写:
大致思路:
将请求的token保存到文件中,然后读取文件中的accesstoken,判断token的日期是否有效,无效重新请求token。
代码:
app.py1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131# -*- coding:utf8 -*-
import requests
import os
import json
import time
import uuid
import base64
class API(object):
def __init__(self):
dic = {
'hello':'欢迎使用语音播放',
'error':'识别错误',
}
for key in dic:
self.txt2audio(dic[key],key)
if key == 'hello':
self.play(key)
pass
def get_token(self):
token = None
if os.path.exists('token'):
file = open('token','r')
token = file.read()
file.close()
if json.loads(token)['expires'] < time.time():
token = self.req_token()
else:
print "load cache token"
pass
else:
token = self.req_token()
return json.loads(token)['access_token']
def req_token(self):
print "request new token"
token = None
url = 'https://openapi.baidu.com/oauth/2.0/token'
key = 'ZEzwlE2gipnqoE3jqiCKN7SN'
secret = 'KOyWkyE57qWnDnFoc5afwIk0zBMw2X1p'
payload = {'grant_type':'client_credentials',
'client_id':key,
'client_secret':secret}
r = requests.post(url,data=payload)
token = r.text
jtoken = json.loads(token)
jtoken['expires'] = jtoken['expires_in'] + time.time()
token = json.dumps(jtoken)
file = open('token','w')
file.write(token)
file.close()
return token
def txt2audio(self,txt,audio='tmp'):
access_token = self.get_token()
url = "http://tsn.baidu.com/text2audio"
payload = {
'tex':txt,
'lan':'zh',
'tok':access_token,
'ctp':1,
'cuid':uuid.UUID(int = uuid.getnode()).hex,
'spd':5,
'pit':8,
'vol':9,
'per':1,
}
r = requests.post(url,payload)
if r.headers['Content-Type'] == 'audio/mp3':
file = open(audio + '.mp3','w')
file.write(r.content)
file.close()
else:
self.play('error')
print r.text
pass
def audio2txt(self,file='rec'):
access_token = self.get_token()
url="http://vop.baidu.com/server_api"
self.txt2audio('请说:')
self.play('tmp')
os.system('arecord --duration=2 -c 1 --device=plughw:1,0 -f S16_LE -t wav -v --rate=16000 ' + file + '.wav')
f = open(file + '.wav','r')
sound = f.read()
f.close()
payload = {
'format':'wav',
'rate':16000,
'channel':1,
'cuid':uuid.UUID(int = uuid.getnode()).hex,
'token':access_token,
'lan':'zh',
'speech':base64.b64encode(sound),
'len':len(sound),
}
header = {'Content-Type':'application/json'}
r = requests.post(url,data=json.dumps(payload),headers=header)
print r.text
jret = json.loads(r.text)
if jret.has_key('result'):
ret = json.loads(r.text)['result'][0].split(',')[0]
else:
ret = ""
return ret
pass
def play(self,file='tmp'):
# can not play the mp3 by aplay
# os.system("aplay " + file + ".mp3")
os.system("mpg321 " + file + ".mp3")
pass
baidu.py1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48# -*- coding:utf8 -*-
from baidu import API
import RPi.GPIO as GPIO
import time
import requests
import uuid
import json
pin = 13
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.IN)
baidu = API()
# baidu.txt2audio("你好")
# baidu.play('tmp')
def get_tuling(text):
url='http://www.tuling123.com/openapi/api'
data={'key':'fa78fe2fbb85c914c7126d42bc7c3ebb','info':text,'userid':str(uuid.UUID(int = uuid.getnode()).hex,)}
r = requests.post(url,data=data)
ans = json.loads(r.text)
return ans
while True:
change = False
while GPIO.input(pin) == GPIO.LOW:
change = True
time.sleep(0.005)
if change == True:
#baidu.txt2audio('我听着,请说指令:')
text = baidu.audio2txt()
print text
if len(text) > 0:
rep = get_tuling(text)
rep = rep['text']
print rep
else:
rep = "我没有听清"
baidu.txt2audio(rep)
baidu.play()
change = False
time.sleep(1)
遇到坑:mp3格式只能通过mpg321播放
读取文件token = file.readlines()[0],是一个列表,所以需要先取第一个再用json转。
树莓派c语言百度语音识别,树莓派语音识别相关推荐
- 树莓派c语言人脸识别,树莓派实现简单的人脸识别
前言 这篇文章属于此系列: 一个用树莓派做的会聊天,能人脸识别(支持云台追踪)和发送邮件的小玩具 https://blog.csdn.net/yonglisikao/article/details/8 ...
- 树莓派c语言led,用树莓派实现RGB LED的颜色控制——C语言版本号
用树莓派实现RGB LED的颜色控制 RGB色彩模式是工业界的一种颜色标准.是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代 表红.绿. ...
- 树莓派c语言运行_树莓派完成简单的编程(四)
在上一篇文章中,我们学习了Vi文本编辑器,那么用它可以实现什么功能呢? 树莓派python以及c语言编程 这里我选择了最简单和很流行的两种编程语言: C语言和Python.实现最简单的功能,输出hel ...
- 树莓派c语言按键开关,树莓派 GPIO按钮开关 原理与实现
本以为GPIO接一个开关是很简单的事情,但实际上需要学会很多前置的知识才能搞得下去,所以我把整个事情的原理和实现流程全部记录下来,希望帮助到像我一样的电路小白. 硬件 树莓派 * 1(我的是1B型号) ...
- 树莓派c语言pca9685,使用树莓派控制16路舵机驱动板(pca9685)
使用RPI.GPIO 创建一个 PWM 实例: 启用 PWM: 更改频率: 更改占空比: 停止 PWM: 但当你同时使用多个舵机时,PWM输出就变得困难了.这时可以借助舵机控制板来进行多路PWM控制. ...
- 树莓派C语言pca9685代码,树莓派,PCA9685 pwm控制
硬件: 1> 树莓派2/3 B板 2> PCA9685 16路驱动板: http://duinopeak.com/wiki/index.php?title=PCA9685_16%E8%B ...
- 树莓派c语言访问mariadb,树莓派之MariaDB
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 安装MariaDB MariaDB是MySQL的一个分支 直接命令行敲入:1sudo apt-get install m ...
- Android语音识别——谷歌语音识别与百度语音识别
Android语音识别,简单的理解就是把语音转化为文字. 在日常中,语音识别,车载导航.语音输入等,虽然不一定准确,但用途广泛. 这里就介绍下谷歌原生的语音识别与百度的语音识别 谷歌语音识别 谷歌语音 ...
- python通过调用百度api实现语音识别(超详细)
python通过调用百度api实现语音识别(超详细) 2021.04.18:该文章是在18年,初学Python时写的,所以功能仅限于当时可用,至于现在(貌似依然可用)和以后就不确定了.完整的demo也 ...
最新文章
- Activiti——管理流程定义(四)
- 年度盘点!必看AI顶会论文、Github高星项目大合集(附链接)
- R语言Kmeans聚类、抽取聚类簇:fpc包clusterboot函数通过bootstrap重采样的方法评估Kmeans聚类的稳定性、fpc包的kmeansruns函数通过CH准则和ASW获取最优K值
- NeurIPS 2020 | 微软亚洲研究院论文摘录之强化学习GAN篇
- 王者归来:分布式调度解决方案 ElasticJob 重启!
- python文件输出-python文件流
- WIN8、WIN7访问Windows Server 2003服务器的数据库速度很慢、远程速度很慢的解决方法...
- MATLAB从入门到精通-Matlab R2020b新功能 | 子标题和标题/标签对齐功能!
- C语言中声明和定义的区别
- 2019年第十届蓝桥杯 - 省赛 - C/C++大学C组 - D. 质数
- Mysql执行计划含义,mysql执行计划介绍
- jquery ajax php中 css样式不显示,Chrome浏览器在Ajax同步调用之前不会显示Jquery的动态css Propery更改...
- 【资源下载】512页IBM沃森研究员Charu最新2018著作《神经网络与深度学习》(附下载链接)
- 【干货】一张蓝图九大行动领域,实现AI赋能的企业转型-IBM.pdf(附下载链接)...
- [转]关于computer vision的会议及vision guys
- 正向代理、透明代理、反向代理的理解示意图
- 《Java从入门到精通》(第六版)配套资源分享
- AD19快速制作多管脚元件符号
- 别了,Easy微博!
- 火星编年史_雷.布拉德伯里