python实现提取图片中的文字,使用PaddleOCR识别最精准,因为只需要识别小尺寸图片,速度在一秒钟左右,对于要应用的项目可以接受。缺点是项目打包有将近600M,压缩后也有将近200M。Tesseract虽然速度快,占用空间小,但是对艺术字体识别精度极差,所以排除使用。
一个提取文字的极简需求,代码只有几十行。前后使用了三种方法,外加使用了PaddleOCR的三个版本,折腾好几天,终于可以了。打包后600M的空间真的惊到我了。
另使用PaddleOCR旧版本是因为使用方便,稳定,参考资料多。
开发环境版本:
1.python3.12.10
2.paddle2.6.0
3.PaddleOCR2.8.0
一、生成spec文件,不介绍。
二、修改spec文件内容,仅展示修改部分
a = Analysis(
['PaddleOCRTest.py'],
pathex=[
'E:\\Programs\\python\\pao\\.venv\\Lib\\site-packages',
'E:\\Programs\\python\\pao\\.venv\\Lib\\site-packages\\paddle\\libs'
],
binaries=[('E:\\Programs\\python\\pao\\.venv\\Lib\\site-packages\\paddle\\libs','.')],
datas=[
('E:\\Programs\\python\\pao\\.venv\\Lib\\site-packages\\paddleocr\\ppocr', 'paddleocr\\ppocr'),
('E:\\Programs\\python\\pao\\.venv\\Lib\\site-packages\\paddleocr\\tools', 'paddleocr\\tools'),
('E:\\Programs\\python\\pao\\.venv\\Lib\\site-packages\\paddleocr\\ppstructure', 'paddleocr\\ppstructure')
],
hiddenimports=[
'shapely.geometry','pyclipper','skimage', 'skimage.morphology', 'imgaug', 'lmdb'
],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
noarchive=False,
optimize=0,
)
三、遇到的问题:
1.提示:unhandledexception: cannot import name 'imaging' from 'PlL'
解决方法:到.venv\Lib\site-packages目录下复制PIL文件夹到打包后的_internal文件夹
2.提示:ModuleNotFoundError: No module named 'XXX'
解决方法:将模块名称'XXX'添加到spec文件的hiddenimports内,然后重新打包,直到不弹出该类型错误为止。
参考文章:
Pyinstaller 打包 PaddleOcr + PyQt5 项目的打包过程、常见问题及解决方法_paddleocr打包太难了-CSDN博客