利用百度API做图像识别(py3)(转)

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)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

代码很简单,就是把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())
 
 
  • 1
  • 2
  • 3

再把处理好的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'])
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

它会以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': '树'}]
 
 
  • 1

score:置信度
root:识别结果的上层标签,有部分钱币、动漫、烟酒等tag无上层标签
keyword:图片中的物体或场景名称

从返回结果上看识别是成功了,老虎,树都能识别出来。总的来说还算不错,api还有更多的功能我们都可以去尝试一下(文字识别等),使用方法都是跟本例差不多的。可以参考下百度的官方开发文档(https://ai.baidu.com/docs#/ImageClassify-API/top),不过感觉文档python部分写不是很全。。。。

第一次写博客,所以挑了个简单的。小小的功能适合刚入门python的朋友尝试下,至少先从会用开始。以后也会写怎么去真正的实现图片识别。抱歉本文许多地方没有写的很详细,比如怎么使用requests等等,这些比较基础的知识大家通过百度或看其它大佬的文章来学习。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值