• 程序员调用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遍,以对参数进行优化。

    (完)

  • 相关阅读:
    Xamarin.Android开发实践(十八)
    Xamarin.Android开发实践(十七)
    smokeping网络监控
    Cobbler自动化部署
    在线编辑器KindEditor的使用
    前端之快速创建标签
    Tornado之自定义异步非阻塞的服务器和客户端
    算法基础知识之树、二叉树
    Tornado之实例和扩展
    Scrapy源码研究前戏
  • 原文地址:https://www.cnblogs.com/stronghorse/p/14425373.html
Copyright © 2020-2023  润新知