Python-Microsoft认知验证API(params)
我正在尝试将Microsoft认知验证API与python 2.7结合使用: 代码是:Python-Microsoft认知验证API(params),python,microsoft-cognitive,Python,Microsoft Cognitive,我正在尝试将Microsoft认知验证API与python 2.7结合使用: 代码是: import httplib, urllib, base64 headers = { # Request headers 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': 'my key', } params = '{\'faceId1\': \'URL.jpg\',\'faceId2\': \'URL
import httplib, urllib, base64
headers = {
# Request headers
'Content-Type': 'application/json',
'Ocp-Apim-Subscription-Key': 'my key',
}
params = '{\'faceId1\': \'URL.jpg\',\'faceId2\': \'URL.jpg.jpg\'}'
try:
conn = httplib.HTTPSConnection('api.projectoxford.ai')
conn.request("POST", "/face/v1.0/verify?%s" % params, "{body}", headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
我试着让conn.request热线这样:
conn.request("POST", "/face/v1.0/verify?%s" % params, "", headers)
错误是:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request</h2>
<hr><p>HTTP Error 400. The request is badly formed.</p>
</BODY></HTML>
错误的请求
错误的请求
HTTP错误400。请求的格式不正确
我一直试图遵循以下代码并使其正常工作:
然而,我就是不能让这一个工作。我猜params或body参数有问题。
非常感谢您的任何帮助。Dawid的评论似乎应该修复它(双引号),请在python 2.7中尝试以下内容:
import requests
url = "https://api.projectoxford.ai/face/v1.0/verify"
payload = "{\n \"faceId1\":\"A Face ID\",\n \"faceId2\":\"A Face ID\"\n}"
headers = {
'ocp-apim-subscription-key': "KEY_HERE",
'content-type': "application/json"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
对于python 3:
import http.client
conn = http.client.HTTPSConnection("api.projectoxford.ai")
payload = "{\n\"faceId1\": \"A Face ID\",\n\"faceId2\": \"Another Face ID\"\n}"
headers = {
'ocp-apim-subscription-key': "keyHere",
'content-type': "application/json"
}
conn.request("POST", "/face/v1.0/verify", payload, headers)
res = conn.getresponse()
data = res.read()
你可以参考
显然,您不理解代码“{body}”
意味着您应该将其替换为包含请求url的正文,正如网站上所说:
因此,您可以通过以下方式使用此api:
body = {
"url": "http://example.com/1.jpg"
}
…………
conn = httplib.HTTPSConnection('api.projectoxford.ai')
conn.request("POST", "/face/v1.0/detect?%s" % params, str(body), headers)
您的脚本有几个问题:
result=CF.face.verify(faceid1,另一个\u face\u id=faceid2)
,而不用担心设置正确的POST请求
您可能需要使用pip
安装cognitive\u-face
。我使用这个API获取一些额外指令的面部ID
为了简化这个过程,我们假设磁盘上有img1.jpg和img2.jpg
下面是一个使用REST API的示例:
import cognitive_face as CF
from io import BytesIO
import json
import http.client
# Setup
KEY = "your subscription key"
# Get Face Ids
def get_face_id(img_file):
f = open(img_file, 'rb')
data = f.read()
f.close()
faces = CF.face.detect(BytesIO(data))
if len(faces) != 1:
raise RuntimeError('Too many faces!')
face_id = faces[0]['faceId']
return face_id
# Initialize API
CF.Key.set(KEY)
faceId1 = get_face_id('img1.jpg')
faceId2 = get_face_id('img2.jpg')
# Now that we have face ids, we can setup our request
headers = {
# Request headers
'Content-Type': 'application/json',
'Ocp-Apim-Subscription-Key': KEY
}
params = {
'faceId1': faceId1,
'faceId2': faceId2
}
# The Content-Type in the header specifies that the body will
# be json so convert params to json
json_body = json.dumps(params)
try:
conn = httplib.HTTPSConnection('https://eastus.api.cognitive.microsoft.com')
conn.request("POST", "/face/v1.0/verify", body=json_body, headers=headers)
response = conn.getresponse()
data = response.read()
data = json.loads(data)
print(data)
conn.close()
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
我认为JSON格式使用双引号而不是单引号。我会试着在帕拉马斯改变它们。谢谢@Dawid,@Ryan。恐怕不行。我像你说的那样尝试了,它显示了错误
ImportError:没有名为http.client的模块。
如果我改为使用conn=httplib.HTTPSConnection('api.projectoxford.ai')
和双引号payload=“{\n\“faceId1\”:\“A Face ID\”,\n\“faceId2\:“另一个Face ID\”\n}
我得到这个错误:{error:{“BadArgument”、“message”:“Face ID无效。”}}
对不起,我没有注意到您使用的是python 2.7。http.client是python 3的一部分。此外,为了完整性,您必须交换您拥有的实际有效的Face ID guid,比如从以前的/detect/callFormatting技巧中获得的guid…使用三引号/撇号(ala docString)要包含复杂的文本,…payload=''{“faceId1”:“URL.jpg”,…}'