news 2026/4/19 7:45:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 7:37:35

深入理解ValueTask:优化异步调用

在C#编程中,异步编程已经成为处理I/O密集型任务的重要工具。随着异步编程的普及,Task和ValueTask成为开发者常用的两个类型。本文将深入探讨ValueTask的应用场景和优化方法,特别是在缓存结果的异步方法中使用ValueTask的优势。 异步方法和缓存 假设我们有一个异步方法GetS…

作者头像 李华
网站建设 2026/4/19 7:35:27

Hunyuan-MT-7B免配置镜像:内置模型权重+Tokenizer+Chat Template一体化

Hunyuan-MT-7B免配置镜像&#xff1a;内置模型权重TokenizerChat Template一体化 想体验顶尖的多语言翻译模型&#xff0c;但被繁琐的环境配置、模型下载和依赖安装劝退&#xff1f;今天&#xff0c;我们带来一个“开箱即用”的解决方案——Hunyuan-MT-7B免配置镜像。这个镜像…

作者头像 李华
网站建设 2026/4/19 7:24:36

PostgreSQL 16 单虚拟机主从搭建测试(学习记录)

一、搭建环境说明本次测试基于 PostgreSQL 16 版本&#xff0c;因只有一台虚拟机&#xff0c;故在同一台机器上创建两个实例&#xff1a;主库实例&#xff08;main&#xff09;、从库实例&#xff08;test&#xff09;&#xff0c;用于学习PostgreSQL主从复制的基本搭建流程。数…

作者头像 李华
网站建设 2026/4/19 7:23:31

N_m3u8DL-RE终极指南:如何高效下载加密流媒体视频?

N_m3u8DL-RE终极指南&#xff1a;如何高效下载加密流媒体视频&#xff1f; 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8…

作者头像 李华