mark一下,感谢作者分享!
https://blog.csdn.net/qq_40484582/article/details/82054009
第一次在CSND上发博客。过去都是上CSND参考大佬们的文章,但最近想着借CSND这个平台把之前所做的项目都总结一遍发上来。一来可以方便自己以后看,二来可以给到有需要的人帮助。
那么废话不多,进入正题:
第一步:
首先进入到百度AI的官网,里面有我们需要的API
附上链接:(http://ai.baidu.com/tech/imagerecognition)
(图一)点击“立即使用” —》登录你的百度账号—》(图二)点击“创建应用”—》填写应用名称,类型,接口选择再点击“立即创建”即可。
成功创建后的页面,默默把“API Key”和“Secret Key”复制下来,后面的调用需要用到。
第二步:
接下来就是代码调用部分了
要使用API,我们需要得到一个叫“access_token”的东西。它需要我们的“API Key”和“Secret Key”来获取。
from urllib import request
import ssl
import json
gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_' \
'type=client_credentials&client_id=你的Api Key&client_secret=你的Secret Key'
req = request.Request(host)
response = request.urlopen(req, context=gcontext).read().decode('UTF-8')
result = json.loads(response)
if (result):
print(result)
代码很简单,就是把Api Key和Secret Key提交给https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials。然后它就会把access_token返回给你,读取下来,然后因为是json格式,所以用json.load()转成字典,打印出来即可。得到的结果如下图:
字典内容很多,但我们只要access_token就好,默默把它复制下来。
第三步
得到access_token后我们就可以开始写我们的图片识别了。
当然,首先我们需要一张图片,这里我随便百度了一张
然后我们需要让程序读取图片,并将其用base64编码。为什么要编码呢,百度要求的的啊
下面是关于图片处理的要求,要符合要求api才能识别。
不管三七二十一照做就是了,下面是处理的代码:
import base64
f = open('tight.jpg', 'rb')
img = base64.b64encode(f.read())
再把处理好的img和刚获得的access_token扔进一个字典里面,然后把字典提交给网址(https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general),就大功告成了(下面代码)。
import requests
host = 'https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general'
headers={
'Content-Type':'application/x-www-form-urlencoded'
}
access_token= '获取到的sccess_token'
host=host+'?access_token='+access_token
data={}
data['access_token']=access_token
data['image'] =img
res = requests.post(url=host,headers=headers,data=data)
req=res.json()
print(req['result'])
它会以json格式返回一个分析结果给我们,将结果转成字典,输出如下图(如果图片是本例的话):
[{'score': 0.34685, 'root': '动物-哺乳动物', 'keyword': '老虎'}, {'score': 0.246907, 'root': '动物-哺乳动物', 'keyword': '印度支那虎'}, {'score': 0.164234, 'root': '动物-圈养', 'keyword': '野生动物园'}, {'score': 0.114302, 'root': '动物-其他', 'keyword': '鸟类'}, {'score': 0.00901, 'root': '植物-树', 'keyword': '树'}]
score:置信度
root:识别结果的上层标签,有部分钱币、动漫、烟酒等tag无上层标签
keyword:图片中的物体或场景名称
从返回结果上看识别是成功了,老虎,树都能识别出来。总的来说还算不错,api还有更多的功能我们都可以去尝试一下(文字识别等),使用方法都是跟本例差不多的。可以参考下百度的官方开发文档(https://ai.baidu.com/docs#/ImageClassify-API/top),不过感觉文档python部分写不是很全。。。。
第一次写博客,所以挑了个简单的。小小的功能适合刚入门python的朋友尝试下,至少先从会用开始。以后也会写怎么去真正的实现图片识别。抱歉本文许多地方没有写的很详细,比如怎么使用requests等等,这些比较基础的知识大家通过百度或看其它大佬的文章来学习。