当前位置: 首页 > news >正文

GLM-OCR模型实战:清理与识别混乱C盘中的文档图片

GLM-OCR模型实战:清理与识别混乱C盘中的文档图片

你是不是也经常遇到这种情况:电脑C盘或者桌面上,堆满了各种截图、扫描件、发票照片,文件名全是“微信图片_20240101_123456.jpg”或者“IMG_0001.png”?想找一张上个月的报销发票,得一张张点开看,费时又费力。

我之前也深受其扰,直到我开始用GLM-OCR模型来帮我“看懂”这些图片。今天,我就来分享一个非常实用的脚本,它能自动扫描你的文件夹,识别图片里的关键信息(比如发票号、文档标题、日期),然后帮你把文件重命名得整整齐齐,甚至分门别类放好。整个过程,就像给你的数字桌面请了个智能管家。

1. 场景与痛点:为什么我们需要智能文档整理?

想象一下这几个日常场景:

  • 报销季:手机拍了一堆发票,一股脑儿丢进电脑,月底对着几十张名字雷同的图片头疼。
  • 资料收集:网上看到有用的图表、文章片段,习惯性截图保存,时间一长,根本记不住每张图是什么。
  • 工作交接:同事发来一堆产品截图或扫描件,文件名毫无信息量,查找特定内容全靠运气。

这些场景的共同痛点在于,信息被锁在了图片里,无法被系统快速检索和利用。手动整理效率极低,尤其是当图片数量成百上千时。我们的目标,就是利用GLM-OCR(光学字符识别)技术,将这些“哑巴”图片变成“会说话”的、可被轻松管理的数字资产。

这个方案的核心价值很简单:省时、省力、杜绝混乱。让你从繁琐的文件管理工作中解放出来。

2. 解决方案设计:让脚本成为你的文件管家

我们的智能整理脚本,思路清晰,分三步走:

  1. 扫描与读取:让脚本自动遍历你指定的文件夹(比如那个混乱的“下载”或“桌面”文件夹),找出所有图片文件。
  2. 识别与提取:对每一张图片,调用GLM-OCR模型,识别其中的文字。然后,像人一样从中找出最有价值的“关键信息”,比如发票号码、合同编号、文档标题或者日期。
  3. 执行与整理:根据提取到的关键信息,自动为图片文件生成一个清晰的新文件名(例如“发票_20240315_No123456.jpg”),或者将它移动到对应的分类文件夹中(例如“发票”文件夹)。

整个流程是自动化的,你只需要运行一次脚本,泡杯咖啡的功夫,混乱的文件夹就焕然一新了。

2.1 为什么选择GLM-OCR?

市面上OCR工具很多,选择GLM-OCR主要基于这几点考虑:

  • 易用性:它提供了清晰的API,集成到Python脚本中非常简单,几行代码就能调用。
  • 准确度:对于常见的打印体、扫描件,甚至一些清晰的手机拍照图片,识别准确率相当不错,足以满足日常文档整理需求。
  • 本地化优势:对中文文档、发票等本土化格式的支持很好,能准确识别中文混合数字、日期等格式。

当然,如果图片质量极差(如严重模糊、倾斜、背景复杂),任何OCR工具都可能出错。不过对于大多数电脑里存储的截图和扫描件,GLM-OCR完全能胜任。

3. 实战步骤:一步步搭建你的整理工具

下面,我们开始动手。请确保你的电脑上已经安装了Python。

3.1 环境准备与依赖安装

首先,打开你的命令行工具,创建一个新的项目文件夹,并安装必要的库。我们主要需要Pillow来处理图片,以及requests来调用GLM-OCR的API(这里假设你使用其API服务,如果使用本地模型,安装方式会略有不同)。

# 创建项目目录并进入 mkdir smart_doc_organizer && cd smart_doc_organizer # 安装必要的Python包 pip install pillow requests

3.2 核心脚本编写

接下来,创建一个名为organize_docs.py的Python文件。我们将把整个逻辑写进去。

import os import re import shutil from datetime import datetime import requests from PIL import Image import json # 配置部分 ============================================ # 1. 指定要整理的文件夹路径(这里以整理桌面为例,你可以改成任何路径) SOURCE_FOLDER = r"C:\Users\YourName\Desktop\待整理图片" # 请替换为你的实际路径 # 2. GLM-OCR API的配置(你需要替换成自己的API密钥和端点) API_KEY = "YOUR_GLM_OCR_API_KEY" # 请替换为你的实际API Key API_URL = "https://your-glm-ocr-api-endpoint.com/v1/ocr" # 请替换为实际的API地址 # 3. 定义关键信息提取规则(使用正则表达式) PATTERNS = { 'invoice_number': r'发票号码[::]?\s*([A-Za-z0-9]{8,20})', # 匹配发票号码 'date': r'(\d{4}[-年]\d{1,2}[-月]\d{1,2}日?)', # 匹配日期,如2024-03-15 'document_title': r'标题[::]?\s*(.{10,50})', # 匹配文档标题 } # 函数定义 ============================================ def call_glm_ocr(image_path): """调用GLM-OCR API识别图片中的文字""" try: with open(image_path, 'rb') as img_file: files = {'image': img_file} headers = {'Authorization': f'Bearer {API_KEY}'} response = requests.post(API_URL, files=files, headers=headers, timeout=30) if response.status_code == 200: result = response.json() # 假设API返回的文本在result['text']字段中,请根据实际API响应调整 full_text = result.get('text', '') return full_text else: print(f" 识别失败(HTTP {response.status_code}): {image_path}") return "" except Exception as e: print(f" 调用API时出错: {e}") return "" def extract_key_info(text): """从识别出的文本中提取关键信息""" info = {} for key, pattern in PATTERNS.items(): match = re.search(pattern, text) if match: info[key] = match.group(1).strip() # 如果没有匹配到特定模式,则取前50个字符作为备选标题 if 'document_title' not in info and text: info['document_title'] = text[:50].replace('\n', ' ').strip() return info def generate_new_filename(info, original_name): """根据提取的信息生成新的文件名""" base_name, ext = os.path.splitext(original_name) parts = [] # 优先使用发票号 if 'invoice_number' in info: parts.append(f"发票_{info['invoice_number']}") # 其次使用文档标题(截取前20字符,避免过长) elif 'document_title' in info: clean_title = re.sub(r'[\\/*?:"<>|]', "_", info['document_title'][:20]) # 移除非法文件名字符 parts.append(clean_title) else: parts.append("文档") # 添加日期信息 if 'date' in info: parts.append(info['date'].replace('年', '-').replace('月', '-').replace('日', '')) else: # 如果没有识别到日期,使用文件修改日期 parts.append(datetime.now().strftime("%Y%m%d")) # 添加原始文件名的一部分以防重名 parts.append(base_name[-4:]) new_name = "_".join(parts) + ext return new_name def organize_folder(folder_path): """主函数:整理指定文件夹""" if not os.path.exists(folder_path): print(f"错误:文件夹不存在 - {folder_path}") return print(f"开始整理文件夹: {folder_path}") supported_ext = ('.png', '.jpg', '.jpeg', '.bmp', '.tiff') for filename in os.listdir(folder_path): file_path = os.path.join(folder_path, filename) # 只处理图片文件 if os.path.isfile(file_path) and filename.lower().endswith(supported_ext): print(f"处理中: {filename}") # 步骤1: OCR识别 ocr_text = call_glm_ocr(file_path) if not ocr_text: print(f" 跳过(未识别到文字): {filename}") continue # 步骤2: 提取关键信息 key_info = extract_key_info(ocr_text) print(f" 识别到信息: {key_info}") # 步骤3: 生成新文件名并重命名 new_filename = generate_new_filename(key_info, filename) new_filepath = os.path.join(folder_path, new_filename) # 避免覆盖已有文件 counter = 1 while os.path.exists(new_filepath): name_part, ext_part = os.path.splitext(new_filename) new_filepath = os.path.join(folder_path, f"{name_part}_{counter}{ext_part}") counter += 1 os.rename(file_path, new_filepath) print(f" 重命名为: {os.path.basename(new_filepath)}") # (可选)步骤4: 按类型移动到子文件夹 # 例如,如果识别到“发票”,可以移动到“发票”子文件夹 # organize_by_category(new_filepath, key_info) print("整理完成!") # (可选)按类别归档函数 def organize_by_category(file_path, info): """根据识别信息将文件移动到分类文件夹""" category = None if 'invoice_number' in info: category = '发票' elif 'document_title' in info: if any(word in info['document_title'] for word in ['合同', '协议']): category = '合同' elif any(word in info['document_title'] for word in ['报告', '总结']): category = '报告' if category: category_folder = os.path.join(os.path.dirname(file_path), category) os.makedirs(category_folder, exist_ok=True) shutil.move(file_path, os.path.join(category_folder, os.path.basename(file_path))) print(f" 已移动到 [{category}] 文件夹") # 运行主程序 ============================================ if __name__ == "__main__": # 使用前,请务必修改上面的 SOURCE_FOLDER, API_KEY 和 API_URL if API_KEY == "YOUR_GLM_OCR_API_KEY": print("请先在脚本中配置你的GLM-OCR API密钥和地址。") else: organize_folder(SOURCE_FOLDER)

3.3 如何使用这个脚本?

  1. 获取API访问权限:你需要注册并获取GLM-OCR服务的API密钥和接口地址,替换脚本中API_KEYAPI_URL的值。
  2. 修改文件夹路径:将SOURCE_FOLDER变量的值,改成你电脑上那个混乱的、需要整理的文件夹的绝对路径
  3. 调整识别规则:脚本里的PATTERNS字典定义了如何从文本中找关键信息。如果你的发票格式是“No: 123456”,可以修改正则表达式来匹配它。这是让脚本更懂你的关键一步。
  4. 运行脚本:在命令行中,进入脚本所在目录,执行python organize_docs.py
  5. 查看结果:脚本会逐张图片处理,并在命令行中打印识别和重命名的过程。处理完成后,你的文件夹里的图片文件名就会变得一目了然。

4. 实际效果与扩展思路

运行脚本后,你会发现原来一堆Screenshot_2024-01-01-12-34-56.png的文件,变成了发票_20240315_No123456.jpg项目报告_2024Q1_abcd.png这样有意义的名称。找文件再也不用“开盲盒”了。

这个基础脚本已经能解决大部分问题,你还可以根据需求进一步扩展:

  • 内容归档:取消上面代码中organize_by_category函数调用的注释,脚本在重命名后,还能自动把发票、合同等文件移动到对应的子文件夹里。
  • 信息入库:将识别出的文字(如发票号、金额、日期)保存到Excel或数据库里,方便后续统计和查询。
  • 批量处理:结合计划任务,让脚本定期自动清理某个文件夹,实现完全自动化。
  • 处理压缩包:增加解压ZIP或RAR文件的功能,直接整理压缩包内的图片。

5. 总结

用GLM-OCR模型来整理杂乱的文档图片,是一个典型的技术赋能日常工作的例子。它没有什么高深的理论,就是用一个简单的脚本,把OCR能力和你具体的文件管理需求连接起来。

整个过程下来,最大的感受就是“自动化”带来的轻松。第一次配置稍微花点时间,但一劳永逸。以后无论收到多少乱七八糟的图片,运行一下脚本就搞定了。技术的目的就是为了解决问题,提升效率,这个小小的实践正好体现了这一点。

如果你也受困于混乱的文件管理,不妨试试这个思路。从最让你头疼的那个文件夹开始,一步步调整脚本,让它更适合你的文件格式和命名习惯。一旦跑通,你会发现整理文档不再是一件烦心事。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

http://www.jsqmd.com/news/664882/

相关文章:

  • 【权威实测报告】:GitHub Copilot / CodeWhisperer / Tabnine 生成代码覆盖率横向评测(含Jacoco+Istanbul双引擎验证数据)
  • C语言介绍:面向过程、高效且可用于开发多种软件的编程语言
  • 为什么公司买了 AI,销售和流程还是无法落地?丨阿隆向前冲 x NextLong
  • 2026优秀康养设计公司:医养融合与人文设计的实践探索 - 品牌排行榜
  • Omni-Vision Sanctuary 快速上手:Windows 系统下模型本地调用全流程
  • Windows PDF处理终极指南:Poppler预编译版完整解决方案
  • 颠覆性性能解放:5步掌握GHelper,让华硕笔记本重获新生
  • 2026年3月新风系统直销厂家口碑推荐,比较好的新风系统解决方案与实力解析 - 品牌推荐师
  • AO3镜像站终极指南:3步解决访问难题,畅享全球同人创作平台
  • yz-bijini-cosplay LoRA热加载性能测试:切换耗时<800ms实测数据与优化点
  • 为什么工业场景首选C# + YOLO?从底层原理到架构设计的深度剖析
  • Graphormer在药物发现中的落地应用:催化剂吸附与性质预测企业级案例
  • 阴阳师OAS脚本:免费开源自动化解决方案,彻底解放你的游戏时间
  • 阴阳师OAS脚本终极指南:从入门到精通的完整解决方案
  • 2026康复医院设计哪家好?行业机构选择参考 - 品牌排行榜
  • Python进阶之高级用法详细总结
  • Windows Cleaner:3步彻底解决C盘爆红的高效系统清理工具
  • 5分钟快速上手biliTickerBuy:B站会员购抢票工具的终极指南
  • InternLM2-Chat-1.8B数据库智能助手实战:MySQL安装配置与查询优化
  • 崩坏星穹铁道三月七小助手:全自动游戏助手解放你的游戏时间
  • XUnity.AutoTranslator:Unity游戏实时翻译的完整技术指南
  • 从单片机到SoC:如何理解芯片的‘定制化’与‘集成化’演进?
  • 2026海关事务咨询哪家口碑好?行业服务体验参考 - 品牌排行榜
  • QMCDecode终极指南:一键解密QQ音乐加密格式的macOS神器
  • 如何快速掌握TMSpeech:Windows实时语音识别工具的完整攻略 [特殊字符]
  • 别再只会点灯了!用FPGA+74HC595做个可加减的数码管计数器,附完整工程代码
  • 终极指南:如何用ncmdump工具解锁网易云音乐NCM加密格式,重获音乐播放自由
  • 避坑指南:大华海康SDK回调流对接JavaCV的那些‘坑’与优化思路
  • 零基础搞定Youtu-VL-4B-Instruct部署:详解缓存清理与模型路径调整,释放系统盘压力
  • 3分钟快速入门XUnity.AutoTranslator:打破语言壁垒的Unity游戏实时翻译神器