2

我的应用程序是在客户端打开 cam,获取帧,在后端对其执行 ML 过程并将其返回给客户端。

这部分代码(粗体)抛出错误 - PngImageFile'对象没有属性'shape'。

这行代码有问题——frame = imutils.resize( pimg, width=700)

我猜某些处理的格式不正确。请指导

@socketio.on('image')
def image(data_image):
    sbuf = io.StringIO()
    sbuf.write(data_image)

    # decode and convert into image
    b = io.BytesIO(base64.b64decode(data_image))
    pimg = Image.open(b)

    # Process the image frame
    frame = imutils.resize(**pimg,** width=700)
    frame = cv2.flip(frame, 1)
    imgencode = cv2.imencode('.jpg', frame)[1]

    # base64 encode
    stringData = base64.b64encode(imgencode).decode('utf-8')
    b64_src = 'data:image/jpg;base64,'
    stringData = b64_src + stringData

    # emit the frame back
    emit('response_back', stringData)
4

2 回答 2

3

问题在于pimg图像PIL格式。虽然imutils.resize函数需要 Numpy 数组格式的图像。因此,pimg = Image.open(b)在行之后,您需要将PIL图像转换为 Numpy 数组,如下所示:

pimg = np.array(pimg)

为此,您必须像下面这样导入 numpy 库:

import numpy as np
于 2020-06-14T07:24:33.673 回答
0

试试这个。这有助于我解决类似的问题。

img_arr = np.array(img.convert("RGB"))

问题出在图像的模式上。我不得不将它从“P”转换为“RGB”。

print(img)
>> <PIL.PngImagePlugin.PngImageFile image mode=P size=500x281 at 0x7FE836909C10>
于 2021-03-30T17:58:10.400 回答