【Python&目标识别】调用百度智能云API实现植被识别
百度智能云于2015年正式对外开放运营,以“云智一体”为核心赋能千行百业,致力于为企业和开发者提供全球领先的人工智能、大数据和云计算服务及易用的开发工具。凭借先进的技术和丰富的解决方案,全面赋能各行业,加速产业智能化。百度智能云为金融、制造、能源、城市、医疗、媒体等众多领域的领军企业提供服务,其中包含大量的API接口以及非常成熟的技术指导,适合各个行业的应用开发。(百度百科)
由于作者最近在做植被识别方面的项目,所以将项目中使用过的代码和经验分享出来,与大家一起交流学习。
一、获取token
1.首先要去百度智能云的官网,创建应用。获取需要的API Key和Secret Key。
在官网中找到产品中的图像技术的植物识别,跳转页面后点击“立即使用”,之后在“应用列表”中创建应用。创建完成后就可以看到应用的API Key和Secret Key,这两个用于Token的获取。
2.Python编写代码获取Token
有了API Key和Secret Key后就可以编写Python代码,实现Token的获取了。官方指导文档中也有相应的方法,我这里直接展示我的代码,代码中有注释。
def Get_Token(client_id, client_secret):
"""
:param client_id: 输入API Key
:param client_secret: 输入Secret Key
:return: 返回token
"""
print("正在获取Token......")
try:
url_token = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials' \
f'&client_id={client_id}&client_secret={client_secret}'
# 请求地址
respond = requests.post(url_token)
# 请求方式
token = respond.json()["access_token"] # result = response.json()
return token
except Exception as e:
print("Error:获取Token失败!")
print(e)
二、图片转码
由于官方文档中请求图片的参数只能是URL或是Base64编码的图片,所以这里需要对本地图片进行转码。
Python代码:
f = open('G:/1.jpg', 'rb')
# 图片路径按照自己的来
img = base64.b64encode(fn.read())
# 将图片转至base64编码
params = {"image": img}
# 将图片转为对象
三、图片识别
前面的准备工作完成后就可以调用百度智能云的接口进行图片中植物的识别了。接口返回的数据中包括多个对象,对应不同的置信度(如图片中植物是韭菜的置信度是0.9,小麦的置信度是0.1,说明植物大概率是韭菜)。官方指导文件中也有相应的案例,可以去参考一下。
Python代码:
try:
headers = {'content-type': 'application/x-www-form-urlencoded'}
url_Identify_image = f'https://aip.baidubce.com/rest/2.0/image-classify/v1/plant?access_token={token}'
respond = requests.post(url_Identify_image, data=params, headers=headers)
data = respond.json()
if respond:
for i in range(0, len(data['result'])):
# 遍历植物的所有可能性
print("置信度:%s,%s" % (data['result'][i]['score'], data['result'][i]['name']))
return data
else:
print("Error:请求响应失败!")
except Exception as e:
print("Error:识别图片失败!")
print(e)
四、代码组合
上面是分步的代码,接下来展示完整代码。运行时只需要修改API Key、Secret Key和图片路径即可。
import requests
import base64
# 图片转码模块
import tkinter.filedialog
# 创建窗口打开图片模块
def Get_Token(client_id, client_secret):
"""
:param client_id: 输入API Key
:param client_secret: 输入Secret Key
:return: 返回token
"""
print("正在获取Token......")
try:
url_token = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials' \
f'&client_id={client_id}&client_secret={client_secret}'
# 请求地址
respond = requests.post(url_token)
# 请求方式
token = respond.json()["access_token"] # result = response.json()
return token
except Exception as e:
print("Error:获取Token失败!")
print(e)
def Identify_image(token):
"""
:param token: 输入token
:return: 返回植被信息
"""
f = open('G:/1.jpg', 'rb')
img = base64.b64encode(f.read())
# 将图片转至base64编码
params = {"image": img}
# 将图片转为对象
print("开始识别图片......")
try:
headers = {'content-type': 'application/x-www-form-urlencoded'}
url_Identify_image = f'https://aip.baidubce.com/rest/2.0/image-classify/v1/plant?access_token={token}'
respond = requests.post(url_Identify_image, data=params, headers=headers)
data = respond.json()
if respond:
for i in range(0, len(data['result'])):
print("置信度:%s,%s" % (data['result'][i]['score'], data['result'][i]['name']))
return data
else:
print("Error:请求响应失败!")
except Exception as e:
print("Error:识别图片失败!")
print(e)
if __name__ == "__main__":
loginName = "###"
# API Key,自己获取
password = "###"
# Secret Key,自己获取
token = Get_Token(loginName, password)
print("Token已获取成功......")
print()
Identify_image(token)
print("识别成功")
本人才疏学浅,代码有不足的地方希望大家多多包涵。如果代码有问题或者有不懂的地方可以随时留言,一起学习交流Python方面的知识。
本文章仅作为学习交流使用,API为百度智能云开放使用的,如有侵权请联系作者删除!