Notepad++宏脚本:自动化调用OCR镜像处理批量图片
📖 项目简介
在日常办公与数据处理中,OCR(光学字符识别)技术已成为从图像中提取文字信息的核心工具。无论是扫描文档、发票识别,还是街景路牌提取,OCR 都能极大提升信息录入效率。然而,面对大量图片时,手动上传、逐张识别的方式不仅耗时,还容易出错。
本文介绍一种高效解决方案:通过 Notepad++ 宏脚本实现对基于 CRNN 模型的 OCR 镜像服务的批量自动化调用。该 OCR 服务基于 ModelScope 的CRNN(卷积循环神经网络)模型构建,专为中文场景优化,支持中英文混合识别,具备高精度、轻量化、无 GPU 依赖等优势。
💡 核心亮点回顾: -模型升级:采用 CRNN 架构,显著优于传统 CNN 模型在复杂背景和手写体上的识别表现。 -智能预处理:集成 OpenCV 图像增强算法,自动完成灰度化、对比度提升、尺寸归一化。 -双模访问:支持 WebUI 可视化操作与 REST API 编程调用,灵活适配不同使用场景。 -CPU 推理优化:平均响应时间 < 1 秒,适合部署于普通服务器或本地 PC。
🎯 应用场景与痛点分析
典型业务需求
- 批量处理扫描版 PDF 转换后的图像页
- 发票、收据、合同等凭证类图像的文字提取
- 教材、讲义、笔记等教育资料数字化
- 街道标识、广告牌等户外图像内容采集
现有流程瓶颈
尽管该 OCR 服务提供了 WebUI 界面,但其设计初衷是单图交互式识别。当面临上百张图片时,用户需重复执行以下动作: 1. 打开浏览器 → 2. 点击上传按钮 → 3. 选择一张图片 → 4. 等待识别 → 5. 复制结果 → 6. 保存文件
这一过程极易疲劳且效率低下。
目标突破:我们希望通过Notepad++ 的宏录制功能 + HTTP 请求模拟,将整个流程自动化,实现“一键触发,批量处理”。
🛠️ 技术方案设计
整体架构思路
[本地图片列表] ↓ 生成 HTTP POST 请求文本(含 base64 编码图像) ↓ Notepad++ 宏脚本自动播放发送请求 ↓ 捕获返回 JSON 结果并格式化输出 ↓ 导出为结构化文本文件(如 .txt 或 .csv)关键技术点
| 技术组件 | 作用说明 | |--------|---------| |CRNN OCR API 接口| 提供/ocr端点接收 base64 图像并返回 JSON 识别结果 | |Base64 图像编码| 将本地图片转为字符串,便于嵌入 HTTP 请求体 | |cURL 命令模拟| 使用命令行方式发起 POST 请求(可被 Notepad++ 执行) | |Notepad++ 宏录制| 自动化执行一系列键盘输入,模拟人工粘贴与运行命令 | |正则表达式清洗| 提取 JSON 中的text字段,去除冗余信息 |
🚀 实践步骤详解
第一步:确认 OCR 服务 API 接口规范
启动镜像后,默认开放端口8080,API 文档可通过http://localhost:8080/api/docs查看。
✅ 支持的 API 端点
POST /ocr Content-Type: application/json请求体示例:
{ "image": "/9j/4AAQSkZJRgABAQEAYABgAAD..." }返回值示例:
{ "result": [ {"text": "你好,世界!", "confidence": 0.987}, {"text": "Welcome to Beijing", "confidence": 0.965} ], "code": 0, "msg": "Success" }⚠️ 注意:
image字段应为图像的 Base64 编码字符串(不含前缀如data:image/png;base64,)
第二步:准备图像 Base64 编码脚本(Python 示例)
创建一个 Python 脚本用于批量生成每张图片对应的 cURL 命令:
import base64 import os # 配置参数 IMAGE_DIR = r"C:\ocr_images" # 替换为你的图片目录 OUTPUT_FILE = "curl_commands.txt" API_URL = "http://localhost:8080/ocr" with open(OUTPUT_FILE, "w", encoding="utf-8") as f: for filename in sorted(os.listdir(IMAGE_DIR)): if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff')): filepath = os.path.join(IMAGE_DIR, filename) with open(filepath, "rb") as img_file: encoded_str = base64.b64encode(img_file.read()).decode('utf-8') # 生成 cURL 命令 curl_cmd = f'''curl -X POST "{API_URL}" \\ -H "Content-Type: application/json" \\ -d "{{\\"image\\": \\"{encoded_str}\\"}}" > output_{filename}.json echo. echo --- Processing {filename} completed --- echo. ''' f.write(curl_cmd + "\n") print(f"[✓] 已生成 {len(os.listdir(IMAGE_DIR))} 条 cURL 命令到 {OUTPUT_FILE}")运行此脚本后,将在当前目录生成curl_commands.txt,内容如下:
curl -X POST "http://localhost:8080/ocr" \ -H "Content-Type: application/json" \ -d "{\"image\": \"iVBORw0KGgoAAAANSUhEUgAA...\"}" > output_001.jpg.json echo. echo --- Processing 001.jpg completed --- echo. ...第三步:配置 Notepad++ 宏自动化执行
1. 打开 Notepad++
- 将
curl_commands.txt用 Notepad++ 打开 - 确保系统已安装
curl(Windows 可通过 Git Bash 或 WSL 获取)
2. 开始录制宏
菜单栏 →宏(M)→开始录制
3. 执行一次完整操作
假设你在终端环境下运行命令(如 CMD 或 PowerShell),执行以下动作: - 按Home键跳至行首 - 输入cmd /c(或powershell -c) - 按End键确保光标在末尾 - 按Enter键换行 - 按方向键下移一行
这样就完成了一条命令的“包装 + 执行 + 换行”逻辑
4. 停止录制并保存宏
菜单栏 →宏→停止录制然后点击宏 → 保存当前录制的宏,命名为Run_CURL_Line
第四步:播放宏实现批量执行
回到文档顶部,全选所有 cURL 命令行(Ctrl+A),然后: -宏 → Run a Macro Multiple Times…- 选择Run_CURL_Line- 设置为 “Run until the end of file” - 点击 Run
Notepad++ 将自动为每一行添加执行前缀,并逐行发送给系统 shell 执行!
最终,每个图片的识别结果将以output_xxx.jpg.json形式保存在当前目录。
🧩 后续结果提取与结构化处理
虽然原始输出是 JSON 文件,但我们可以通过另一个宏或脚本来提取纯文本内容。
示例:使用 Notepad++ 正则替换提取文本
假设 JSON 内容如下:
{"result": [{"text": "订单编号:20240405"}, {"text": "金额:¥998.00"}], "code": 0}目标:提取所有"text": "xxx"中的xxx
- 打开替换窗口(Ctrl+H)
- 查找模式:
"text":\s*"([^"]+)" - 替换为:
$1\r\n - 搜索模式选择“正则表达式”
- 全部替换
即可得到:
订单编号:20240405 金额:¥998.00再按文件名整理,即可形成结构化报表。
🔍 性能优化与避坑指南
✅ 成功关键点总结
| 项目 | 建议 | |------|------| |图像大小控制| 单图建议不超过 2MB,避免 Base64 过长导致请求失败 | |分批处理| 若图片过多,建议每 20~30 张拆分为一组,防止内存溢出 | |错误重试机制| 在 cURL 中加入--retry 3 --retry-delay 2提高稳定性 | |日志分离| 每个输出文件命名唯一,避免覆盖 |
❌ 常见问题及解决方法
| 问题现象 | 可能原因 | 解决方案 | |--------|--------|----------| | cURL 执行中断 | 命令中含有换行符\| 改用单行格式或使用 PowerShell 脚本 | | 返回空结果 | Base64 编码包含头部信息 | 确保只编码图像二进制数据 | | JSON 解析失败 | 输出混杂标准错误流 | 使用2>nul屏蔽错误输出 | | Notepad++ 卡顿 | 宏执行过快导致系统阻塞 | 添加延时脚本或改用外部批处理 |
💡 进阶建议:从宏转向批处理脚本
虽然 Notepad++ 宏适合快速原型验证,但在生产环境中更推荐将其升级为完整的自动化脚本。
推荐替代方案:PowerShell 批量 OCR 脚本
$apiUrl = "http://localhost:8080/ocr" $imageDir = "C:\ocr_images" $outputDir = "C:\ocr_results" foreach ($file in Get-ChildItem $imageDir | Where-Object {$_.Extension -in ".jpg",".png"}) { $bytes = [System.IO.File]::ReadAllBytes($file.FullName) $base64 = [System.Convert]::ToBase64String($bytes) $body = @{ image = $base64 } | ConvertTo-Json try { $response = Invoke-RestMethod -Uri $apiUrl -Method Post -Body $body -ContentType "application/json" $texts = $response.result.text -join "`n" Set-Content -Path "$outputDir\$($file.BaseName).txt" -Value $texts Write-Host "✅ Completed: $($file.Name)" } catch { Write-Error "❌ Failed: $($file.Name) - $_" } }✅ 优势:原生支持 JSON、异常处理、进度反馈,更适合长期维护。
📊 方案对比:三种批量 OCR 实现方式
| 方案 | 易用性 | 灵活性 | 学习成本 | 推荐场景 | |------|-------|--------|----------|-----------| |Notepad++ 宏 + cURL| ⭐⭐⭐⭐☆ | ⭐⭐⭐ | ⭐⭐ | 快速验证、临时任务 | |Python requests 脚本| ⭐⭐⭐☆ | ⭐⭐⭐⭐☆ | ⭐⭐⭐ | 中小型项目、需定制逻辑 | |PowerShell/Bash 批处理| ⭐⭐⭐☆ | ⭐⭐⭐⭐ | ⭐⭐☆ | Windows/Linux 自动化运维 |
🎯 总结:让轻量级 OCR 发挥最大价值
本文围绕一款基于CRNN 模型的轻量级 OCR 镜像服务,提出了一套完整的批量图像自动化识别方案。通过结合 Notepad++ 的宏录制能力与标准 HTTP 接口调用,成功实现了无需编程基础也能上手的“低代码”自动化流程。
📌 核心价值提炼: 1.打破 WebUI 单图限制:利用 API + 脚本实现真正意义上的批量处理。 2.零 GPU 成本运行:CPU 推理 + 轻量模型,适合边缘设备或老旧电脑。 3.中文识别精准度高:CRNN 架构对中文连笔、模糊字体更具鲁棒性。 4.可扩展性强:后续可接入数据库、Excel 导出、邮件通知等模块。
📚 下一步学习建议
如果你希望进一步深化这套系统的应用能力,建议沿着以下路径深入:
- 学习 Flask API 开发:了解如何自定义 OCR 接口参数(如语言检测、区域裁剪)
- 掌握正则表达式高级用法:提升从非结构化文本中提取关键字段的能力
- 探索 AutoHotkey 或 SikuliX:实现 GUI 级别的全自动化操作(适用于无 API 场景)
- 集成 into Excel/VBA:打造企业级文档处理流水线
✨ 最终愿景:
让每一个普通办公人员都能借助 AI 力量,摆脱重复劳动。
不需要懂深度学习,也能享受 CRNN 带来的高精度 OCR 体验。
技术的意义,正在于此。