Я впервые работаю с IBM Watson Visual Recognition. Мое приложение Python должно передавать сервису изображения, которыми оно управляет, в памяти. Тем не менее, довольно ограниченная документация и пример кода, которые я смог найти в IBM, показывает вызовы API как ссылки на сохраненные файлы. Файл передается на вызов как io.BufferedReader.
with open(car_path, 'rb') as images_file:
car_results = service.classify(
images_file=images_file,
threshold='0.1',
classifier_ids=['default']
).get_result()
Мое приложение будет работать с изображениями из памяти, и мне не нужно сохранять каждое изображение в файл, прежде чем я смогу позвонить. Я попытался заменить BufferedReader потоком io.BytesIO, и я получил сообщение об ошибке, в котором я пропустил параметр images_filename. Когда я добавил ложное имя файла (например, «xyz123.jpg»), я получил следующую ошибку:
TypeError: a bytes-like object is required, not 'float'
Можно ли выполнять вызовы API анализа с использованием изображения из памяти? Если да, то как?
EDIT:
По сути, это то, что я пытаюсь сделать:
def analyze_image(pillow_img: PIL.Image):
byte_stream = io.BytesIO()
pillow_img.save(byte_stream, format='JPEG')
bytes_img = byte_stream.getvalue()
watson_vr = VisualRecognitionV3(
'2019-04-30',
url='https://gateway.watsonplatform.net/visual-recognition/api',
iam_apikey='<API KEY>'
)
result_json = watson_vr.classify(
images_file=bytes_img,
threshold=0.1,
classifier_ids=['default']
).get_result()
Спасибо