为什么要修改默认模型路径?
因为打包后别人首次使用是需要下载模型的,默认的下载路径为用户目录,及C:\Users\***,并且不支持中文路径,所以部分用户系统用户名携带中文就不能正常使用打包后的程序。
步骤:
1.先是构建ocr对象时传入自定义的模型路径,如以下其中的rec_model_dir,我自己是使用的项目目录路径./,后续路径建议保持一致,即:.paddleocr/whl/……,因为要区分几个模型的路径,所以使用源码的路径,仅仅改变.paddleocr部分前的路径能避免其他地方导致的路径问题
ocr = PaddleOCR(use_angle_cls=True, lang='ch', show_log=False, det_model_dir=r"./.paddleocr/whl\det\ch\ch_PP-OCRv4_det_infer", cls_model_dir=r"./.paddleocr/whl\cls\ch_ppocr_mobile_v2.0_cls_infer", rec_model_dir=r"./.paddleocr/whl\rec\ch\ch_PP-OCRv4_rec_infer")
2.然后需要修改paddleocr的源码,在pycharm项目全局查找def maybe_download方法,定位在方法首行加入以下代码,其中判断表达式中的路径更改为自己系统的用户目录,赋值路径与构建的ocr对象的路径保持一致
if model_storage_directory == r"C:\Users\2826509434/.paddleocr/whl\det\ch\ch_PP-OCRv4_det_infer":
model_storage_directory = r"./.paddleocr/whl\det\ch\ch_PP-OCRv4_det_infer"
elif model_storage_directory == r"C:\Users\2826509434/.paddleocr/whl\rec\ch\ch_PP-OCRv4_rec_infer":
model_storage_directory = r"./.paddleocr/whl\rec\ch\ch_PP-OCRv4_rec_infer"
elif model_storage_directory == r"C:\Users\2826509434/.paddleocr/whl\cls\ch_ppocr_mobile_v2.0_cls_infer":
model_storage_directory = r"./.paddleocr/whl\cls\ch_ppocr_mobile_v2.0_cls_infer"
随后用pyinstaller打包时不要使用-f打包成一个exe,因为pyinstaller打包后并没有应用修改后的源码(不清楚是不是只有我会这样,网上查找资料也无果),所以需要额外在打包后的目录中找到对应的文件源码再次完成第二点的修改,这里如果打包为单独一个exe就不能修改打包后的源码了。
自此完成默认路径修改,打包给别人使用,模型路径会下载到自定义的目录,而不会是系统用户目录,并且也可以规避系统用户名携带中文的兼容性问题。只需要让用户不要将程序放在带中文路径的目录即可