本地离线批量 OCR 实战:证件、发票、铭牌一键提取结构化信息

📅 2026/6/29 16:44:44
本地离线批量 OCR 实战:证件、发票、铭牌一键提取结构化信息
大家好这里是办公智能体广场。日常办公中身份证、营业执照、增值税发票、设备铭牌等图片经常需要录入系统或整理成表格。手动一行行抄录不仅麻烦还容易出错尤其是姓名、号码、地址、型号参数这类内容只要错一位后面就得重新检查。今天就介绍一个非常简单的方法图片识别提取支持本地离线运行断网也能用数据不出本机。选好场景并上传图片后就能按字段快速输出结构化信息适合证件录入、票据归档、铭牌参数采集等常见办公场景。一、需求分析小编这里就举一个身份证信息提取的案例注意本文介绍的方案不仅仅只是身份证任意图片都可以提取。只拿身份证一个场景讲例子。有200多个身份证照片 现在需要进行识别提取“姓名”“性别” 等信息到Excel表格。照片也有横着拍的竖着拍的。如下照片提取后生成一个总xlsx文档内容如下结果表里面除了有身份证信息列还会自动新增两列图片列原始图片的路径。OCR准确率这个也就是图片的模糊度有些图片可能很模糊那识别就可以准确度不高这个值越低就表示图片越模糊二、实现方案一小白上手打开鲸闲办公智能体广场找到 “图片识别提取”如图注意可断网使用获取 宫中浩气 “老罗软件”。然后将身份证图片输入还有选择具体的提取场景如下点击提取场景 “身份证” 就会自动带出提示词到输入框然后点击执行即可。提取的字段是可以修改的改提示词就可以。 比如内置好的身份证提示词如下这是中国居民身份证信息提取任务。提取字段和规则如下 ## 姓名 人像面左侧偏上区域的 2-4 个汉字人名。OCR 若把标签与人名粘在同一行只保留人名。无法辨认则留空。 ## 性别 只允许返回「男」或「女」其中一个字不要输出标签或其它说明。 ## 民族 民族称谓如「汉」「回」「蒙古」。只取民族名本身优先与证件原文一致。 ## 出生日期 年月日信息尽量与证件原文一致如「1986年12月11日」。若 OCR 月份12 或日期31可对照下方 18 位号码第 7-14 位YYYYMMDD修正。仍无法确认则留空。 ## 住址 完整户籍地址OCR 常分多行合并为一行保留省市区街道门牌号去掉标签词和多余空格。 ## 公民身份号码 18 位号码末位可为 X。只含 0-9 和 X无空格标点。少于 18 位或含非法字符则留空。“##”号 后面的就是要提取的字段名称Excel结果文件的列名称下面的就是该字段的解释。内置的提示词还有很多如下如果你有特殊的提取场景 但是系统内置的又没有 你也可以直接打开网页版DeepSeek 索要提示词将我们内置的例子给一个就行了比如提取速度介绍小编测试200多个身份证提取速度平均 “6秒”一张 在离线ocr软件中算是很快了。三、实现方案二Python脚本用 Python 来批量处理图片并进行 OCR 识别其实也是个很不错的选择尤其适合那些经常要整理证件照片、票据截图、表单扫描件、标签铭牌或者需要批量提取图片文字内容的朋友。优势- 可以批量处理大量图片文件效率很高- 能按文件夹自动分组识别适合一批一批整理材料- 可以把识别结果统一导出为 txt、json、Excel 等格式- 逻辑可定制后续想改识别规则或增加字段提取也比较方便- 免费开源无需额外购买软件- 支持断网运行数据始终保存在本地更安全劣势- 需要一定的 Python 基础- 第一次使用需要安装依赖库- 如果图片质量较差、内容排版复杂识别结果可能需要人工校对- 如果还要做复杂字段提取、表格还原、版面分析脚本调试会花一些时间这里我给大家分享一个简单的 Python 脚本可以把总目录下不同子文件夹中的图片分别进行 OCR 识别并按文件夹输出对应的识别结果文件import os import json from paddleocr import PaddleOCR # 总目录里面每个子文件夹会单独识别 input_root rpath\to\your\folders # 输出目录 output_root rpath\to\your\output # 如果输出目录不存在则创建 if not os.path.exists(output_root): os.makedirs(output_root) # 支持的图片格式 image_exts (.jpg, .jpeg, .png, .bmp, .webp, .tiff) # 初始化 OCR ocr PaddleOCR(use_angle_clsTrue, langch) def run_ocr_on_image(image_path): result ocr.ocr(image_path, clsTrue) lines [] raw_items [] if result and result[0]: for item in result[0]: box, (text, score) item text str(text).strip() if not text: continue lines.append(text) raw_items.append({ text: text, score: float(score), box: box }) return { file_name: os.path.basename(image_path), full_text: \n.join(lines), items: raw_items } def process_folder(folder_path, output_root): folder_name os.path.basename(folder_path) image_files [ f for f in os.listdir(folder_path) if f.lower().endswith(image_exts) ] image_files.sort() if not image_files: print(f跳过空文件夹{folder_path}) return txt_output_path os.path.join(output_root, f{folder_name}.txt) json_output_path os.path.join(output_root, f{folder_name}.json) txt_parts [] json_results [] for file_name in image_files: image_path os.path.join(folder_path, file_name) print(f识别中{image_path}) ocr_result run_ocr_on_image(image_path) json_results.append(ocr_result) txt_parts.append(f {file_name} ) txt_parts.append(ocr_result[full_text]) txt_parts.append() with open(txt_output_path, w, encodingutf-8) as f: f.write(\n.join(txt_parts)) with open(json_output_path, w, encodingutf-8) as f: json.dump(json_results, f, ensure_asciiFalse, indent2) print(f已输出{txt_output_path}) print(f已输出{json_output_path}) # 遍历总目录下所有子文件夹 for folder_name in os.listdir(input_root): folder_path os.path.join(input_root, folder_name) if not os.path.isdir(folder_path): continue process_folder(folder_path, output_root) print(所有文件夹处理完成)使用时先准备一个总目录把每一组待识别的图片分别放进不同的子文件夹中。然后修改脚本中的输入路径和输出路径运行后就可以按文件夹自动完成 OCR 识别并分别生成对应的识别结果。脚本不会修改原始图片只会在输出目录生成新的识别结果文件适合批量整理证件图片、票据照片、表单扫描件、标签铭牌等 OCR 材料。不过Python 脚本更适合有一定编程基础的用户如果只是偶尔处理或者希望操作更省心那么前面的离线 OCR 方案和智能识别方案会更方便。四、总结面对大量图片文字提取、证件识别、票据识别、标签识别等需求手动一张张上传、一张张复制内容不仅效率低还很容易出错。无论是离线 OCR 工具、OCR AI 自动识别还是 Python 脚本本质上都是用工具替代重复劳动。想省心省事可以直接用离线 OCR 方案想通过文字描述需求完成识别和整理可以用 OCR AI 自动化如果需要更强的批量处理和自定义能力也可以选择 Python 脚本。选对方法之后原本繁琐的图片文字整理工作就能更快、更规范地完成。