- 百度Web服务API的Geocoding API
Geocoding API用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以发送请求且接受JSON、XML的返回数据。可用于对运营数据中的地址相关信息进行解析,从而获取经纬度信息,这些信息可用于进一步基于地理位置进行解析、展示和分析。
使用前准备:
- 获取百度账户
- 注册成为百度开放平台开发者
- 注册完成后,邮件激活账户
- 点击“申请密钥”进入创建应用界面,在应用创建中,使用Geocoding API v2,其他服务根据实际需求勾选。IP白名单区域不做限制,则置为“0.0.0.0/0”。
- 获得AK密钥。
- JSON格式数据需要用requests库,pip3 install requests 安装
代码:
import requests
add = ‘北京市中关村软件园’ # 定义地址
ak = ‘自己申请的ak密钥’ # 创建访问应用时获得的AK
url = 'http://api.map.baidu.com/geocoder/v2/?address=%s&output=json&ak=%s' # 请求URL
res = requests.get(url % (add, ak)) # 获得返回请求
add_info = res.text # 返回文本信息
print (add_info) # 打印输出
打印结果:
status:返回结果状态,成功则返回0
location:经纬度坐标,lat是纬度,lng是经度
precise:未知的附加信息,决定是否精确查找,1为精确查找,0为不精确查找
confidence:可信度,描述打点准确性
level:百度定义的地址类型
‘’’
# json处理
import json # 导入库
add_json = json.loads(add_info) # 加载Json字符串对象
lat_lng = add_json['result']['location'] # 获得经纬度信息
print (lat_lng) # 打印输出对应key的value
- 获取并解析XML数据
Geocoding API 也提供XML格式的返回数据。可以用python默认和第三方常用库包括xml/libxml2/lxml/xpath等。我们用python自带的XML进行处理。
代码:
#获取并解析xml数据
import requests # 导入库
add = '北京市中关村软件园' # 定义地址
ak = '自己申请的ak密钥' # 创建访问应用时获得的AK
url = 'http://api.map.baidu.com/geocoder/v2/?address=%s&output=xml&ak=%s' # 请求URL
res = requests.get(url % (add, ak)) # 获得返回请求
add_info = res.text # 返回文本信息
print (add_info) # 打印输出
# json处理 python3 默认用utf8编码,就不转换了
import os
import sys
import importlib
importlib.reload(sys)
import xml.etree.ElementTree as Etree # 导入xml中的ElementTree方法
root = Etree.fromstring(add_info) # 获得xml的根节点
lng = root[1][0][0].text # 获得lng数据
lat = root[1][0][1].text # 获得lat数据
print ('lng: %s' % lng) # 格式化打印输出
print ('lat: %s' % lat) # 格式化打印输出
- 从网页中爬取运营数据
从网页中爬取数据,可以使用python内置标准库或者第三方库,如urllib、urllib2、httplib、httplib2、requests等,这里用requests获取网页数据:
代码:
import requests # 导入库
url = 'http://www.baidu.com/' # 定义要抓取的网页地址
res = requests.get(url) # 获得返回请求
html = res.text # 返回文本信息
print (html) # 打印输出网页源代码
- 获取非结构化文本数据
一般用文本打开读取方式获取,readlines相关函数即可,可看之前文章。
- 读取图像
常用两个库:PIL和Opencv。使用后者较好。
- PIL读取,新版安装pip3 install pillow
Python Imaging Library包含很多库,常用是Image,通过其中的open函数打开图像。
from PIL import Image #导入库
file = '1.jpg' #打开文件
img = Image.open(file,'r') #打开图像方式
img.show() #展示图像
img_gray = img.convert('L') #设置图像为灰度模式
img_gray.show() #展示图像
- 用Opencv读取图像
#!/usr/bin/python3
import cv2
file = '20200330212059.jpg'
img = cv2.imread(file) #读取图像
cv2.imshow('image',img) #展示图像
cv2.waitKey(0) #与现实参数配合使用
waitKey()方法是键盘绑定函数,参数为等待的毫秒数,如果为0,表示无限期等待知道键盘有输入。
除了使用OpenCV自带的图像展示方法之外,OpenCv还经常和Matplotlib配合展示图像。
读取视频数据
import cv2 # 导入库
cap = cv2.VideoCapture("tree.avi") # 获得视频对象
status = cap.isOpened() # 判断文件知否正确打开
if status: # 如果正确打开,则获得视频的属性信息
frame_width = cap.get(3) # 获得帧宽度
frame_height = cap.get(4) # 获得帧高度
frame_count = cap.get(7) # 获得总帧数
frame_fps = cap.get(5) # 获得帧速率
print ('frame width: ', frame_width) # 打印输出
print ('frame height: ', frame_height) # 打印输出
print ('frame count: ', frame_count) # 打印输出
print ('frame fps: ', frame_fps) # 打印输出
success, frame = cap.read() # 读取视频第一帧
while success: # 如果读取状态为True
cv2.imshow('vidoe frame', frame) # 展示帧图像
success, frame = cap.read() # 获取下一帧
k = cv2.waitKey(1000 // int(frame_fps)) # 每次帧播放延迟一定时间,同时等待输入指令
if k == 27: # 如果等待期间检测到按键ESC
break # 退出循环
cv2.destroyAllWindows() # 关闭所有窗口
cap.release() # 释放视频文件对象
cv2.VideoCapture(VIdeoCapture ID|filename|apiPreference)获取视频对象,返回一个对象实例, 参数
VIdeoCapture ID:必填,int类型,系统分配的设备对象的ID,默认 0;
filename:必填,字符串类型,包括:视频文件名称/序列图像/视频URL地址
apiPreference:int类型,后台使用API。
返回对象可以使用get(int)函数获取视频对象的图像属性。
视频对象用read()函数获取视频的一个帧对象frame,调用cv2.imshow()函数展示帧图像。快速展示帧图像,可以得到类似动画效果(一秒至少16帧)。
读取语音数据
import json # 用来转换JSON字符串
import base64 # 用来做语音文件的Base64编码
import requests # 用来发送服务器请求
# 获得token
API_Key = '自己申请应用的密钥' # 从申请应用的key信息中获得
Secret_Key = '应用的key获取' # 从申请应用的key信息中获得
token_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s" # 获得token的地址
res = requests.get(token_url % (API_Key, Secret_Key)) # 发送请求
res_text = res.text # 获得请求中的文字信息
token = json.loads(res_text)['access_token'] # 提取token信息
# 定义要发送的语音
voice_file = 'baidu_voice_test.pcm' # 要识别的语音文件
voice_fn = open(voice_file, 'rb') # 以二进制的方式打开文件
org_voice_data = voice_fn.read() # 读取文件内容
org_voice_len = len(org_voice_data) # 获得文件长度
base64_voice_data = base64.b64encode(org_voice_data) # 将语音内容转换为base64编码格式
# 发送信息
# 定义要发送的数据主体信息
from MyEncoder import MyEncoder
headers = {'content-type': 'application/json'} # 定义header信息
payload = {
"format": "pcm", # 以具体要识别的语音扩展名为准
"rate": 8000, # 支持8000或16000两种采样率
"channel": 1, # 固定值,单声道
"token": token, # 上述获取的token
"cuid": "B8-76-3F-41-3E-2B", # 本机的MAC地址或设备唯一识别标志
"len": org_voice_len, # 上述获取的原始文件内容长度
"speech": base64_voice_data # 转码后的语音数据
}
data = json.dumps(payload,cls=MyEncoder,indent=4) # 将数据转换为JSON格式
vop_url = 'http://vop.baidu.com/server_api' # 语音识别的API
voice_res = requests.post(vop_url, data=data, headers=headers) # 发送语音识别请求
api_data = voice_res.text # 获得语音识别文字返回结果
text_data = json.loads(api_data)['result']
print (api_data) # 打印输出整体返回结果
print (text_data) # 打印输出语音识别的文字
四部分:
1、导入需要的库信息。
2、获取百度语音识别API的token信息。
3、获取和处理语音文件数据。
4、发送请求获取语音识别的结果。
注意,语音音频源是有要求的,支持的格式、采样率、位深、声道等。
语音数据的应用方向:
1、语音转文字;2、语音识别;3、语音语义理解;4、语音合成;5、应用集成。