Визуальное распознавание локального файла с помощью Watson

Я считаю, что это простой вопрос. При использовании Watson API через Python у меня не возникает проблем с его запуском для определения URL-адреса изображения. Однако у меня возникают проблемы с локальными файлами изображений.

Мой код:

from watson_developer_cloud import VisualRecognitionV3 as vr
instance = vr('2016-05-20', api_key='Your-Api-key')
img2 = instance.classify(images_file='a.jpg')
print(img2)

Вывод ошибки:

AttributeError: 'str' object has no attribute 'name'
--------------------------------------------------------------------------- AttributeError                            Traceback (most recent call last) <ipython-input-173-79c8a4eee873> in <module>()
----> 1 img2 = instance.classify(images_file='a.jpg') C:\Program Files\Anaconda3\lib\site-packages\watson_developer_cloud\visual_recognition_v3.py in classify(self, images_file, images_url, classifier_ids, owners, threshold)
    154                   'owners': owners, 'threshold': threshold}
    155         return self._image_call('/v3/classify', images_file, images_url,
--> 156                                 params)
    157 
    158     def detect_faces(self, images_file=None, images_url=None): C:\Program Files\Anaconda3\lib\site-packages\watson_developer_cloud\visual_recognition_v3.py in _image_call(self, url, images_file, images_url, params)

    124                                 accept_json=True)
    125         else:
--> 126             filename = images_file.name
    127             mime_type = mimetypes.guess_type(
    128                 filename)[0] or 'application/octet-stream' 

AttributeError: 'str' object has no attribute 'name'

Я использую родео IDE. Я попытался изменить рабочий каталог на папку с изображениями или ввести C:/... и т. д., но ни один из них не работает.

Я считаю, что именно так я передаю аргумент, может ли кто-нибудь направить меня?

По существу, что делает

AttributeError: 'str' object has no attribute 'name'

Иметь в виду?


person Germ    schedule 21.02.2017    source источник


Ответы (1)


вы должны передать ему файл, а не имя файла. так что попробуйте:

img2 = instance.classify(images_file=open('a.jpg', 'rb'))

обратите внимание, что теперь вы передаете файловый объект с open('a.jpg', 'rb'), а не объект str 'a.jpg' Чтобы ответить на вопрос об ошибке, объекты str python не имеют атрибутов name, о чем и говорит ошибка.

обратитесь к примеру на watson python sdk github: пример визуального распознавания

person parsethis    schedule 21.02.2017
comment
спасибо за быстрый ответ. Я пока не очень хорошо разбираюсь в питоне. Однако я получаю эту ошибку: UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x81 в позиции 240: сопоставление символов с ‹undefined› - person Germ; 21.02.2017
comment
Я отредактировал свой ответ, чтобы отразить тот факт, что вам может понадобиться прочитать файл как двоичный. Обратите внимание на опцию 'rb' (читать двоичный код), добавленную к функции открытия. - person parsethis; 21.02.2017
comment
большое спасибо, я запускаю python с фоном R. Поэтому мне это кажется аленом. Таким образом, для любого аргумента, требующего передачи файла, я должен использовать опцию открытия? А откуда вы поняли, что это должно быть "рб"? Я считаю, что направлять меня через мыслительный процесс будет полезно для меня, чтобы учиться :) - person Germ; 21.02.2017
comment
если в качестве аргумента требуется файл, то да, вам нужно открыть местоположение файла с помощью open (file_name). Чтобы ответить на второй вопрос, обратитесь к документации по Python docs.python.org/2/. библиотека/функции.html#open. - person parsethis; 21.02.2017