Visenze API
来源:互联网 发布:2016热门网络暴力事例 编辑:程序博客网 时间:2024/06/05 22:45
Visenze API学习
Visenze概述
Visenze是新加坡国立大学的一个孵化项目,主要用于提供图片检索识别方案。一般来说,搭建一个CBIR系统大体需要以下几个关键技术:
- 图片数据库的构建和管理
- 图片检索算法研究,包括特征提取、匹配及索引等算法
- 服务器搭建和维护,与客户机进行交互(Visenze用到了Http和Json协议)
对于一个中小型公司而言,搭建这样一个系统是需要很大的精力和财力的,特别是在图片检索研究方面,很多公司并不具备相关的技术积累。而Visenze提供了一个完整的解决方案,用户只需将自己的图片数据以csv文件的方式上传至Visenze,调用Visenze提供的API即可实现整个图片检索过程。因此,用户无需再关注图片检索的技术细节,可以把工作重心转移到UI设计及其他功能实现上来。当然,个人认为,当公司发展到一定程度的时候,还是要把这些技术掌握到自己手里比较好。
Visenze允许用户为图片添加各种标签(如价钱,来源等等),从这点看还是具有很大的应用价值的。上传格式见下图(除im_name, im_url必须有外,其他标签可任意增删):
最近准备仿照Visenze搭建一个基于Android的图片检索系统,作为小白,但求多学到点技术。本文先翻译Visenze API Doc, 目的是对其通信协议,数据交互有一个整体认识,便于后续深入研究。
由于Visenze的服务器源码是非开源的,所以后端代码还是需要自己编写的,希望能写出来吧!
一、API概述
1.1 介绍
ViSearch是Visenze的图片检索API,用以提供准确、可靠及可扩展的图片检索。ViSearch API能够使开发者有效地索引并完成图片检索功能。Visenze提供了各种不同语言的SDK,可以方便的应用于Web和移动终端。
1.2 SDK下载
SDK下载地址:
- Java SDK
- Python SDK
- PHP SDK
- IOS SDK
- Android SDK
当然,也可以访问其JavaScript,IOS和Andorid版上手指南,后续我将重点研究它的Android SDK。
1.3 认证
Visenze为每个ViSearch应用分配了一个唯一的 access key 和 access key。这个密钥对用于认证每个API调用。
Visearch有两个API调用机制。第一个方法是HTTP基本认证(HTTP Basic Auth)——aceess key 和 secret key经过base64编码后,附加在请求头中。这种方法使用简单,但仅仅适用于从后台系统调用API(可能是因为安全问题,前端采用这种方式容易被劫持)。第二种方法是基于签名的认证(signature based authentication)——密钥对用于生成一个数字签名并附加在request URL上。这种方法对于前端和后端调用都较安全。
1.3.1 HTTP Basic Auth
这种认证方式就是标准的HTTP Basic Auth。这里,access key用作用户名,secret key用作认证密码。
在HTTP中,基本认证是一种用来允许Web浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。
在发送之前是以用户名追加一个冒号然后串接上口令,并将得出的结果字符串再用Base64算法编码。例如,提供的用户名是Aladdin、口令是open sesame,则拼接后的结果就是Aladdin:open sesame,然后再将其用Base64编码,得到QWxhZGRpbjpvcGVuIHNlc2FtZQ==。最终将Base64编码的字符串发送出去,由接收者解码得到一个由冒号分隔的用户名和口令的字符串。
虽然对用户名和口令的Base64算法编码结果很难用肉眼识别解码,但它仍可以极为轻松地被计算机所解码,就像其容易编码一样。编码这一步骤的目的并不是安全与隐私,而是为将用户名和口令中的不兼容的字符转换为均与HTTP协议兼容的字符集。
1.3.2 Signature Based Authentication
这种认证方法需要生成一个签名,且对于每次请求只能使用一次。
1.串联成以下字段: secret_key + nonce + date
- secret_key: app的secret key;
- nonce: 一个随机的唯一的字符串,至少8个字符;
- date: 发出请求的UNIX时间戳(以秒为单位),必须保证在做出请求的10分钟内。
2.生成上述串联字符串的HMAC-SHA1,并使用secret key作为HMAC-SHA1的加密密钥。
3.将以下参数附加到HTTP请求中:
- access_key = your_access_key
- nonce = your_generated_nonce
- date = unix_timestamp
- sig = hnmac_sha1_signature
1.4 API 响应
ViSearch API为所有请求返回一个JSON字符串对象,均包含以下属性:
1.5 错误码
一般错误信息:
1.5.1 Data API错误
Data API用于将自己的图片数据插入到数据库中。这个数据库是托管于Visenze的服务器上,开发者可以通过access key 和 secret key访问自己的数据库。并且,每个开发者可以创建不止一个数据库,它们对应于不同的access key 和 secret key。
1.5.2 Search API错误
Search API提供了图片检索接口。
二、 DATA API
ViSearch Data APIs提供了管理图片集的接口。首先你需要准备好一系列的图片及其元数据,然后调用 Insert API,以增加或更新图片。你也可以通过 Insert Status API 来查询图片处理过程,以及处理过程中发生的错误。如果你需要移除图片,你可以调用 Remove API。
注意: 在插入数据前,请配置 [Metadata Fields]`(/setup/#Edit-Metadata-Schema)
2.1 插入图片
2.1.1 POST/insert
这个API用于插入或更新你的图片集数据。
请求参数
关于图片的请求参数必须遵守以下格式:
{key}[index]=value
这里 key 是 im_name, im_url, 或其他字段名; index 是从0开始的图片标号。
对于图片的参数有以下几点限制,这里涉及到了数据库知识,如key:
- 每幅图片的最大键数为32;
- im_name的最大长度是128;
- 每个键值的最大长度是5000;
- 每次调用插入的图片数最大为100;
- 图片的尺寸至少为100*100。为了更好的检索结果,建议尺寸超过800*800;
- 图片文件大小不能超过10MB;
- 支持的图片格式有:bmp, dib, jpeg, jpg, jpe, jp2, png, webp, pbm, pgm, ppm, sr, ras, tiff, tif, gif。
注意 如果你想更新一个已知的图片,没有必要再次插入所有的字段,只需要使用im_name和待更新的字段即可。
2.2 检查插入状态
2.2.1 GET/insert/status/{trans_id}
查询每一次插入事务的处理状态。你可以在每一次调用插入语句的响应中获取 trans_id。
请求参数
如果在插入事务中存在失败的图片,你可以通过以下参数对错误分页:
响应属性
2.3 移除图片
2.3.1 POST/remove
这个API用于从图片集中移除图片。移除过程需要5分钟。
请求参数
注意 建议每批次移除100张图片,以优化图片索引速度。(这个应该与Visenze的数据库管理有关吧)
三、 SEARCH API
ViSearch API提供三种图片查询API:
1. 索引查询
提供图片集中一张已存在图片的im_name,然后ViSearch服务器使用这张图片在图片集中进行检索。
2. 上传查询
提供张图片或一个可以访问的图片URL,然后ViSearch服务器使用上传的图片在图片集中检索。
对于每个上传的图片,ViSearch服务器将会返回一个唯一的im_id,后面可以通过这个id做上传检索而无需再次下载图片。
3. 颜色查询
提供一个十六进制的RGB颜色值,然后ViSearch服务器使用颜色在图片集中检索。
3.1 索引检索
3.1.1 GET/search
这个API用图片集中的一张已存在图片进行检索。
请求参数
3.2 上传检索
3.2.1 POST/uploadsearch
这个API通过上传一张图片或可访问的图片URL在图片集中检索。对于每个上传的图片,ViSearch服务器将会返回一个唯一的im_id,后面可以通过这个id做上传检索而无需再次下载图片。
对于请求和图片有以下几点限制:
- 请求的Content-Type必须是: multipart/from-data
- 图片尺寸至少为100*100
- 为了更好的检索结果,建议图片尺寸大于800*800
- 图片大小不超过10MB
请求参数
对于每个上传图片,服务器会返回一个唯一的im_id,可以利用这个id进一步减少,而无需再次下载图片。如果你需要使用一张图片进行多次上传检索,可以使用这种方法来节省流量和提高速度。例如,用不同box参数来检索同一幅图片。
注意 如果im_id和图片路径或url同时存在的话,im_id会被视为用于uploadsearch的图片。
3.3 Color Search
3.3.1 GET/colorsearch
请求参数
3.4 检索响应
ViSearch返回最多1000张最相近的检索结果。你可以通过分页参数来控制图片检索结果的分页情况。默认的页数是1,并且每页显示结果默认限制为10。
下表展示了响应Json的每个字段。所有Search API的响应属性是一样的。
四、 进阶参数
ViSearch API提供了更多有效的参数来进行进一步的配置:
- 可以使用detection参数进行自动物体识别
- 使用box参数设置图片检索区域
- 可以使用fl查询图片的其他字段(metadata),也可以通过fq来过滤图片
- 可以采用min_score作为检索阈值来过滤不相干结果
下表多这些优化参数进行了总结,并且这些参数适用于所有Search API。
4.1 自动目标识别
ViSearch **/uploadsearch**API现在可以检测出待查询图片中的模板。目前可以识别出各种服饰物体,包括Top, Dress, Bottom, Shoe, Bag, Watch, Furniture, Eyewear, Jewlery, Outerwear, Skirt 和 Indian Ethnic Wear。后续Visenze会继续添加其他物体识别功能。
若想检测所有支持的种类,设置参数如下:
detection=all
可以通过Box参数来限制图片检索区域[x1,y1,x2,y2]。如果box参数的高宽均为0,如”box”:[574,224,574,224],则将其视作一个点,并基于当前点进行目标检测。
你也可以通过设置detection={type}进行特定的目标识别。
4.2 选择框
如果你想检索的目标仅仅占用图片的一小部分,或者在同一张图片中存在其他不相干的图片,检索结果可能会出现错误。使用Box参数可以确定图片的检索区域,以提高准确率。box的坐标是根据上传的图片的原始尺寸确定的。
注意 如果box的坐标是不合法的(负数或超出原始图片),将检索整个图片。
4.3 过滤结果
基于字段过滤检索结果,fq参数可以用于过滤结果:
4.4 结果分数
ViSearch查询结果采用降序排列,也就是说,从高的分到低得分,从1.0到0.0。每幅图片的分数默认是不返回的。可以通过开启score参数来查询每幅图片的分数:
如果你想通过一个最小得分和最大得分来限制查询结果,可以设定score_min和score_max参数:
| Name | Type | Description |
| score_min | Float | 返回结果的最小得分。默认为0.0 |
| score_max | Float | 返回结果的最高得分。默认为1.0 |
4.5 查询字段
可以通过fl(field list)参数来查询字段:
如果想查询图片结果的全部字段,可以设定get_all_fl参数,并将它设置为true。
注意 只有string,int,和float数据类型可以被查询,text数据类型无法用于查询,只能用来过滤。
- Visenze API
- API
- api
- API
- API
- api
- API
- API
- API
- API
- API
- API
- API
- API
- API
- api
- api
- API
- 基于HBase的冠字号查询系统2--实现部分
- Log4j在开发环境和工作环境中的使用
- Java反射机制剖析(二)-功能以及举例
- 星期一到星期日的英文_缩写_读音_巧记方法
- 数据库语句
- Visenze API
- iOS学习- 15 Move tableview item - Todo App
- MySql存储引擎
- SurfaceView 的应用
- Mysql总结,超实用和详细(进阶篇)
- 关于2的问题
- inline在C++中做什么的?
- AndroidManifest.xml配置文件的介绍三:权限篇
- 响应式布局