作者介绍
严松,男,西安工程大学电子信息学院,2022级研究生
研究方向:机器人抓取检测
电子邮件:2448052777@qq.com
王泽宇,男,西安工程大学电子信息学院,2022级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:2717124491@qq.com
一. 百度API实现logo商标识别接口介绍
该请求用于检测和识别图片中的台标、品牌商标等logo信息。即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中logo的名称、位置和置信度。
使用时,可直接调用logo识别-检索接口,支持识别超过2万类logo名称;当效果欠佳时,可以建立子库(在控制台创建应用并申请建库)并通过调用logo入口接口完成自定义logo入库,再调用logo识别-检索接口,选择在自定义logo库内检索,提高识别效果。
二. 调用百度API实现logo商标识别流程
1. 注册百度智能云并创建应用
百度智能云链接:(https://cloud.baidu.com/)
注册好之后点击控制台,先领取免费资源,然后点击创建应用,创建完应用之后可以查看应用,并且能看到API Key和Secret Key。
图一 创建应用
图二 查看应用
2.Python代码进行调试
先来看一下我们调用API的请求参数和返回说明,请求参数中包含三个参数,分别是:image,url和custom_lib,输入方式为image和url二选一,如果用户需要创建自己的子库,则custom_lib设置为true,否则为false。返回参数主要包括:问题定位(log_id),返回结果数量(result_num),返回的结果(result),名称(name),置信度(probability)等等。
图三 请求参数
图四 返回说明
下面是完整实验代码:
import requests
API_KEY = ""//查看自己的API_KEY
SECRET_KEY = ""//查看自己的SECRET_KEY
def main():
url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/logo?access_token=" + get_access_token()
payload = {''}//自己的logo路径
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
def get_access_token():
"""
使用 AK,SK 生成鉴权签名(Access Token)
:return: access_token,或是None(如果错误)
"""
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
return str(requests.post(url, params=params).json().get("access_token"))
if __name__ == '__main__':
main()
三. 在线调试:
在调试栏里输入自己申请的client_id,client_secret以及自己image的路径,然后进行调试,可以看到调试结果。
图5 调试结果
返回示例:
1.1 比较杂乱的logo调试结果
图6 杂乱logo
返回结果:可以看到一共返回了5组结果,其中有一组"斑马办公"是不符合预期的,证明识别的logo尽量不要有复杂的背景。
{
"result_num": 5,
"result": [
{
"name": "可口可乐",
"type": 1,
"probability": 0.95749333630437,
"location": {
"height": 123,
"left": 44,
"top": 22,
"width": 313
}
},
{
"name": "可口可乐",
"type": 0,
"probability": 0.97189044952393,
"location": {
"height": 123,
"left": 44,
"top": 22,
"width": 313
}
},
{
"name": "斑马办公",
"type": 1,
"probability": 0.33733308532021,
"location": {
"height": 57,
"left": 118,
"top": 127,
"width": 204
}
},
{
"name": "可口可乐",
"type": 0,
"probability": 0.83195910211337,
"location": {
"height": 226,
"left": 36,
"top": 0,
"width": 321
}
},
{
"name": "可口可乐",
"type": 1,
"probability": 0.32056304758245,
"location": {
"height": 226,
"left": 36,
"top": 0,
"width": 321
}
}
],
"log_id": 1657261019508606700
}
1.2 完整紧致包围盒图像logo识别结果
图7 完整紧致包围盒图像logo
返回结果:可以看到一共返回了4组结果,且都符合预期
{
"result_num": 4,
"result": [
{
"name": "合生元",
"type": 1,
"probability": 0.96611329092496,
"location": {
"height": 34,
"top": 7,
"width": 121,
"left": 36
}
},
{
"name": "合生元",
"type": 0,
"probability": 0.98904836588892,
"location": {
"height": 34,
"top": 7,
"width": 121,
"left": 36
}
},
{
"name": "合生元",
"type": 1,
"probability": 0.5572005059984,
"location": {
"height": 32,
"top": 6,
"width": 64,
"left": 81
}
},
{
"name": "合生元",
"type": 1,
"probability": 0.39284993518483,
"location": {
"height": 36,
"top": 6,
"width": 63,
"left": 61
}
}
],
"log_id": 1657263068743726800
}
四. 总结
(1)选择logo图片进行输入的时候,尽量选择logo清晰明了的,紧致包围的,这样识别出来的结果准确,置信度高;
(2)如果用户需要创建自己的子库,在裁剪图像logo的时候,尽量分块裁剪,例如,中国工商银行的logo一般都是英文+中文+小标,在裁剪的时候不要三个放在一起裁剪,而是要三个单独进行裁剪放在子库当中,这样识别的结果会更准确。