已解决
整治PPOCRLabel中cv2文件读取问题(更新中)
来自网友在路上 173873提问 提问时间:2023-11-11 10:35:59阅读次数: 73
最佳答案 问答题库738位专家为你答疑解惑
PPOCRLabel
- 使用PPOCRLabel对ocr预标注结果进行纠正
- 由于PaddleOCR代码库十分混乱,路径经常乱掉pip和代码库的代码,经常报错,ocr也是使用paddleocr的pip包;
安装
pip install PPOCRLabel==2.1.3
启动
PPOCRLabel --lang ch
修改记录
修改1:
- 报错:AttributeError: ‘NoneType’ object has no attribute ‘shape’
'NoneType' object has no attribute 'shape'
Traceback (most recent call last):File "D:\ProgramData\Anaconda3\envs\paddle\lib\site-packages\PPOCRLabel\libs\autoDialog.py", line 41, in runh, w, _ = cv2.imdecode(np.fromfile(Imgpath, dtype=np.uint8), 1).shape
AttributeError: 'NoneType' object has no attribute 'shape'
- 原因:cv2不支持读取带有中文字符路径文件
h, w, _ = cv2.imdecode(np.fromfile(Imgpath, dtype=np.uint8), 1).shape
- 解决:使用PIL替换cv2, 将上述代码替换为
# 修改文件:"D:\ProgramData\Anaconda3\envs\paddle\lib\site-packages\PPOCRLabel\libs\autoDialog.py", line 41
# 增加PIL读取图片函数
from PIL import Image
def load_image(image_path: str, return_chw: bool = True, size: tuple = None):image = Image.open(image_path).convert("RGB")if size is not None:image = image.resize(size) # resize imageimage = np.asarray(image)image = image[:, :, ::-1] # flip color channels from RGB to BGRw, h = image.shape[1], image.shape[0] # update size after resizeif return_chw:image = image.transpose(2, 0, 1)return image, (w, h)# 替换上面代码
try:image_data, (w, h) = load_image(Imgpath, return_chw=False)
except Exception as e:print(f"load file {Imgpath} fail!")continue
修改2
- 报错:AttributeError: ‘NoneType’ object has no attribute ‘shape’
Traceback (most recent call last):File "D:\ProgramData\Anaconda3\envs\paddle\lib\site-packages\PPOCRLabel\PPOCRLabel.py", line 1889, in saveFileself._saveFile(imgidx, mode=mode)File "D:\ProgramData\Anaconda3\envs\paddle\lib\site-packages\PPOCRLabel\PPOCRLabel.py", line 1934, in _saveFileself.openNextImg()File "D:\ProgramData\Anaconda3\envs\paddle\lib\site-packages\PPOCRLabel\PPOCRLabel.py", line 1880, in openNextImgself.loadFile(filename)File "D:\ProgramData\Anaconda3\envs\paddle\lib\site-packages\PPOCRLabel\PPOCRLabel.py", line 1550, in loadFileheight, width, depth = cvimg.shape
AttributeError: 'NoneType' object has no attribute 'shape'
- 原因还是cv2不能读取中文路径文件
- 解决:
# 修改: File "D:\ProgramData\Anaconda3\envs\paddle\lib\site-packages\PPOCRLabel\PPOCRLabel.py", line 1550, in loadFile
# cvimg = cv2.imdecode(np.fromfile(unicodeFilePath, dtype=np.uint8), 1)
cvimg, _ = load_image(unicodeFilePath, return_chw=False)
修改3
-
报错:error: (-215:Assertion failed) _src.total() > 0 in function ‘cv::warpPerspective’
- 报错描述:在对PPOCRLABEL的框进行重新识别是,发生如下报错:
Can not recognise the detection box in xxxx,png. Please change manually'unicodeFilePath is J:\data\mllm-data\xxxxxxxxx\wKh2CWERPJOAY2x-AAE62o598k0620.pngOpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\imgwarp.cpp:3143: error: (-215:Assertion failed) _src.total() > 0 in function 'cv::warpPerspective'
- 原因是我们的ocr预标注数据Label.txt是使用PIL读取图片数据,调用ppocr进行生产的(并不是在PPOCRLabel工具内部生产的), 当我们修改数据框后, PPOCRLabel尝试再次使用cv2进行读取原图,此时由于cv2对路径较为敏感,经常会读取文件失败,才会出现如上情况
-
解决:
依旧是修改PPOCRLabel源码, 把cv2读取改为PIL读取,就不惯着cv2的臭毛病…
# 修改如下代码def reRecognition(self):#img = cv2.imdecode(np.fromfile(self.filePath,dtype=np.uint8),1)img, _ = load_image(self.filePath, return_chw=False)
查看全文
99%的人还看了
相似问题
- conda创建pytorch环境报错
- Python通过selenium调用IE11浏览器报错解决方法
- kafka本地安装报错
- 【BUG】第一次创建vue3+vite项目启动报错Error: Cannot find module ‘worker_threads‘
- git 构建报错
- Docker build报错总结,版本过新大避雷!
- Mongodb3.4升级高版本mongoTemplate.executeCommand报错The cursor option is required
- duplicate复制数据库单个数据文件复制失败报错rman-03009 ora-03113
- 安装第三方包报错 error: Microsoft Visual C++ 14.0 or greater is required——解决办法
- 邮件|gitpushgithub报错|Lombok注解
猜你感兴趣
版权申明
本文"整治PPOCRLabel中cv2文件读取问题(更新中)":http://eshow365.cn/6-37527-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!