hiroi-sora / Umi-OCR

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

建议 #479

Closed wuit123 closed 2 months ago

wuit123 commented 2 months ago

Issues

Expected behavior 预期的功能

功能建议大致如下

ocr识别出来带有文字的<图片1> 将<图片1>保存到另一个<文件夹> 这个<文件夹>的(路径)要和原来一样 保存后的图片为<图片2>

举例 在D盘路径中提取出带有文字的图片1 到E盘 自动创建出和原来一样的(路径) D/sss/sss2/文件夹1/图片1 ↓ E/sss/sss2/文件夹1/图片2

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

No response

hiroi-sora commented 2 months ago

这个需求看起来比较小众,暂时不会添加到正式版软件中。

有相同需求的小伙伴可以点个表情或者回帖,人数会影响开发决策。

hiroi-sora commented 2 months ago

不过,这功能非常简单,您可以手动添加一些python代码来实现该功能。

例如:

1. 用记事本或编辑器,打开 UmiOCR-data\py_src\ocr\output\output_txt_individual.py

2. 在最后面,添加如下代码:(复制的时候,确保不要丢掉空格和缩进)

        # 拷贝图片到 E 盘相同路径
        print("图片路径:", res["path"])
        path1 = res["path"]
        path2 = "E" + path1[1:]  # 放到E盘。如果要放到其他盘,修改前面的 "E" 这个字符。
        os.makedirs(os.path.dirname(path2), exist_ok=True)
        import shutil

        shutil.copyfile(path1, path2)
        print(f"文件已从 {path1} 复制到 {path2}")

image

3. 执行OCR之前,保存文件类型勾选txt 单独文件

image

此时,就能实现:

D:/Pictures/Screenshots/test/tttt.png
↓
E:/Pictures/Screenshots/test/tttt.png
wuit123 commented 2 months ago

谢谢

其实这个功能对p图的人还是帮助挺大的 举例 有个游戏有3万张图片 而带有文字的图片只有200张 ocr识别出这200张图片后 把这200张图片复制导出到指定<文件夹> 然后自动创建出原来的图片的(路径)图片名也不变

简而言之就是告诉你3万张图片只有200张有字 然后帮你一键导出来 方便你p图 完事了

wuit123 commented 2 months ago

谢谢

其实这个功能对p图的人还是帮助挺大的 举例 有个游戏有3万张图片 而带有文字的图片只有200张 ocr识别出这200张图片后 把这200张图片复制导出到指定<文件夹> 然后自动创建出原来的图片的(路径)图片名也不变

简而言之就是告诉你3万张图片只有200张有字 然后帮你一键导出来 方便你p图 完事了

lforlgg commented 2 months ago

这个功能有点意思的,就是利用OCR,相当于人工智能去找某张图片了。如果代码多,影响主程序效率,可以做出插件吧(部分人,部分场景有需求)。 我觉得这个功能如果要做,顺手加上:ocr识别出来带有文字的(指定内容如“abcd”字样,甚至支持正则)。 如果有指定的文本内容,就单独提出来那张图,单独保存起来。找到了这样的页,还可以指定后续页忽略不再识别,或者继续直到全部识别完。

wuit123 commented 2 months ago

不用正则了 直接识别出大概有文字就行 也就是你这一套ocr程序就够了

一键全部复制带有文字的图片到<文件夹> 保留原来图片的路径.图片名字不变 没有文字的不用管

hiroi-sora commented 2 months ago

image

其实,应对这些千变万化的个人需求,一个更灵活的方法是:选择OCR结果保存为 csvjsonl

csvjsonl 中,存储了OCR任务的完整信息,如图片路径、文件名、OCR结果等。用户可以自己写个小脚本,去解析这个文件,进行自己想要的操作。正则匹配?模糊搜索?复制文件?根据内容给文件重命名?任何想法都可以实现。用户可以用任何自己熟悉的语言去编写脚本,没有安装开发环境的Windows中也可以用bat或者powershell,不会编程的可以问问GPT。

wuit123 commented 2 months ago

好的知道了 我是不太懂编程 有空折腾一下吧 预期功能如链接里的图片 image

lforlgg commented 2 months ago

其实,应对这些千变万化的个人需求,一个更灵活的方法是:选择OCR结果保存为 csvjsonl

csvjsonl 中,存储了OCR任务的完整信息,如图片路径、文件名、OCR结果等。用户可以自己写个小脚本,去解析这个文件,进行自己想要的操作。正则匹配?模糊搜索?复制文件?根据内容给文件重命名?任何想法都可以实现。用户可以用任何自己熟悉的语言去编写脚本,没有安装开发环境的Windows中也可以用bat或者powershell,不会编程的可以问问GPT。

还有此等妙用,太棒了。👍💕 学到了!宝藏软件! 我懂一点正则和js,给文本编辑器写点宏之类的去解析他,这下可以发挥一下了。有这个基础功能,加上有GPT帮助,这些任务变得很爽!😀 几百个以上的任务,已经准专业需求,自己花点时间学点基础语法,值得!

qwedc001 commented 2 months ago

下面是一个使用new bing执行简单prompt之后生成出来的程序,它足以满足issue中的请求。

import os
import json

# 读取JSONL文件
jsonl_file = "test.jsonl"

# 创建一个目录以存储带有文本的图像
output_dir = "output_images"
os.makedirs(output_dir, exist_ok=True)

# 读取JSONL文件中的每一行
with open(jsonl_file, "r", encoding="utf-8") as f:
    for line in f:
        data = json.loads(line)
        code = data.get("code")
        path = data.get("path")

        # 忽略代码为101的图像(未找到文本)
        if code == 101:
            continue

        # 从路径中提取文件名
        filename = os.path.basename(path)

        # 将图像移动到输出目录
        new_path = os.path.join(output_dir, filename)
        os.rename(path, new_path)
        print(f"已将图像 {filename} 移动到 {output_dir}")

print("带有文本的图像已移动到输出目录。")

更多的有关csv和json的食用方法,后续可能会专门开一个issue来讲一下,包括如何通过gpt类工具协助快速开发满足个人需求的小插件。

其实有考虑让他生成bat的,但是bat对json的支持和对编码的处理好像一坨,我想一下怎么解决。

附,prompt示例:

image

wuit123 commented 2 months ago

好的 感谢大佬