hiroi-sora / Umi-OCR

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

建议:在识别结果文本中,增加未识别图片占位符! #565

Closed GOgo8Go closed 2 weeks ago

GOgo8Go commented 2 weeks ago

Issues

Expected behavior 预期的功能

问题:图片如果没有被识别出文字,在结果文件中,不会被记录,而是自动跳过,这就导致识别出来的文字和图片顺序错乱,不能一 一对应!

建议:给没有识别出文字的图片,增加占位符,比如:未识别;这样,OCR识别文字结果和图片顺序能对应起来,方便后续的其它操作。或者增加这么一个选项按钮,方便需要的人!

Approximate reference (optional) 近似的参考(可选)

No response

hiroi-sora commented 2 weeks ago

如下图,请取消勾选 输出忽略空白图片 。(它是默认启用的)

image

GOgo8Go commented 2 weeks ago

如下图,请取消勾选 输出忽略空白图片 。(它是默认启用的)

image

感谢回复!但是使用 V2.1.2 版,多次尝试,不管是勾选,还是不勾选 “输出忽略空白图片”选项,在生成的识别结果文本中,都跳过了未识别的图片;或者说,取消勾选 输出忽略空白图片 的话,未被识别出字符的,它应该显示什么呢?

hiroi-sora commented 2 weeks ago

请问你是输出为什么格式呢?

当输出为“标准txt”等格式时,如果不勾选 “输出忽略空白图片”,那么会输出文件名+空行。csv等格式同理。

不过一些输出格式,可能没有什么变化。

你可以告诉我你使用什么输出格式。我们可以小小的修改一下代码,让空白图片输出一些自定义的占位符。

GOgo8Go commented 2 weeks ago

请问你是输出为什么格式呢?

当输出为“标准txt”等格式时,如果不勾选 “输出忽略空白图片”,那么会输出文件名+空行。csv等格式同理。

不过一些输出格式,可能没有什么变化。

你可以告诉我你使用什么输出格式。我们可以小小的修改一下代码,让空白图片输出一些自定义的占位符。

你好,1.我使用的是默认的 p.txt 纯文本格式,不勾选 “输出忽略空白图片”,在生成的文本中,会跳过未识别的图片;2.尝试了使用 txt 标准格式,在生成的文本中,会有日期,空格,文件名等,会显得很乱(抱歉);3.希望,未被识别的图片,在生成的文本中,仅有一行占位符,比如,打上 “未识别” 就行了,这样,在批量OCR时,排版,选择单行无换行的话,识别的文字结果会和图片顺序保持一致,方便后续操作

hiroi-sora commented 2 weeks ago

p.txt 纯文本格式 在设计上就是只写入已识别的纯文本(而不包含提示信息)。所以无论是否勾选”输出忽略空白图片“,这种格式都不会记录未识别的图片。

不过,我们可以简单修改代码来添加占位符:

  1. 用编辑器打开 UmiOCR-data\py_src\ocr\output\output_txt_plain.py
  2. 找到最后面的 def print(self, res) 函数,将它替换为以下代码:

    def print(self, res):  # 输出图片结果
        textOut = ""
    
        # 100: 成功识别的图片 
        if res["code"] == 100:
            textOut += getDataText(res["data"])  # 获取拼接结果
            if not textOut[-1] == "\n":  # 确保结尾有换行
                textOut += "\n"
    
        # 101: 无文字的图片
        elif res["code"] == 101:
            textOut = "未识别\n"
    
        # 其他编号:识别出错的图片
        else:
            textOut = "识别出错\n"
    
        with open(self.outputPath, "a", encoding="utf-8") as f:  # 追加写入本地文件
            f.write(textOut)
  3. 保存文件,重启 Umi-OCR

你有编程经验的话,可以根据自己的需要,定制该输出器的功能。

GOgo8Go commented 2 weeks ago

修改代码后,问题已解决,十分感谢!祝越做越好!