Ollama OCR 大模型:让发票、社保、照片识别在本地跑起来
久等了!最近一直在给公司同事写各种脚本,所以这次关于 OCR 的内容确实拖得有点久。但因为这件事对咱们日常办公太关键了,所以还是认真整理了一篇出来,希望对大家有用。
一、为什么我对 OCR 这么上心?
平时给公司写脚本,接触最多的就是人事、财务、行政的同事。他们的需求听起来很杂,但总结下来几乎都离不开一件事:
把图片里的文字变成可编辑、可统计的数据。
举几个最常见的场景:
-
发票报销:一张张电子发票、纸质发票,要提取发票代码、发票号码、开票金额、开票日期; -
社保资料:身份证、社保卡、银行卡照片,要识别姓名、身份证号、卡号; -
制度文件:公司发的 PDF 或截图,要转成 Word 或 Excel 继续处理; -
照片归档:现场拍照的记录、合同照片,要提取文字做台账。
这些工作如果靠人工一条一条录入,费时费力还容易出错。所以我一直想通过脚本把 OCR 自动化,解放大家双手。
二、传统 OCR 方案的痛点
我前前后后试了不少方案,发现都有各自的坑。
1. Python 传统 OCR 库
像 pytesseract 这类开源库,胜在免费、离线,但识别效果一言难尽:
-
对中文识别率不稳定,尤其是字体复杂、背景干扰、表格排版时; -
对发票、社保、合同这种结构化文档,基本只能“读出文字”,很难“理解字段”; -
部署依赖多,不同电脑环境还容易报错。 -
而且打包exe会特别大
一句话:能跑,但不够准、不够智能。
2. 在线 OCR 大模型
现在市面上有很多免费的在线 OCR 大模型,比如阿里百炼、火山引擎、智谱等,识别效果确实好。但用了一段时间后,我发现几个问题:
-
免费额度有限:个人用用还行,一旦全公司推广,额度很快就见底; -
必须联网:财务发票、社保资料、身份证照片……这些东西要传到公网服务器,心里多少有点不踏实; -
隐私风险:虽然现在看不到明确的隐私问题,但“上传了”本身就是风险。公司业务数据、员工个人信息,能不出公司就不出公司。
所以我就开始琢磨:有没有一种方案,既能享受大模型 OCR 的准确率,又能完全本地运行、不花 API 钱、不上传数据?
答案就是:Ollama + 本地 OCR 大模型。
三、为什么选 Ollama?
Ollama 是我个人觉得目前部署本地大模型最省心的工具之一。
-
一键安装:Windows、macOS、Linux 都有官方安装包; -
模型仓库丰富:可以直接下载 GLM-OCR、Llama、Qwen 等模型; -
命令行简单: ollama run 模型名就能跑起来; -
API 兼容 OpenAI:写脚本调用时,基本把 URL 改成 http://localhost:11434就能用; -
完全离线:模型下载到本地后,后续推理不需要联网,数据不出本机。
对于我们这种“想自动识别发票、社保资料,但又不想把数据传出去”的场景,Ollama 非常合适。
四、实战:部署 GLM-OCR 并识别发票
下面我把这次实践的完整过程整理一下,照着做基本不会错。
步骤 1:下载安装 Ollama
打开 Ollama 官网,点击右上角 Download 按钮,选择 Windows 版本下载安装包即可。安装过程和普通软件一样,一路下一步就行。
步骤 2:关闭自动更新(可选但推荐)
安装完成后,打开 Ollama 设置,建议关闭 Auto-download updates,避免模型在使用过程中被自动升级或网络请求打断。如果 C 盘空间紧张,也可以把 Model location 改成 D 盘等其他目录,比如 D:\MODE。
步骤 3:下载 OCR 模型
Ollama 的模型库里有专门的 OCR 模型,这次我用的是 GLM-OCR。它有几个版本:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
普通办公电脑推荐 glm-ocr:q8_0,只有 1.6 GB,识别速度和效果都够用。
下载命令:
ollama run glm-ocr:q8_0
第一次运行会自动下载模型,耐心等待进度条跑完即可。
步骤 4:命令行快速测试
模型下载完成后,在命令行直接输入图片路径,就能让模型识别:
ollama run glm-ocr:q8_0
C:\Users\xiaobo_zhu\Pictures\Screenshots\1.png
我测试的是一份公司制度截图,模型很快就返回了完整的文字内容,包括津贴、奖金、加班费等条款,排版基本保持原样。
步骤 5:Ollama 客户端交互识别
除了命令行,Ollama 自带的客户端也能直接上传图片。选择模型 glm-ocr:q8_0,粘贴图片或截图,然后在输入框里写提示词:
识别这张图片中的所有文字,保持原有排版格式。
或者直接针对发票提要求:
识别发票,提取发票代码、发票号码、开票金额、开票日期,输出 Markdown 表格。
我上传了一张电子发票,模型直接返回了包含购买方、销售方、项目名称、金额、税率等信息的 HTML 表格,结构非常清晰。
步骤 6:验证完全离线也能跑
为了确认数据真的不会外传,我特意测试了没有网络连接的情况:拔掉网线或关闭 Wi-Fi 后,Ollama 依然能正常加载本地模型并完成 OCR 识别。这对财务、人事这种敏感数据场景来说,是一颗定心丸。
五、更进一步:用脚本批量识别发票
Ollama 最大的价值不只是“能聊天”,而是可以像调用本地 API 一样被脚本调用。
Ollama 默认监听 http://localhost:11434,接口兼容 OpenAI 格式。用 Python 写个脚本,把图片转成 base64 传进去,就能批量提取发票信息。
下面是一个最简示例:
import requests
import base64
# 读取图片并转 base64
withopen("invoice.png", "rb") as f:
image_base64 = base64.b64encode(f.read()).decode("utf-8")
# 调用本地 Ollama 模型
response = requests.post(
"http://localhost:11434/v1/chat/completions",
json={
"model": "glm-ocr:q8_0",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "识别发票,提取发票代码、发票号码、开票金额、开票日期,以 JSON 格式返回。"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_base64}"}}
]
}
]
}
)
print(response.json()["choices"][0]["message"]["content"])
基于这个思路,我已经做了一个小工具:
-
选择发票图片; -
自动调用 GLM-OCR 提取发票代码、号码、金额、日期; -
结果添加到表格,支持导出 Excel。
这样财务同事以后报销,直接拖图片进去,点“识别”,就能批量整理发票信息,再也不用人工录入。
六、总结一下
如果你也和我一样,经常需要:
-
识别发票、社保资料、身份证照片; -
把图片里的文字自动化整理成 Excel/Word; -
担心在线 API 的隐私和费用问题;
那么强烈建议试试 Ollama + GLM-OCR 这条路线。
它的核心优势就是三点:
-
完全离线:模型跑在本地,敏感数据不上传; -
一次下载,长期使用:没有 API 调用次数和费用的焦虑; -
脚本化友好:可以嵌入 Python、PowerShell 或任何能调用 HTTP 的工具,真正 做到办公自动化。
PS:其实我不是特别乐意写脚本,因为我发现业务+人事+财务其实很抵触这种,因为如果这种事都可以通过脚本来解决处理,他们是不是闲了,闲了的话领导是不是要安排其他工作,或者淘汰一部分人,工作是干不完的,但是我也没办法,我们领导让我搞,我也只能搞!一级一级压!
看完不过瘾,那就自己发一篇吧!








![表情[nanguo]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/nanguo.gif)
![表情[haobang]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/haobang.gif)
![表情[shuai]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/shuai.gif)
![表情[deyi]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/deyi.gif)
![表情[chi]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/chi.gif)



暂无评论内容