当前位置: 首页 > news >正文

python class tynu()_调用百度地图API与语音API实现简易地图语音导航

注册成为百度开发者,申请百度API的应用秘钥

百度地图开放平台链接:http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5

百度AI开放平台链接:https://ai.baidu.com/

c6d79e18b47e9e51824d4c58710593b4.png

调用百度API

地图API:

轻量路径规划服务调用方法:http://api.map.baidu.com/directionlite/v1/walking?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的AK //GET请求

其中:origin代表起点的经纬度坐标,destination代表终点的经纬度坐标,ak是你申请的应用的AK码

语音API:

建立语音识别的python的SDK客户端AipSpeech:

首先需要安装百度AI的支持库:

pip install baidu-aip

参考代码如下:

from aip import AipSpeech

""" 你的 APPID AK SK """

APP_ID = '你的 App ID'

API_KEY = '你的 Api Key'

SECRET_KEY = '你的 Secret Key'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

python实现简单需求

调用百度地图地点检索服务获取任意位置的经纬度坐标

Getlnglat.py文件:

import json

from urllib.request import urlopen, quote

def getlnglat(address):

url = 'http://api.map.baidu.com/geocoder/v2/'

output = 'json'

ak = 'XbtjUyRm1jSCb1njXOmLxs8ibCN4I3v7' # 浏览器端密钥

address = quote(address) # 由于本文地址变量为中文,为防止乱码,先用quote进行编码

uri = url + '?' + 'address=' + address + '&output=' + output + '&ak=' + ak

req = urlopen(uri)

res = req.read().decode()

temp = json.loads(res)

lat = temp['result']['location']['lat']

lng = temp['result']['location']['lng']

return lat, lng

调用百度AI语音服务实现将文本转化为语音,输出为MP3文件

TextToMp3.py文件:

from aip import AipSpeech

def TTM(text):

APP_ID = '16170864'#引号之间填写之前在ai平台上获得的参数

API_KEY = 'SFERXsjoH7khGN30AGdbQiSG'#如上

SECRET_KEY = '5G1rdwEuNPbCTdtILWaTRl5mTyNUaPAL'#如上

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

result = client.synthesis(text, 'zh', 1, { 'vol': 8,'per':0,'spd':2 })

'''

固定值zh。语言选择,目前只有中英文混合模式,填写固定值zh

客户端类型选择,web端填写固定值1

spd语速,取值0-15,默认为5中语速(选填)

pit音调,取值0-15,默认为5中语调(选填)

vol音量,取值0-15,默认为5中音量(选填)

per发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声

'''

#识别正确返回语音二进制 错误则返回dict 参照下面错误码

if not isinstance(result, dict):

with open('test.mp3', 'wb') as f:

f.write(result)

简易地图语音导航的实现

使用python的pygame库实现MP3的播放:

pip install pygame

轻量路径规划返回字段部分描述:

详细描述请参考:http://lbsyun.baidu.com/index.php?title=webapi/directionlite-v1

fca0eb87c20e2416c01afb6f17bf386d.png

实现路段描述语音导航需要获取返回字段中的instruction字段,然后对其进行文本转语音

BaiDuRoute.py文件:

import json

import re

from urllib.request import urlopen

from Getlnglat import getlnglat

from TextToMp3 import TTM

from pygame import mixer

import time

#获取当前位置经纬度

A=getlnglat('重庆市沙坪坝欣阳广场越界影院')

#获取目的地经纬度

B=getlnglat('重庆市沙坪坝三峡广场地铁站')

#调用api的url

ak='XbtjUyRm1jSCb1njXOmLxs8ibCN4I3v7'

u1='http://api.map.baidu.com/directionlite/v1/walking?'

origin='origin='+str(A[0])+','+str(A[1])

destination='&destination='+str(B[0])+','+str(B[1])

AK='&ak='+ak

url=u1+origin+destination+AK

b = urlopen(url)

c=b.read()

result = json.loads(c)

#对instruction路段描述文本进行提取

S1=result['result']['routes'][0]

text1=S1['steps'][0]['instruction']

text=re.sub('[<>/b]','',text1)

#输出方向

print(text)

#执行文本转语音

TTM(text)

#播放MP3

mixer.init()

track=mixer.music.load('test.mp3')

mixer.music.play()

time.sleep(10)

mixer.music.stop()

mixer.quit()

相关文章:

  • 小d课堂mysql_mysql之explain详解(分析索引的最佳使用)
  • LINUX 批量删除文件的几种方法
  • mysql 模糊 不包括_Oracle 模糊查询中不包括某字符串的实现方式
  • star 序列比对2020-12-25
  • java线程模式_Java多线程基础(十一)——Future模式
  • RNA-seq实战--2小时
  • java什么是数组_JAVA中数组是什么?
  • ChIP-seq数据处理流程(附赠长达5小时的视频指导)
  • java录制视频_java 屏幕录制
  • java 双线性插值算法_双线性插值
  • 查看当前linux系统位数
  • java 获取存储过程异常_oracle存储过程获取异常信息码和异常信息
  • java char utf 16_为什么Java char使用UTF-16?
  • ls用法大全
  • mv移动文件夹
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【笔记】你不知道的JS读书笔记——Promise
  • ➹使用webpack配置多页面应用(MPA)
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES6 学习笔记(一)let,const和解构赋值
  • ES6系列(二)变量的解构赋值
  • IDEA常用插件整理
  • JS字符串转数字方法总结
  • php的插入排序,通过双层for循环
  • Python 反序列化安全问题(二)
  • Python_OOP
  • sessionStorage和localStorage
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 从零开始在ubuntu上搭建node开发环境
  • 分布式任务队列Celery
  • 分享一份非常强势的Android面试题
  • 离散点最小(凸)包围边界查找
  • 小程序开发中的那些坑
  • ​决定德拉瓦州地区版图的关键历史事件
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #DBA杂记1
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #stm32整理(一)flash读写
  • (1)(1.13) SiK无线电高级配置(六)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二)PySpark3:SparkSQL编程
  • (学习日记)2024.01.09
  • (转)JAVA中的堆栈
  • **python多态
  • .Net Core和.Net Standard直观理解
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [ Linux Audio 篇 ] 音频开发入门基础知识