如何使用Python将内存中的图像提交到视觉识别

如何使用Python将内存中的图像提交到视觉识别,python,ibm-watson,visual-recognition,Python,Ibm Watson,Visual Recognition,我第一次在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,

我第一次在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()
我的应用程序将使用内存中的图像,我不想在打电话之前将每个图像都保存到文件中。我尝试用io.BytesIO流替换BufferedReader,但返回一个错误,说我缺少一个images_filename参数。添加模拟文件名(例如“xyz123.jpg”)时,返回以下错误:

TypeError: a bytes-like object is required, not 'float'
我可以使用内存中的图像调用分析API吗?如果是,怎么做

编辑:

这基本上就是我要做的:

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()
def分析图像(枕头图像:PIL.image):
byte_stream=io.BytesIO()
枕式图像保存(字节流,格式='JPEG')
bytes\u img=byte\u stream.getvalue()
watson_vr=视觉识别v3(
'2019-04-30',
url='1〕https://gateway.watsonplatform.net/visual-recognition/api',
iam_apikey=“”
)
结果\u json=watson\u vr.classify(
图像\u文件=字节\u img,
阈值=0.1,
分类器_id=['default']
).get_result()
谢谢

怎么样

bytes\u img=byte\u stream.getbuffer()
...
结果\u json=watson\u vr.classify(
图像\u文件=字节\u img,
阈值=0.1,
分类器_id=['default']
).get_result()

将字节流作为图像文件:
结果\u json=watson\u vr.classify(
images\u file=images\u file,
阈值='0.1',
分类器_id=['default']
).get_result()
怎么样

bytes\u img=byte\u stream.getbuffer()
...
结果\u json=watson\u vr.classify(
图像\u文件=字节\u img,
阈值=0.1,
分类器_id=['default']
).get_result()

将字节流作为图像文件:
结果\u json=watson\u vr.classify(
images\u file=images\u file,
阈值='0.1',
分类器_id=['default']
).get_result()

我想你有一些类似于
的东西,io.BytesIO()作为图像文件
,应该可以。请分享您的实际
io.BytesIO
代码,以便我们找出问题所在。内存中的图像是否实际具有.jpg mime类型?我编辑了原始帖子,添加了一些代码,说明了我正在尝试执行的操作。我猜您有一些类似于
的东西,其中io.BytesIO()作为图像文件
,这应该可以。请分享您的实际
io.BytesIO
代码,以便我们找出问题所在。内存中的图像是否实际具有.jpg mime类型?我编辑了原始帖子,添加了说明我尝试执行的操作的代码。我看到的唯一显著区别是调用getbuffer()而不是getvalue()。当我尝试此操作时,返回错误:“ValueError:images\u filename必须提供”。如上所述,当我提供一个文件名时,我得到了一个错误:“TypeError:像object这样的字节是必需的,而不是‘float’”。如果有帮助的话,我正在使用的ibm_watson包是v3.0.3。我能看到的唯一显著区别是调用getbuffer()而不是getvalue()。当我尝试此操作时,返回错误:“ValueError:images\u filename必须提供”。如上所述,当我提供一个文件名时,我得到了一个错误:“TypeError:像object这样的字节是必需的,而不是‘float’”。如果有帮助的话,我正在使用的ibm_watson软件包是v3.0.3。