首先来看一下识别的效果:这里需要完整代码以及SDK的请点击此处下载:百度AI图像主体识别Demo
首先需要注册百度账号并且创建对应的应用,这里具体方法如图:
访问:http://ai.baidu.com/ 点击控制台
登录后创建应用:
此处注意:图像识别中的各项功能共用的是一个SDK包,只是不同功能实现的时候使用的函数以及返回参数不同,点击完创建应用后就可以生成三个我们后期识别过程中必须使用的参数:AppID,API Key和secert key,这里我们可以点击查看应用详情来获取
至此,前期的准备工作就完成了,这时我们通过Pip或者官网直接下载SDK包,pip下载指令为:
这里支持Python版本:2.7.+ ,3.+
如果已安装pip,执行pip install baidu-aip即可。
如果已安装setuptools,执行python setup.py install即可。
接下来,在下载的SDK文档下新建Python文件,当然你也可以使用导入包的模式:
然后创建一个AipImageClassify(亦可以简单的理解为一个和百度的一个连接),这里代码为:
from aip import AipImageClassify
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)
以上的三个参数即为我们开始调用的时候所获得的三个值,这里需要填入操作,即可,紧接着调用我们需要使用的具体函数就可以了(比如图像主体识别功能)
""" 读取图片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
image = get_file_content('example.jpg')
""" 调用图像主体检测 """
client.objectDetect(image);
""" 如果有可选参数 """
options = {}
options["with_face"] = 0
""" 带参数调用图像主体检测 """
client.objectDetect(image, options)
修改图片路径后我们就可以实现图像主体的识别功能了,但是百度这个SDK比较麻烦的就是他的返回值是随机排序的,有时是
{'log_id': 7346640957855264074, 'result': {'width': 382, 'height': 299, 'top': 50, 'left': 178}}
有时又是这样的:
{'result': {'height': 299, 'width': 382, 'left': 178, 'top': 50}, 'log_id': 2876165888495195498}
这时对于我们获取某个数值就带来了一定的麻烦,这里笔者采用一种字符串切割的方法来解决这一问题,解决完成后分别将,left,top,width和height三个数值保存到文件中(或者直接使用),这里附上完整的程序代码,如果你有需要也可以在文章的开头出下载整个示例Demo,填入您的AppID等信息后即可实现:
import json
from aip import AipImageClassify
""" 你的 APPID AK SK """
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
image = get_file_content('1.bmp')
""" 调用图像主体检测 """
client.objectDetect(image);
""" 如果有可选参数 """
options = {}
options["with_face"] = 0
""" 带参数调用图像主体检测 """
result=client.objectDetect(image, options)
print(result)
result_txt=json.dumps(result,ensure_ascii=False)
"""left切割写文件"""
left_cut = 'left'
left_position = result_txt.index(left_cut)
left_value=result_txt[left_position+7:left_position+13]
left_space_position=left_value.find(',')
left_value_compare=left_value[0:left_space_position]
left_sign_position=left_value_compare.find('}')
if left_sign_position == -1:
left_value = left_value[0:left_space_position]
else:
left_value = left_value[0:left_space_position-1]
file = open('left.ini', 'w') # 打开文件
file.write(left_value) # 写入
file.close() # 关闭文件
left_value='left:'+left_value
print(left_value)
"""width切割写文件"""
width_cut = 'width'
width_position = result_txt.index(width_cut)
width_value=result_txt[width_position+8:width_position+13]
width_space_position=width_value.find(',')
width_value_compare=width_value[0:width_space_position]
width_sign_position=width_value_compare.find('}')
if width_sign_position == -1:
width_value = width_value[0:width_space_position]
else:
width_value = width_value[0:width_space_position-1]
file = open('width.ini', 'w') # 打开文件
file.write(width_value) # 写入
file.close() # 关闭文件
width_value='width:'+width_value
print(width_value)
"""top切割写文件"""
top_cut = 'top'
top_position = result_txt.index(top_cut)
top_value=result_txt[top_position+6:top_position+13]
top_space_position=top_value.find(',')
top_value_compare=top_value[0:top_space_position]
top_sign_position=top_value_compare.find('}')
if top_sign_position == -1:
top_value = top_value[0:top_space_position]
else:
top_value = top_value[0:top_space_position-1]
file = open('top.ini', 'w') # 打开文件
file.write(top_value) # 写入
file.close() # 关闭文件
top_value='top:'+top_value
print(top_value)
"""height切割写文件"""
height_cut = 'height'
height_position = result_txt.index(height_cut)
height_value=result_txt[height_position+9:height_position+13]
height_space_position=height_value.find(',')
height_value_compare=height_value[0:height_space_position]
height_sign_position=height_value_compare.find('}')
if height_sign_position == -1:
height_value = height_value[0:height_space_position]
else:
height_value = height_value[0:height_space_position-1]
file = open('height.ini', 'w') # 打开文件
file.write(height_value) # 写入
file.close() # 关闭文件
height_value='height:'+height_value
print(height_value)
file = open('test.txt','w') # 打开文件
file.write(result_txt) # 写入
file.close() # 关闭文件