GLM-OCR命令行工具开发:快速批处理图片文件夹

📅 发布时间:2026/7/5 20:24:12 👁️ 浏览次数:
GLM-OCR命令行工具开发:快速批处理图片文件夹
GLM-OCR命令行工具开发快速批处理图片文件夹你是不是也遇到过这样的烦恼手头有一大堆图片可能是扫描的文档、截图的资料或者产品照片需要把里面的文字提取出来。一张张打开复制粘贴效率低不说还容易出错。今天咱们就来解决这个问题。我将手把手带你开发一个Python命令行工具它能自动帮你遍历整个文件夹用GLM-OCR模型批量识别所有图片里的文字然后把结果整整齐齐地保存到一个文件里。整个过程完全离线高效又省心。即使你之前没怎么接触过命令行工具开发跟着这篇教程走也能轻松搞定。1. 为什么需要这个工具在开始敲代码之前我们先聊聊为什么要费这个劲。直接调用GLM-OCR的API不就行了吗当然可以但当你面对的不是一张图片而是一个装满了几十上百张图片的文件夹时问题就来了。你需要写循环、处理文件路径、组织输出格式、还得考虑万一中间某张图识别失败了怎么办。每次都要临时写脚本既重复又容易引入bug。把这个过程封装成一个命令行工具好处就太多了一键处理以后只需要在终端里输入一行命令指定图片文件夹和输出文件剩下的就交给工具自动完成。复用性强工具写好后在任何项目、任何时间都可以直接拿来用成了你的私人效率神器。结果规整可以自由选择输出格式比如把所有文字合并到一个TXT里方便阅读或者生成结构化的JSON方便其他程序进一步处理。过程透明工具运行时会告诉你正在处理哪张图成功还是失败处理结果保存在哪一切尽在掌握。说白了就是把复杂的、重复的操作变成简单的、可重复使用的命令。接下来我们就一步步把它实现出来。2. 准备工作环境与模型工欲善其事必先利其器。我们先来把环境和模型准备好。2.1 创建项目环境首先为我们的工具创建一个干净的工作空间。打开你的终端或命令行执行以下命令# 创建一个新的项目目录 mkdir glm-ocr-cli-tool cd glm-ocr-cli-tool # 创建一个虚拟环境推荐避免包冲突 python -m venv venv # 激活虚拟环境 # 在 Windows 上 venv\Scripts\activate # 在 macOS/Linux 上 source venv/bin/activate激活虚拟环境后你的命令行提示符前面通常会显示(venv)表示你现在处于这个独立的环境中。2.2 安装核心依赖我们的工具主要依赖GLM-OCR的Python库。在激活的虚拟环境中运行安装命令pip install glm-ocr这个命令会自动安装glm-ocr及其必要的依赖项如PyTorch、Transformers等。安装完成后你可以通过pip list命令查看是否安装成功。2.3 验证GLM-OCR基础功能在封装之前我们先写个简单的脚本来确保GLM-OCR能正常工作。在项目根目录创建一个名为test_ocr.py的文件内容如下from glm-ocr import GlmOcr # 初始化识别器 recognizer GlmOcr() # 指定一张测试图片的路径 test_image_path path/to/your/test_image.jpg # 请替换为你的图片实际路径 # 进行识别 try: result recognizer.recognize(test_image_path) print(识别成功) print(f识别文本{result[text]}) # 如果有多个文本框result[text]可能是一个列表这里简单打印 except Exception as e: print(f识别失败{e})将test_image_path替换成你电脑上一张包含文字的图片的真实路径例如./samples/hello.jpg然后在终端运行python test_ocr.py如果看到输出了图片中的文字恭喜你GLM-OCR的基础环境就搭建好了。如果遇到错误请根据提示检查图片路径是否正确或者依赖是否完整安装。3. 核心工具开发从脚本到命令现在进入正题我们来开发命令行工具的核心逻辑。我们将创建一个模块它主要做三件事解析用户输入的命令、遍历图片文件夹、调用OCR并保存结果。3.1 设计工具的参数一个好的命令行工具应该有清晰的参数说明。我们计划支持以下参数-i或--input:必需。指定包含图片的输入文件夹路径。-o或--output:必需。指定输出文件路径如./results.txt或./results.json。--format:可选。指定输出格式默认为txt可选json。--recursive:可选。是否递归遍历输入文件夹的子目录。--extensions:可选。指定支持的图片后缀默认为jpg,png,jpeg,bmp。3.2 构建主逻辑模块在项目根目录下创建一个名为ocr_tool.py的文件。这将是我们的主程序。首先导入必要的库并编写参数解析逻辑import argparse import os import sys from pathlib import Path import json from glm-ocr import GlmOcr def parse_arguments(): 解析命令行参数 parser argparse.ArgumentParser( descriptionGLM-OCR 批量图片文字识别命令行工具, formatter_classargparse.RawDescriptionHelpFormatter, epilog 示例: %(prog)s -i ./images -o ./result.txt %(prog)s -i ./docs --recursive -o ./output.json --format json ) parser.add_argument( -i, --input, typestr, requiredTrue, help输入文件夹路径包含需要识别的图片 ) parser.add_argument( -o, --output, typestr, requiredTrue, help输出文件路径例如./result.txt 或 ./result.json ) parser.add_argument( --format, typestr, choices[txt, json], defaulttxt, help输出文件格式txt (纯文本) 或 json (结构化数据)默认为 txt ) parser.add_argument( --recursive, actionstore_true, help是否递归遍历输入目录的子文件夹 ) parser.add_argument( --extensions, typestr, defaultjpg,png,jpeg,bmp, help支持的图片文件后缀用逗号分隔默认为 jpg,png,jpeg,bmp ) return parser.parse_args()接下来编写核心的图片处理函数。这个函数负责找到所有图片并逐一调用OCRdef process_images(input_dir, extensions, recursiveFalse): 遍历目录收集所有支持的图片文件 input_path Path(input_dir) if not input_path.is_dir(): print(f错误输入路径 {input_dir} 不是一个有效的文件夹。) sys.exit(1) image_extensions set(ext.lower().strip() for ext in extensions.split(,)) image_files [] # 根据是否递归选择遍历方法 if recursive: walk_method input_path.rglob(*) else: walk_method input_path.glob(*) for file_path in walk_method: if file_path.is_file() and file_path.suffix.lower()[1:] in image_extensions: image_files.append(file_path) if not image_files: print(f警告在 {input_dir} 中未找到任何扩展名为 {extensions} 的图片文件。) else: print(f找到 {len(image_files)} 张待处理图片。) return sorted(image_files) # 排序后返回保证处理顺序一致然后是OCR识别和结果保存的核心函数def run_ocr_and_save(image_paths, output_path, output_format): 执行OCR识别并将结果保存到文件 print(正在初始化GLM-OCR识别器...) recognizer GlmOcr() # 这里可以根据需要传入模型路径等参数 print(识别器准备就绪。\n) all_results [] successful 0 failed 0 for idx, img_path in enumerate(image_paths, 1): print(f[{idx}/{len(image_paths)}] 正在处理: {img_path.name}) try: # 调用GLM-OCR进行识别 result recognizer.recognize(str(img_path)) # 假设recognize返回一个字典包含‘text’等字段 ocr_text result.get(text, ) # 构建结果记录 record { file_name: img_path.name, file_path: str(img_path), text: ocr_text, status: success } all_results.append(record) successful 1 print(f 状态: 成功 | 字符数: {len(ocr_text)}) except Exception as e: print(f 状态: 失败 | 错误: {e}) record { file_name: img_path.name, file_path: str(img_path), text: , error: str(e), status: failed } all_results.append(record) failed 1 # 保存结果到文件 save_results(all_results, output_path, output_format) print(f\n处理完成成功: {successful}, 失败: {failed}) print(f结果已保存至: {output_path}) def save_results(results, output_path, output_format): 根据格式将结果保存到文件 output_file Path(output_path) # 确保输出目录存在 output_file.parent.mkdir(parentsTrue, exist_okTrue) if output_format txt: with open(output_file, w, encodingutf-8) as f: for res in results: f.write(f 文件: {res[file_name]} \n) f.write(f路径: {res[file_path]}\n) f.write(f状态: {res[status]}\n) if res[status] success: f.write(f识别文本:\n{res[text]}\n\n) else: f.write(f错误信息: {res.get(error, 未知错误)}\n\n) f.write(- * 50 \n\n) elif output_format json: with open(output_file, w, encodingutf-8) as f: json.dump(results, f, ensure_asciiFalse, indent2) else: raise ValueError(f不支持的输出格式: {output_format})最后把所有的函数串联起来形成主程序入口def main(): 主函数 args parse_arguments() print(GLM-OCR 批量处理工具启动...) print(f输入目录: {args.input}) print(f输出文件: {args.output} ({args.format.upper()}格式)) print(f递归扫描: {是 if args.recursive else 否}) print(f支持格式: {args.extensions}) print(- * 40) # 1. 收集图片 image_files process_images(args.input, args.extensions, args.recursive) if not image_files: return # 2. 执行OCR并保存 run_ocr_and_save(image_files, args.output, args.format) if __name__ __main__: main()至此一个功能完整的命令行工具模块就开发完成了。你可以直接运行python ocr_tool.py -h来查看帮助信息。4. 打包与使用让工具随处可用现在我们的工具还只是一个Python脚本需要在项目目录下用python ocr_tool.py来调用。为了让它在系统的任何地方都能像ls、cd那样直接使用我们需要进行“打包安装”。4.1 创建安装配置文件在项目根目录下创建一个名为setup.py的文件。这个文件告诉Python的打包工具如何安装我们的程序。from setuptools import setup, find_packages setup( nameglm-ocr-cli-tool, # 工具的名称 version0.1.0, # 版本号 description一个基于GLM-OCR的批量图片文字识别命令行工具, authorYour Name, # 你的名字 py_modules[ocr_tool], # 指定主模块 install_requires[ # 声明依赖 glm-ocr, # 如果glm-ocr有特定版本要求可以写 glm-ocrx.x.x ], entry_points{ # 关键创建命令行入口点 console_scripts: [ glm-ocr-batchocr_tool:main, # 命令名模块名:主函数 ], }, classifiers[ Programming Language :: Python :: 3, License :: OSI Approved :: MIT License, Operating System :: OS Independent, ], python_requires3.7, )4.2 安装工具到系统在项目根目录下确保虚拟环境已激活运行以下命令进行“可编辑模式”安装pip install -e .这个命令会将当前目录下的包以链接的方式安装到你的Python环境中。-e代表“editable”可编辑意味着你后续在ocr_tool.py中做的修改会立刻生效无需重新安装。安装成功后你应该能在终端中直接使用我们定义的命令glm-ocr-batch了。可以通过which glm-ocr-batchmacOS/Linux或where glm-ocr-batchWindows来验证。4.3 实际使用演示假设你的图片都放在~/Downloads/my_photos文件夹里现在想批量识别并把结果保存为JSON格式。基本使用打开终端输入以下命令glm-ocr-batch -i ~/Downloads/my_photos -o ./ocr_results.json --format json工具会开始处理并在屏幕上显示进度。处理完成后当前目录下会生成一个ocr_results.json文件。递归处理子文件夹如果你的图片分散在多层文件夹中加上--recursive参数glm-ocr-batch -i ~/Downloads/my_photos --recursive -o ./all_results.txt自定义图片格式如果你只想处理PNG和WebP格式的图片glm-ocr-batch -i ./screenshots -o ./text.txt --extensions png,webp查看帮助任何时候忘记参数都可以用-h查看glm-ocr-batch -h现在这个工具就完全属于你了。无论有多少图片需要提取文字都是一行命令的事。5. 总结与扩展思路跟着走完这一趟你已经成功将一个具体的需求批量OCR封装成了一个通用的、可复用的命令行工具。这个过程的核心思想其实适用于很多自动化任务明确输入输出、设计清晰参数、编写稳健逻辑、最后打包成便捷命令。用下来感觉这个工具基本能满足日常的批量识别需求了处理逻辑清晰输出格式也够用。当然它还有不少可以完善和扩展的地方如果你有兴趣继续打磨可以试试这些方向增加并发处理现在的工具是逐张图片处理的如果图片很多速度可能会是瓶颈。可以考虑使用concurrent.futures模块实现多线程或多进程同时处理多张图片大幅提升速度。支持更多输出格式除了TXT和JSON也许可以支持CSV方便用Excel打开分析或者支持Markdown将图片和识别文本关联起来生成报告。添加图片预处理有些图片可能倾斜、亮度不足或有噪点影响识别精度。可以在调用OCR之前集成OpenCV或PIL库进行简单的旋转、裁剪、二值化等预处理操作。更精细的结果控制GLM-OCR可能返回文本位置、置信度等信息。可以修改工具让用户选择是否输出这些详细信息或者只输出置信度高于某个阈值的文本。工具的开发就是这样先解决核心问题让它跑起来然后再根据实际使用中遇到的新需求一点点给它添砖加瓦。希望这个工具和这篇教程能成为你自动化工作流中的一个得力助手。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。