2017-04-26 55 views
0

我正在嘗試使用Face API Python 2.7。我想通過照片進行性別認定,但總是得到錯誤。這是我的代碼:如果我使用的鏈接,而不是照片Face API Python

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'

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() 

我得到:

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() 

我得到這個錯誤

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

如果我使用:

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) 

一切工作正常:

result 
[{u'faceId': u'52c0d1ac-f041-49cd-a587-e81ef67be2fb', 
    u'faceRectangle': {u'height': 213, 
    u'left': 154, 
    u'top': 207, 
    u'width': 213}}] 

但在這種情況下,我不知道如何使用方法returnFaceAttribute(性別檢測) 也是,如果我使用img in result = CF.face.detect(img_url) instead img_url 我收到一個錯誤:status_code:400

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大小。

任何人都可以解釋如何解決這些問題?

回答

0

當連接到Face API時,您似乎需要使用您的API密鑰。這就是爲什麼你的第二個例子工作,其他人不這樣做。

代碼401意味着你是未經授權的,即在那時你沒有用你的密鑰登錄。

也許你會更容易嘗試使用requests而不是urllib。

0

第一個錯誤是由發送文件對象而不是文件內容引起的。您應該發送image.read()而不是image

第二個錯誤是由於請求頭中缺少訂閱鍵造成的。

對於最後一個錯誤,我懷疑您可能已經讀過一次圖像文件對象,因此再次讀取它將返回空結果。您可以嘗試發送文件路徑,並且它可以在Face API Python SDK中與幫助程序一起使用。