请教从sensor.snapshot()取一帧,进行灰度,锐化,二差值等处理后再进行OCR文字

Viewed 34

问题描述


OCR例子中通过img=pl.get_frame()获取当前帧,ulab.numpy.ndarray格式,为rgb888p_size,排布为CHW,可以直接交给ocr.run(img)进行推理,挺完美的,但有时帧我需要处理一下,通过锐化,灰度等处理,让其更清晰,再将给OCR推理,并且LCD上也同时显示处理过的图片,我为了实现这个功能,采用了sensor.snapshot()方式取到img,这个是Image格式,我一直没有办法转换成排布为CHW的ulab.numpy.ndarray,请问各技术大佬是否有办法?
以下是我的错误方法代码片断:
sensor = Sensor()
# 初始化摄像头
sensor.reset()
sensor.set_framesize(width=800,height=480)
sensor.set_pixformat(PIXEL_FORMAT_YUV_SEMIPLANAR_420)
#sensor.set_pixformat(sensor.RGB888)
sensor.set_framesize(width=800,height=480, chn=CAM_CHN_ID_2)
sensor.set_pixformat(PIXEL_FORMAT_RGB_888_PLANAR, chn=CAM_CHN_ID_2)
#sensor.set_pixformat(sensor.RGB888, chn=CAM_CHN_ID_2)
sensor.set_hmirror(True)
sensor.set_vflip(True)
sensor_bind_info = sensor.bind_info(x = 0, y = 0, chn = CAM_CHN_ID_0)
Display.bind_layer(**sensor_bind_info, layer = Display.LAYER_VIDEO1)
Display.init(Display.ST7701, width= 800, height = 480,fps=100,to_ide = True)
MediaManager.init()
sensor.run()

硬件板卡


K230

软件版本


CanMV K230 micropython

2 Answers

你好,拿到数据后先使用to_numpy_ref()转换成numpy数据,然后打印一下shape看一下数据排布情况,然后使用reshape+transpose+reshape实现HWCCHW,参考代码如下:

img_rgb888=img_data.to_rgb888()
img_hwc=img_rgb888.to_numpy_ref()
shape=img_hwc.shape
img_tmp = img_hwc.reshape((shape[0] * shape[1], shape[2]))
img_tmp_trans = img_tmp.transpose()
img_res=img_tmp_trans.copy()
img_chw=img_res.reshape((shape[2],shape[0],shape[1]))

非常感谢,按您的提示,发现了一个工具文件,叫Utils,可以直接from libs.Utils import *,再处理,完美解决。