如何解决PaddleOCR读取内存中PIL转ndarray图像的报错问题?
解决PaddleOCR无法识别内存中PIL图像的问题
问题根源
你遇到的ValueError: operands could not be broadcast together with shapes (960,960,4) (1,1,3),本质是输入图像为4通道RGBA格式(带透明度通道),但PaddleOCR只支持3通道的RGB图像,导致预处理时数组运算不兼容。这是因为ImageGrab.grab()在macOS下默认返回带alpha通道的图像。
修复方法
把RGBA图像转成RGB格式就行,两种简单方式任选:
方式一:通过PIL直接转换
获取图像后先调用convert('RGB')再转numpy数组:
from paddleocr import PaddleOCR from PIL import ImageGrab import numpy as np ocr_model = PaddleOCR(lang="en") # 先转RGB格式再转数组 pic = np.array(ImageGrab.grab(bbox=[0, 0, 1000, 1000]).convert('RGB')) result = ocr_model.ocr(pic) print(result)
方式二:用numpy切片去除alpha通道
如果已经拿到RGBA的numpy数组,直接截取前3个通道:
# 从RGBA数组中提取RGB部分 pic_rgb = pic[..., :3] result = ocr_model.ocr(pic_rgb)
效果验证
两种方法都能将4通道图像转为符合PaddleOCR要求的3通道RGB格式,彻底解决数组广播的报错问题。
内容的提问来源于stack exchange,提问作者pockspocky
相关产品推荐
相关产品推荐

