2016-12-26 14 views
0

Я хочу определить лица в группе людей, использующих API Face от Microsoft. Я просмотрел их документацию, и я написал этот код, но он работает не так, как ожидалось. Он показывает некоторую ошибку.Как использовать интерфейс Microsoft Face для идентификации лиц в групповых изображениях

from projectoxford import Client,Face 
print('----- Setting Environment to use Face API -----') 
client = Client('MY API KEY') 
personGroup = 'friends' 
print('----- Uploading Sam -----') 
storage.child('images/sam.jpg').put('/home/parth/Downloads/sam.jpg') 
print('----- Done Uploading -----') 
sam = storage.child('images/sam.jpg').get_url(token=None) 
print(sam) 
print('----- Uploading Dev -----') 
storage.child('images/dev.jpg').put('/home/parth/Downloads/devansh.jpg') 
print('----- Done Uploading -----') 
dev = storage.child('images/dev.jpg').get_url(token=None) 
print(dev) 
print('----- Uploading Main -----') 
storage.child('images/main.jpg').put('/home/parth/Downloads/main.jpg') 
print('----- Done Uploading -----') 
main = storage.child('images/main.jpg').get_url(token=None) 
print(main) 
print('----- Detecting Face Sam -----') 
x = client.face.detect({'url': sam}) 
print(x) 
sam_faceId = x[0]['faceId'] 
client.face.personGroup.createOrUpdate(personGroup, 'friends') 
client.face.person.createOrUpdate(personGroup, [sam_faceId], 'Saumil') 
client.face.personGroup.trainAndPollForCompletion(personGroup) 
detectResults = client.face.detect({'url': main}) 
faceIds = [] 
for result in detectResults: 
    faceIds.append(result['faceId']) 

''' 
Identification Method 
''' 
identifyResults = client.face.identify(personGroup, faceIds) 
for result in identifyResults: 
    for candidate in result['candidates']: 
     confidence = candidate['confidence'] 
     personData = client.face.person.get(personGroup, candidate['personId']) 
     name = personData['name'] 
     print('identified {0} with {1}% confidence'.format(name, str(float(confidence) * 100))) 
client.face.personGroup.delete(personGroup) 

Теперь thorws это:

Traceback (most recent call last): 
    File "att3.py", line 55, in <module> 
    x = client.face.detect({'url': sam}) 
    File "/usr/local/lib/python2.7/dist-packages/projectoxford/Face.py", line 56, in detect 
    return Base._postWithOptions(self, _detectUrl, options, params) 
    File "/usr/local/lib/python2.7/dist-packages/projectoxford/Base.py", line 87, in _postWithOptions 
    return Base._invoke(self, call) 
    File "/usr/local/lib/python2.7/dist-packages/projectoxford/Base.py", line 45, in _invoke 
    raise Exception('status {0}: {1}'.format(str(response.status_code), response.text)) 
Exception: status 404: { "statusCode": 404, "message": "Resource not found" } 

Я не знаю, почему это происходит. Любое решение или предложение о том, что я делаю неправильно.

+0

Судя по заявлениям на печать, ваш код находится в Python 3, но трассировка относится к Python 2.7. Попробуйте запустить его с помощью Python3

+0

@whats_done_is Этот тип операторов печати разрешен в Python 2.7. Запуск текущего скрипта с ** Python3 ** получается таким же. –

ответ

0

x = client.face.detect({'url': sam}) пытается получить доступ к буквальному URL-адресу «url», потому что вы дали ему это как строку. Я предполагаю, что вы хотели использовать это вместо: x = client.face.detect({main: sam}), потому что вы вызвали get_url(token=None) и сохранили результат в переменной main.

+0

Нет. Я хочу определить лицо sam из основного изображения. И основная переменная содержит url - основное изображение. –