Closed JulySsAugust closed 1 year ago
你好~
建议从 最近稳定版的分支 开始研究,以免main分支中的最新代码可能存在bug,影响你的判断。
如果你想整体的了解本项目,可能需要先学习一下tkinter框架,然后从ui\win_main.py
入手。如果只是想增改一些小功能,则可以善用编辑器的全局搜索功能,快速定位到某个模块。
请放心,写注释是我的爱好,本项目的代码几乎每一行都有注释,你一定能看懂的。
若具体某一部分的功能或者代码有疑惑,可以再来问我~~
感谢作者!
作者你好,大致的运行流程我了解了,我想问问有没有demo文件,还是说WIN_MAIN可以运行呢?我尝试过运行win_main文件存在报错有什么解决办法吗?希望指导一下,谢谢您!
报错:
Traceback (most recent call last):
File "L:\OCR\Umi-OCR-release-1.3.2\ui\win_main.py", line 5, in
哦,是这样的。本项目是分层结构的Python工程,自定义模块采用相对路径导入,而工程的入口文件是根目录下的main.py
。也就是,必须运行main.py
才能启动整个程序,才能让各个相对导入的模块被正确识别。(你这个报错,就是相对导入路径无法识别。)
如果你用的编辑器是 VsCode ,可以进行这几步以导入工程:
Umi-OCR.code-workspace
或别的名字.vscode
,里面新建文件launch.json
,粘贴以下内容:
{
"configurations": [
{
"name": "Python: Umi-OCR",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}\\main.py",
}
]
}
Umi-OCR.code-workspace
工作区就行了。然后无论你当前在浏览哪一个文件,按F5运行程序都会从main.py
启动。如果你是用PyCharm或别的编辑器,也可以使用类似的步骤导入工程。
感谢作者的解答,对于学习很有帮助! 可增加Excel输出格式吗。
增加Excel输出格式
可以,本项目注重拓展性,可以很方便的拓展像 别的输出格式
这样的功能。
简单来说需要以下几个步骤:
ocr\
下,有一批 output_xxx.py
输出器模块。你可以仿照其中的代码,编写一个 output_excel.py
输出器。ocr\msn_batch_paths.py
中,引入这个 output_excel.py
模块,并添加到 # 初始化输出器
的代码中。utils\config.py
的 _ConfigDict
配置字典中添加 isOutputExcel
配置项。ui\win_main.py
中添加一个 ttk.Checkbutton
来控制是否启用这个配置项。注意不要一口气写完,而是每写一小段代码就要测试其功能是否符合预期。
太感谢作者!我去试试,还有啥问题再来求助!太感谢了!
你好作者,我有些疑问想请教一下。获取的图片之后是通过哪个函数传到OCR中?还有哪个是OCR运行的函数?是engine.py文件吗?可是我没找到输入的Path的。QAQ 本人小白希望作者指点一下,万分感谢。
哪个是OCR运行的函数?
这部分可能有点难理解,一次OCR任务需要调用的代码实际上是分散在各个文件中的。为了便于拔插不同模块,实现不同引擎实例、不同任务类型、不同文本处理方式、不同输出方式的排列组合,代码中采用了设计模式中 策略模式(Strategy Pattern)的思想。或许你可以先了解一下设计模式
。
一次OCR任务涉及这些模块:
api_ppocr_json.py
,负责控制引擎进程。engine.py
,负责指挥引擎实例,并提供任务流程接口 runMission()
。msn_*.py
,负责规划任务流程的前、中、后 三个阶段应该干什么事。中的阶段(onGet
)就需要下述两个模块。tbpu\*.py
,负责文本块后处理。output_*.py
,负责输出到具体的文件。因此,获取到图片之后,还要同步初始化一个任务管理器,在任务管理器内初始化输出器和文本块处理器,然后将图片路径paths和任务管理器实例 传递给引擎管理器。
OCR流程的调用起点是 win_main.py
的 run()
和 startSingleClipboard()
。
(其中有一行注释 # 初始化文本处理器
是错的,应该是 # 初始化批量识图任务处理器
)
好的作者,谢谢教导,有点迷茫就来求助了,感谢作者的耐心指点。
你好作者,我自己尝试了弄了个ORC的识别,有点问题想请教一下 ocr = PaddleOCR() result = ocr.ocr(img_path) for line in result: print(line) 这就是个基础的调用ORC,他这个PaddleOCR输出内容 有位置信息 文本内容 置信度 怎么才能只输出文本内容呢,希望作者能教教我,万分感谢。
怎么才能只输出文本内容呢
如果 line 是OCR结果字典中的['data']列表的元素,那输出line中的['text']就行了,print(line['text])
另外如果你打算从头开始弄OCR,可以直接用 PaddleOCR-json的Python API模块 。
额,不太会丫 QAQ
我不知道你的 PaddleOCR()
是怎么封装的,就以我的 api_ppocr_json.py
为例(PaddleOCR-json的Python API也是同理):
from api_ppocr_json import OcrAPI
ocr = OcrAPI(r'…………\PaddleOCR_json.exe')
result = ocr.run('图片.png')
if result['code'] == 100: # 成功
for t in result['data']:
printf(f'文本:{t["text"]}')
printf(f'置信度:{t["score"]}')
printf(f'包围盒:{t["box"]}')
else: # 失败
printf(f'错误码:{t["code"]}\n失败原因:{t["data"]}')
建议再看看 PaddleOCR-json 的返回值说明。
我是直接在pycharm中 pip install PaddleOCR 然后后面就是单纯的把图片输入到里面 img_path = '........' ocr = PaddleOCR() result = ocr.ocr(img_path) for line in result: print(line) 实在水平有限,作者的哪个程序大致理解运行的逻辑,但是上手改有点不太行,啊哈哈哈,有待学习。就根据您之前说的TTK框架敲了个窗口。好想开始有点难度。
pip install 的 PaddleOCR 跟本项目不是同一个引擎。pip的那个是Paddle官方的基于Python的引擎。本项目是第三方封装的C++引擎,比Python版要快很多。
Python版具体用法我不清楚,但总体大差不差,都是返回字典或者列表嵌套。你print(line)
输出的大概是一个字典,里面有哪些元素?分别取这些元素 print(line['元素'])
打印出来就是了。
蟹蟹作者,貌似明白了点,我再去琢磨一下!
你好作者,学习了您的代码我自己简单弄了个我需要的识别程序,但是关于这个程序的打包出了点问题,能不能帮帮我。救救孩子吧
因为我不太会你说的调用外置引擎这种操作(我怎样才能学习),确实应该像你说的paddle问题因为一开始报错就是paddle有问题解决完后新问题了弄了半天没成 QAQ 。你说的这个QPT我去试试,谢谢谢谢谢谢 太感谢了!
确实成功了,谢谢作者,我还会继续学习。太感谢了,太感谢了!!!
大佬,最近在学习您的代码,在执行时报了这个ImportError: DLL load failed while importing win32clipboard: 找不到指定的程序。这是少哪些东西呢?我看pywin32是正常安装的,谢谢~ 我的环境是python3.10的miniconda
谢谢大佬可以了! 顺便记录一下问题,在使用conda安装时报了RemoveError: 'pyopenssl' is a dependency of conda and cannot be removed from conda's operating environment,通过--force-reinstall conda解决
你好作者大大,小白在学习你的项目,在尝试封装打包项目为.exe程序,我试了pyinstaller行不通,作者你是怎么打包这个项目的呢?
@JerManh 我就是用pyinstaller来打包的,见 to_exe.py 。你是遇到了什么问题?
@hiroi-sora
1.使用pycharm2023.1.1打包,b编辑项目时提示Package requirement 'psutil==5.9.2' is not satisfied,缺少这个依赖包,是必要的吗?
2.忽略上一步缺少的依赖包,打包的结果在dist文件夹生成了 "Umi-OCR 文字识别.exe",但是执行出现这个提示框:
Unhandled exception in script:
"
Traceback (most recent call last):
File "main.py", line 4, in
@JerManh
当然,psutil是不可缺少的一个库,负责引擎进程的内存管理。
请使用 pip install -r requirements.txt
安装本项目所有依赖库,或者单独安装 psutil
。
@hiroi-sora 谢谢作者的耐心回复!这是我的第一个python项目,学得磕磕碰碰的,但我会继续学习。
你好作者,能讲解一下代码部分嘛。作为小白想学习一下并且增加点需要的功能教教吧QAQ