一、为什么我对本地 OCR 这么执着?
在写脚本的过程中,我对接最多的就是 HR、财务、行政这几个岗位的同事。他们的需求看似五花八门,归根结底都指向同一件事:把图片里的文字提取出来,变成可以编辑、可以统计的结构化数据。
最典型的几个场景包括:
- 发票报销:电子发票、纸质发票混着来,需要抓取发票代码、号码、金额、开票日期;
- 社保资料:身份证、社保卡、银行卡照片,要识别姓名、证件号、卡号;
- 公司制度文件:PDF 文件或者截图,需要转成 Word / Excel 再统一处理;
- 现场照片归档:外出拍摄的合同、记录单据,要提取文字做台账。
这些事情如果全靠人工敲键盘录入,不仅耗时,还极易出错。所以我一直琢磨着,能不能用脚本把 OCR 这件事彻底自动化。
二、传统 OCR 方案踩过的那些坑
为了找到合适的方案,我前前后后试了不少工具,每个都有让人抓狂的地方。
1. 传统 Python OCR 库
比如 pytesseract 这类老牌开源库,优点是免费、完全离线,但实际效果真的让人不敢恭维:
- 中文识别率忽高忽低,遇到花体字、复杂背景、表格排版就翻车;
- 对发票、社保、合同这类结构化文档基本无能为力——它只能"读出字",却读不懂"字段含义";
- 依赖链冗长,换台电脑就可能报错;
- 打包成 exe 后体积爆炸。
一句话总结:能跑,但不准、也不够聪明。
2. 在线 OCR 大模型 API
阿里百炼、火山引擎、智谱这类平台确实效果惊艳,我用了相当长一段时间。但后来还是决定弃用,原因如下:
- 免费额度捉襟见肘:个人玩玩还行,全公司推广很快就被刷光;
- 强制联网:财务发票、员工身份证、社保资料……一旦上传到公网服务器,心里难免犯嘀咕;
- 数据出境风险:目前虽然没爆出明确的隐私事件,但"数据上传"这件事本身就是风险点。公司业务数据、员工个人信息,能留在内网就别流出去。
于是我开始寻找一种既能享受大模型 OCR 的高准确率,又能完全本地运行、不花 API 费用、不上传数据的方案。最终答案就是:Ollama + 本地 OCR 大模型。
三、为什么最终选了 Ollama?
Ollama 应该是我目前用过最省心的本地大模型部署工具,没有之一。
下载地址: https://ollama.com/
- 安装零门槛:Windows、macOS、Linux 都有官方安装包,傻瓜式下一步;
- 模型仓库齐全:GLM-OCR、Qwen、Llama 等主流模型一键拉取;
- 命令行极简:
ollama run 模型名直接开跑; - API 兼容 OpenAI 接口:写脚本调用时,只需把 base_url 改成
http://localhost:11434即可无缝对接; - 完全离线运行:模型一旦下载到本地,后续推理再也不用联网,数据始终留在这台机器上。
对于我们这种"想自动识别发票、社保资料,又绝对不想让数据出公司"的需求,Ollama 简直是为它量身定做的。
四、完整实战:部署 GLM-OCR 并识别发票
下面把整个部署和调用过程完整还原,按步骤走基本不会出问题。
步骤 1:下载并安装 Ollama
访问 Ollama 官网,点击右上角 Download 按钮,选择 Windows 版本的安装包下载即可。安装过程和装普通软件一样,一路"下一步"就能搞定。
步骤 2:关闭自动更新(强烈建议)
安装完毕后,进入 Ollama 设置,务必关闭 "Auto-download updates" 这一项。原因是模型在推理过程中如果触发自动升级,可能会打断工作流,甚至带来不必要的网络请求。
如果你的 C 盘空间比较紧张,也可以把 Model location 路径改到 D 盘等容量大的分区,例如 D:\OLLAMA_MODELS。
步骤 3:拉取 OCR 模型
Ollama 官方仓库里就有专门的 OCR 模型,本次我选用的是 GLM-OCR。它主要分为以下几个版本:

| 版本 | 大小 | 适用场景 |
|---|---|---|
glm-ocr:latest | 2.2 GB | 标准版,精度与速度比较均衡 |
glm-ocr:q8_0 | 1.6 GB | 量化版,体积更小,推荐普通办公电脑 |
glm-ocr:bf16 | 2.2 GB | 高精度版,对显卡有一定要求 |
普通办公机推荐 glm-ocr:q8_0,仅 1.6 GB,识别速度和准确率都够用。拉取命令如下:
Bashollama run glm-ocr:q8_0首次运行会自动下载模型文件,等进度条跑完即可。
步骤 4:命令行快速验证
模型下载完成后,可以直接在命令行传入图片路径进行测试:
Bashollama run glm-ocr:q8_0 C:\Users\xiaobo_zhu\Pictures\Screenshots\1.png我测试的是一份公司制度文件的截图,模型很快返回了完整的文字内容,津贴、奖金、加班费等条款的排版基本和原图保持一致。
步骤 5:Ollama 客户端交互识别
除了命令行,Ollama 自带的桌面客户端也支持直接上传图片。操作流程很简单:
- 在模型下拉框中选择
glm-ocr:q8_0; - 把图片粘贴或拖入输入区;
- 在输入框中写提示词,例如:
Text识别这张图片中的所有文字,保持原有排版格式。或者针对发票这样写:
Text识别发票,提取发票代码、发票号码、开票金额、开票日期,输出 Markdown 表格。我实测上传了一张电子发票,模型直接返回了一个 HTML 表格,里面清清楚楚地列出了购买方、销售方、商品名称、金额、税率等字段,结构非常工整。
步骤 6:验证完全离线运行
为了打消"数据会不会偷偷上传"的顾虑,我专门做了一次断网测试:拔掉网线、关掉 Wi-Fi 后,Ollama 依然能正常加载本地模型并完成 OCR 识别。
这对财务、人事这类接触敏感数据的岗位来说,绝对是一颗定心丸。
总结:通过 Ollama 部署 GLM-OCR,本质上是把"大模型级别的 OCR 能力"装进了一台普通的办公电脑里——离线、免费、隐私安全,对于需要批量处理发票、证件、合同的企业和团队来说,是目前性价比最高的一条路径。