程序员调用MODI的正确姿势(续)

作者:马健
邮箱:stronghorse_mj@hotmail.com
主页:http://www.comicer.com/stronghorse
发布:2021.02.21

一年前随着V1版MODI_Engine的发布,我发表了《程序员调用MODI的正确姿势》,说明为什么要通过MODI_Engine这样的桥接器来调用MODI进行OCR:
https://www.cnblogs.com/stronghorse/p/12302662.html

经过一年的实际应用,发现V1版MODI_Engine存在下列问题:

  1. 为了偷懒,V1采用了WM_COPYDATA消息机制实现进程间通信(interprocess communications,IPC),这就要求V1版MODI_Engine必须有消息队列,所以采用了基于隐藏对话框的GUI架构。
  2. 由于V1版MODI_Engine是一个带消息队列的GUI程序,即使其主界面(对话框)不可见,但在启动它时,操作系统仍然会尝试将用户交互的焦点(focus)转移给它。这就可能造成一个问题:如果通过MODI_Engine桥接的应用软件,例如说Pdg2Pic是在后台运行的,而前台应用软件,例如说WORD正在输入文字,这个时候如果OCR过程出错导致MODI_Engine崩溃退出,Pdg2Pic在后台自动重新启动MODI_Engine,则前台的WORD会因为焦点的切换而感觉闪烁,甚至时机赶得巧的话可能会出现输入的文字丢失。
  3. 用户必须自己手工把MODI_Engine及调用MODI_Engine的软件设置为以管理员权限运行,否则OCR会失败。
  4. 由于某些疏忽,V1版MODI_Engine在MODI的回调(callback)机制上出了点问题,导致用户不能中断OCR过程。

所以,MODI_Engine从V1版升级至V2版,进行了如下改进:

  1. IPC通信从消息机制改成共享内存(shared memory),因此不再要求MODI_Engine必须有消息队列,框架也就从基于对话框的GUI改成控制台(console)命令方式。
  2. 由于没有消息队列,因此可以做到完全的静默启动,即后台自动重启MODI_Engine时,前台应用不会再出现闪烁的问题。
  3. 在FreePic2Pdf_Lib中,自动以管理员权限启动MODI_Engine,因此即使用户疏忽,忘记设置以管理员权限运行,也不会造成OCR失败。
  4. 改进了回调机制响应,用户可以及时中断OCR过程。

对于V1版MODI_Engine,我用了40万页进行测试。V2版没那么夸张,但我也找了10万页,用不同的参数测试了3遍,以对参数进行优化。

(完)

上一篇:chapter3_t2


下一篇:C# 使用OCR识别中文