sipeed / MaixPy

Easily create AI projects with Python on edge device
https://wiki.sipeed.com/maixpy/
Other
153 stars 33 forks source link

image.from_bytes无法加载JPEG格式的字节数据,image.load也无法将编码设为FMT_JPEG #23

Closed mcpanl closed 2 months ago

mcpanl commented 2 months ago

我是用TCP接收了其他设备传来的JPEG编码的图片数据,并尝试将它显示到MaixCam屏幕上,结果发现image.from_bytes后print(img)显示format是null,而且大小为0(见下图)(由于RGB565或者RGB888太大了,TCP传输效率低,所以才用JPEG编码后才传输的): 图片

如果此时不改变其他代码,只是将字节数据先保存为文件,再从文件读取,使用image.load读取,如果此时设置FMT_JPEG编码仍然是无法正常读取、无法正常显示到显示屏上的。 图片

如果此时将FMT_JPEG改为FMT_RGB888或者FMT_BGR888就可以正常显示在显示屏上: 图片

此时可能要问了,直接将from_bytes的format改为FMT_RGB888或者FMT_BGR888不就好了?我也试过了,都不行,会报错提示data_size与实际给定的width和height不一致。 图片

附带我的jpeg图片: tmp_1719456876.1186235.zip

测试方法就是,将此jpeg放到Linux目录里面,然后用MaixCAM读取,用FMT_JPEG能成功读取且显示到显示屏上,那么问题应该就解决了。

请全屏观看下面完整录屏(已加速处理,已压缩画质) https://github.com/sipeed/MaixPy/assets/59745518/f18dc8e1-6d3c-4f07-ada6-4c9a5948103b

Neutree commented 2 months ago

已经在最新的代码中支持 jpeg 解码: https://wiki.sipeed.com/maixpy/doc/zh/vision/image_ops.html#%E5%92%8C-bytes-%E6%95%B0%E6%8D%AE%E4%BA%92%E7%9B%B8%E8%BD%AC%E6%8D%A2