首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Face API Python

Face API Python
EN

Stack Overflow用户
提问于 2017-04-27 05:48:45
回答 2查看 623关注 0票数 0

我正在尝试使用Face API Python2.7。我想通过照片进行性别识别,但总是得到错误的结果。这是我的代码:

代码语言:javascript
复制
from six.moves import urllib
import httplib
import json
params = urllib.urlencode({

    'returnFaceId': 'true',
    'returnFaceAttributes': 'true',
    'returnFaceAttributes': '{string}',
})
 headers = {
    'ocp-apim-subscription-key': "ee6b8785e7504dfe91efb96d37fc7f51",
    'content-type': "application/octet-stream"
    }
img = open("d:/Taylor.jpg", "rb")

conn = httplib.HTTPSConnection("api.projectoxford.ai") 

conn.request("POST",  "/vision/v1.0/tag?%s" % params, img, headers)

res = conn.getresponse()
data = res.read()
conn.close()

我得到了这个错误:

代码语言:javascript
复制
  Traceback (most recent call last):

  File "<ipython-input-314-df31294bc16f>", line 3, in <module>
    res = conn.getresponse()

  File "d:\Anaconda2\lib\httplib.py", line 1136, in getresponse
    response.begin()

  File "d:\Anaconda2\lib\httplib.py", line 453, in begin
    version, status, reason = self._read_status()

  File "d:\Anaconda2\lib\httplib.py", line 409, in _read_status
    line = self.fp.readline(_MAXLINE + 1)

  File "d:\Anaconda2\lib\socket.py", line 480, in readline
    data = self._sock.recv(self._rbufsize)

  File "d:\Anaconda2\lib\ssl.py", line 756, in recv
    return self.read(buflen)

  File "d:\Anaconda2\lib\ssl.py", line 643, in read
    v = self._sslobj.read(len)

error: [Errno 10054] 

如果我使用链接而不是照片:

img_url='https://raw.githubusercontent.com/Microsoft/Cognitive-Face-Windows/master/Data/detection1.jpg'

代码语言:javascript
复制
conn = httplib.HTTPSConnection("api.projectoxford.ai")
conn.request("POST",  "/vision/v1.0/tag?%s" % params, img_url, headers)
res = conn.getresponse()
data = res.read()
conn.close()

我得到了:

代码语言:javascript
复制
 data
Out[330]: '{ "statusCode": 401, "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." }'

如果我使用:

代码语言:javascript
复制
KEY = 'ee6b8785e7504dfe91efb96d37fc7f51'  
CF.Key.set(KEY)

img_url = 'https://raw.githubusercontent.com/Microsoft/Cognitive-Face-Windows/master/Data/detection1.jpg'
result = CF.face.detect(img_url)

所有工作都很正常:

代码语言:javascript
复制
result
[{u'faceId': u'52c0d1ac-f041-49cd-a587-e81ef67be2fb',
  u'faceRectangle': {u'height': 213,
   u'left': 154,
   u'top': 207,
   u'width': 213}}]

但是在这种情况下,我不知道如何使用returnFaceAttribute方法(用于性别检测),而且如果我在result = CF.face.detect(img_url)中使用img而不是img_url,我会得到一个错误: status_code: 400

代码语言:javascript
复制
response: {"error":{"code":"InvalidImageSize","message":"Image size is too small or too big."}}
Traceback (most recent call last):

  File "<ipython-input-332-3fe2623ccadc>", line 1, in <module>
    result = CF.face.detect(img)

  File "d:\Anaconda2\lib\site-packages\cognitive_face\face.py", line 41, in detect
    data=data)

  File "d:\Anaconda2\lib\site-packages\cognitive_face\util.py", line 84, in request
    error_msg.get('message'))

CognitiveFaceException: Image size is too small or too big. 

这发生在各种img大小的情况下。

谁能解释一下如何解决这些问题?

EN

回答 2

Stack Overflow用户

发布于 2017-04-27 07:37:15

连接到Face API时,您似乎需要使用API密钥。这就是为什么你的第二个例子行得通,而其他的例子不行。

代码401意味着你是未经授权的,也就是说,在这一点上你没有用你的钥匙登录。

也许你可以尝试使用requests而不是urllib。

票数 0
EN

Stack Overflow用户

发布于 2017-09-01 17:31:50

第一个错误是由发送文件对象而不是文件内容引起的。你应该发送image.read()而不是image

第二个错误是请求头部缺少订阅密钥。

对于最后一个错误,我怀疑您可能已经读取了图像文件对象一次,因此再次读取它将返回空结果。你可以尝试发送文件路径,它应该可以与Face API Python SDK中的helper一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43645100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档