hiroi-sora / Umi-OCR

OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。
MIT License
23.48k stars 2.39k forks source link

粘贴图片功能 结果本身为文字的 如何筛选过滤 #413

Closed kyon777 closed 4 months ago

kyon777 commented 4 months ago

大佬,这个代码只能筛选 截图或者粘贴图片的结果. 如果 我本身复制的结果是 文字(21156一二三四),然后想通过 粘贴图片的功能 筛选出21156.请问是修改哪一段的代码

Originally posted by @kyon777 in https://github.com/hiroi-sora/Umi-OCR/issues/403#issuecomment-1987396098

hiroi-sora commented 4 months ago

下面这个方法可以强制过来所有OCR结果。对所有OCR任务生效(比如截图,粘贴,批量图片,文档识别)。

  1. 打开 UmiOCR-data\py_src\mission\mission_ocr.py
  2. 开头加一句 import re
  3. 往下,找到 msnTask 函数,在 return res 之前加上:
            for r in res["data"]:
                r["text"] = re.sub(r"\D", "", r["text"])  # 删除非数字字符
                r["end"] = ""  # 可选,强制去除所有换行

    注意缩进层级,上述代码必须包含在if res["code"] == 100:的块内,如下图所示。

image

hiroi-sora commented 4 months ago

未来我会考虑设计一套后处理机制,让用户编写自定义模块(如文本过滤)更容易,并且能在前端UI控制开与关。

kyon777 commented 4 months ago

大佬,根据你的修改,我要的效果还是没有出来,这个只是 粘贴板是图片的情况下才能筛选, 如果粘贴板本身是text的情况下,他是不能筛选的, 例如我粘贴板本身就是 一段 文字( "一二三四 1234 " ),然后按了下 ORC的重复截图快捷键,筛选出 1234. 最终找到
Umi-OCR_Paddle_v2.1.0\UmiOCR-data\py_src\image_controller 的 screenshot_controller.py 在 getpaste函数下

    elif mimeData.hasText():
        text = mimeData.text()
        res = {"type": "text", "text": text}

修改成

    elif mimeData.hasText():
        text = mimeData.text()
        textNum =re.sub(r'[^\d\s]', '', text)
        Newtext = ''.join(textNum)
        Clipboard.setText(Newtext)
        res = {"type": "text", "text": text}

才达到了我想要的效果,感谢大佬,

kyon777 commented 4 months ago

建议大佬考虑,重复截图加个选项,可以增加 自定义坐标,这样就不用每次 打开软件都要先截图一次 才可以使用这个功能了

hiroi-sora commented 4 months ago

如果粘贴板本身是text的情况下

哦哦,我之前理解错了你的意思,抱歉~ 你的改法确实可行的。

重复截图加个选项

技术上不难,主要是不想在UI里塞太多东西让软件变得复杂。我考虑一下。