是否有用于反向搜索的 API?如果不是,我如何从 android 应用程序发出反向图像搜索请求?
6 回答
我已经实现了“通过 HTTP 使用 Google 图片搜索反向搜索 JSON REST API”。
使用甚至在服务器上运行 javascript 的“httpunit”框架实际上非常简单。这是执行 Google 图片搜索请求所必需的
https://images.google.com/searchbyimage?image_url=
它工作得很好。我们已将其集成到一个应用程序中
- 只是简单地拍了一张照片,
- 缩小它,
- 上传到公共服务器,
- 使用这个网址
- 调用 REST API + 获取 JSON 响应(见下文)
- 显示文本和类似图像
服务器
- 使用 Internet-accessible-URL 访问 Google 图片服务器(通过 HTTP)
- 运行https://images.google.com/searchbyimage?image_url=image编码的 url
- 获得响应,在服务器上运行来自 Google 的 javascript
- 搜索特定的 html 标记、类或 ID
- 创建 JSON 响应
您从 Google 获得
- “标签/标题”,
- 包含所有元数据的相似图像(文本片段、html 片段、原始 URL、缩略图 URL、大小、尺寸……)
使用这些信息,您可以轻松地显示检测到的标签、类似的在线图像及其文本。
但是:不幸的是谷歌的机器检测非常好,找到了我的REST-API并关闭了它。
所以现在 - 谷歌没有为此宣布一个 API,即使它包含在现有的谷歌应用程序中 - 非常非常难过
您可能会发现以下项目很有用。它本质上是一个刮板服务器,您将图像的 url 发送到(例如使用 curl),它返回一个包含各种有用花絮的 json 数组。
反向图像搜索 api 已弃用: https ://developers.google.com/image-search/?hl=it
新的搜索 api 可以进行图像搜索查询
https://developers.google.com/custom-search/v1/overview?hl=it
你可以试试这个名为Camfind 的反向图像搜索 API
下面是来自 Camfind API 的图像请求输入和图像响应输出的示例
图片请求
图像响应
{
"name": "crystal geyser bottle",
"status": "completed"
}
Google 有一个很棒的 API,称为Google Vision API - 网络检测。它比自定义搜索更好。使用批处理请求反向搜索图像的示例 Kotlin 代码
val feat = Feature.newBuilder().setType(Type.WEB_DETECTION).build()!!
val settings = ImageAnnotatorSettings.newBuilder().setCredentialsProvider(provider.get()).build()
val req = images.stream()
.map { Image.newBuilder().setSource(ImageSource.newBuilder().setImageUri(it)).build() }
.map { AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(it).build() }
.toList()
val res = ImageAnnotatorClient.create(settings)
.use { c -> req.chunked(GOOGLE_BATCH_LIMIT).map { c.batchAnnotateImages(it).responsesList }.flatten() }
.map { it.webDetection.fullMatchingImagesCount }
不幸的是,谷歌不提供反向图像搜索 API。我发现提供的唯一服务是 TinEye(请参阅https://api.tineye.com)。我听说他们的数据库中没有那么多图像,但它似乎适用于大多数用途。但它不是免费的,而且实际上它对于 API 来说很昂贵。目前,他们对每次搜索收取 0.04 美元。