Replies: 4 comments 3 replies
-
这一个月在单位办公机上使用下来的问题,因为办公电脑,所以以下都是CPU运行的结果。 图片缩放关于图片缩放的问题,源码 def preprocess(self, img: np.ndarray) -> Tuple[np.ndarray, float, float]:
h, w = img.shape[:2]
max_value = max(h, w)
ratio_h = ratio_w = 1.0
if max_value > self.max_side_len:
img, ratio_h, ratio_w = reduce_max_side(img, self.max_side_len)
h, w = img.shape[:2]
min_value = min(h, w)
if min_value < self.min_side_len:
img, ratio_h, ratio_w = increase_min_side(img, self.min_side_len)
return img, ratio_h, ratio_w 这段我的理解,如果有一个图片尺寸比较特殊,会不会须要 插值算法图片放大缩小的插值算法(interpolation method,大概这个意思?)。 源码 我尝试了pillow模块的几个算法,放大一张比较小的裁剪后图片(346x83,放大10倍),结果放大算法bicubic和Lanczos识别率(det)比bilinear稍好,bilinear比nearest好,但一张图片不具有参考性。当然如果是upscale算法(比方说esdr 2x后再放大5倍,或者fsr)是要比这些都好,但是太耗时,得不偿失。 因为这些算法对图片来说都比较快,所以可以分别找合适的放大、缩小算法去提高准确率。 性能优化这个是刚好看到 减小图片文件大小:灰阶和降低色深单独或者同时使用,尽管大幅减少图片文件大小,基本都不能提升效率,效率提升最多不超过5%,但是识别结果都挺差的。测试图片是手机截图1080x2160(8bit RGB)。以下均已测试(基于CPU):8bit RGB转8bit灰阶,8bit RGB转4bit灰阶,8bit RGB转黑白,8bit RGB转4bit RGB,8bit RGB转2bit RGB,8bit RGB转1bit RGB。 裁切图片:裁剪图片对提速效果巨大。 from PIL import Image
region = (left, upper, right, lower)
result, elapse = engine(Image.open(img_path).crop(region))
result = [[[[x + region[0], y + region[1]] for x, y in polygon], text, score] for polygon, text, score in result] 对比度和γ:如果能确定字体颜色深浅,可以以较小的代价提高准确度,而不必使用server识别。例如深色字体则提高γ然后提高对比度。这个纯属个人使用感受,可能有误。 |
Beta Was this translation helpful? Give feedback.
-
关于图像缩放问题,这里需要重新梳理一下全局所有关于图像缩放的问题。 插值算法这块,之前看到过一个比赛经验帖子,的确提高了不同的插值算法会影响图像识别结果。不过从工具的泛化性来看,比较难以找寻出哪些图像适用哪些插值算法。 性能优化这里测试的很好,很有启发。不过本质来说,还是图像在不影响文字识别的前提下,缩小尺寸,提速作为明显。 |
Beta Was this translation helpful? Give feedback.
-
找了下,现在的论文现在好像比的都是传统interpolation method和现代super resolution,然后说super resolution多少多少好,不过对比基准倒是bicubic。老的有对比interpolation method,bicubic和Lanczos比bilinear稍微好一点但是速度慢,bicubic和Lanczos这两个差不多。不过都是英文识别,用的还是谷歌的那个OCR,中文啥也没有。 |
Beta Was this translation helpful? Give feedback.
-
准备工作
将
onnxruntime
包替换为onnxruntime-rocm
,infer_engine.py
的CPUExecutionProvider
改为ROCMExecutionProvider
即可开启加速。sudo python3 -m pip uninstall onnxruntime sudo python3 -m pip install onnxruntime-rocm -f https://repo.radeon.com/rocm/manylinux/rocm-rel-6.3.1/ sudo sed -i 's/CPU_EP = "CPUExecutionProvider"/CPU_EP = "ROCMExecutionProvider"/' /usr/local/lib/python3.10/dist-packages/rapidocr_onnxruntime/utils/infer_engine.py
环境
AMD 6600H无独显,Ubuntu 22.04。
识别图片为1080x2160的手机截图(png,大小1432408B)。
测试代码
结果
CPUExecutionProvider
:[0.3969314919999988, 0.0306060791015625, 0.8933536291122437]
ROCMExecutionProvider
:[0.2842670244999681, 0.08865513801574706, 1.1470747232437133]
总结
CPU_EP = "MIGraphXExecutionProvider"
不能运行,不知道是啥。onnxruntime-rocm
目前仅有Linux的包。https://repo.radeon.com/rocm/manylinux/rocm-rel-6.3.1/Beta Was this translation helpful? Give feedback.
All reactions