Opencv 获取错误-';PngImageFile';对象没有属性';形状';使用Socketio将视频帧从客户端传输到flask服务器
我的应用程序是在客户端打开cam,获取框架,在后端对其执行ML过程,并将其返回到客户端 这部分代码(粗体)抛出错误-PngImageFile'对象没有属性'shape' 此代码行有问题-frame=imutils.resize(pimg,width=700) 我猜某些处理的格式不正确。请引导Opencv 获取错误-';PngImageFile';对象没有属性';形状';使用Socketio将视频帧从客户端传输到flask服务器,opencv,python-imaging-library,flask-socketio,Opencv,Python Imaging Library,Flask Socketio,我的应用程序是在客户端打开cam,获取框架,在后端对其执行ML过程,并将其返回到客户端 这部分代码(粗体)抛出错误-PngImageFile'对象没有属性'shape' 此代码行有问题-frame=imutils.resize(pimg,width=700) 我猜某些处理的格式不正确。请引导 @socketio.on('image') def image(data_image): sbuf = io.StringIO() sbuf.write(data_image) #
@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)
问题在于
pimg
是PIL
图像格式。而imutils.resize
函数要求图像采用Numpy数组格式。因此,在pimg=Image.open(b)
行之后,您需要将PIL
图像转换为Numpy数组,如下所示:
pimg = np.array(pimg)
import numpy as np
为此,必须导入numpy库,如下所示:
pimg = np.array(pimg)
import numpy as np
试试这个。对于我来说,这有助于解决类似的问题
img_arr = np.array(img.convert("RGB"))
问题在于图像的模式。我必须把它从“P”转换成“RGB”
print(img)
>> <PIL.PngImagePlugin.PngImageFile image mode=P size=500x281 at 0x7FE836909C10>
打印(img)
>>
嘿,酷,这部分已经解决了。不过还有一个问题,在前端,我只收到黑框。很高兴知道它解决了您的这个特殊问题。就具体问题而言,你可以考虑接受这个答案。对于另一个问题,您可以提出另一个更详细的问题,以便解决。