我正在尝试使用Bing收集图像的类似图像。我有下面的代码片段,我正在向API端点提供一个insightsToken of 这幅图像。
import requests
import json
BASE_URI = "https://api.bing.microsoft.com/v7.0/images/visualsearch"
SUBSCRIPTION_KEY = ''
HEADERS = {'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY}
insightsToken = 'ccid_twIfDfmx*cp_BF680FB5127A96880FCA7D76CC402B60*mid_D6663701CA72F63CF255CBF7EB4998ED50CAABC8*simid_608045920540183139*thid_OIP.twIfDfmxxN4umi!_-sacdNAHaFo'
formData = '{"imageInfo":{"imageInsightsToken":"' + insightsToken + '", }, "knowledgeRequest":{"invokedSkills": ["SimilarImages"]}}'
file = {'knowledgeRequest': (None, formData)}
def main():
try:
response = requests.post(BASE_URI, headers=HEADERS, files=file)
response.raise_for_status()
print_json(response.json())
except Exception as ex:
raise ex
def print_json(obj):
"""Print the object as json"""
print(json.dumps(obj, sort_keys=True, indent=2, separators=(',', ': ')))看看bing.com/visualsearch为该图像显示的前几个图像。我试着上传图片和提供图片的链接。结果一致。

现在看一看通过API端点使用代码片段收集的前几幅图像。

由于某些原因,bing.com/visualsearch结果比Bing Visual要好得多且精确得多。我知道Bing有市场参数(基于IP,以及您的cookie和浏览历史)。然而,即使我试图在浏览器中更改IP和使用匿名模式,在使用bing.com/visualsearch时仍然得到相同的结果。我还尝试向API端点提供params = (('mkt', 'en-us')),但结果仍然几乎相同。所以我认为这个参数在很大程度上不会影响结果。所以我没有提供任何东西,因为我认为这使结果接近网络搜索。
但为什么结果会如此不同呢?Bing是使用一个API版本进行网络搜索,还是使用另一个版本用于云服务?
发布于 2022-02-26 05:43:26
Bing是使用一个API版本进行网络搜索,还是使用另一个版本用于云服务?
我不能代表微软的内部工作,但看来bing.com/visualsearch和您的代码的端点API不同。
若要确定从浏览器调用的端点,请在上传图像后,在图像搜索页面上打开firefox中的检查元素,然后重新加载。在“网络”选项卡中,您将看到许多请求。搜索 api ,对于我来说,会出现一个指向广告服务的指针,以及用于查找类似图像的api服务的端点。

microsoft视觉搜索使用的url是https://www.bing.com/images/api/custom/knowledge,而不是https://api.bing.microsoft.com/v7.0/images/visualsearch。
在同一个检查元素窗口中,您可以导航到网络选项卡中的 request 选项卡,并查看post请求。令人惊讶的是,浏览器使用的表单与代码完全兼容。我用自己的蔚蓝键将您的代码复制到我的机器上,并用浏览器表单替换了formData变量。你应该自己试一试,判断结果。然而,对我来说,结果仍然不太一样,尽管它们在客观上似乎更接近,浏览器和python结果之间有一些图像重叠。我的浏览器发送的表单如下:
{
"imageInfo":{
"imageInsightsToken":"bcid_Tq7w6Pw5It0DxQ*ccid_rvDo/Dki",
"source":"Gallery"
},
"knowledgeRequest":{
"invokedSkills":[
"ImageById",
"BestRepresentativeQuery",
"Offline",
"ObjectDetection",
"OCR",
"EntityLinkingFace",
"EntityLinkingDog",
"EntityLinkingAnimal",
"EntityLinkingPlant",
"EntityLinkingLandmark",
"EntityLinkingFood",
"EntityLinkingBook",
"SimilarProducts",
"SimilarImages",
"RelatedSearches",
"ShoppingSources",
"PagesIncluding",
"TextAds",
"ProductAds",
"SponsoredAds",
"Annotation",
"Recipes",
"Travel"
],
"invokedSkillsRequestData":{
"adsRequest":{
"textRequest":{
"mainlineAdsMaxCount":2
}
}
},
"index":1
}
}因此,除了相似的图像之外,该网页还调用了许多其他技能,包括对象检测和
总之,所使用的端点似乎不同,只有microsoft员工才能告诉您它们是否指向相同的内部api。然而,修改您在post请求中提交的表单,以匹配浏览器使用的内容,将给出与官方图像搜索网页类似的结果。
https://stackoverflow.com/questions/71213283
复制相似问题