包教包会:用AI做一个免费的出租车发票识别工具,财务人员必看
简要介绍:这是一个给财务人员用的出租车发票识别工具,需要现成程序的,直接拉到文末下载。想自己动手写一个程序的,仔细看文章,哪怕你从来没写过代码,照着一步步操作,也能做出自己的发票识别程序,而且完全免费。
一、为什么要做这个工具
朋友在一个公司里做财务,经常与发票打交道。同事把要报销的发票交给他,他把明细一条条录进Excel。
他说最头疼的就是出租车发票,字小、模糊、有折痕,需要录入的内容包括车牌号、日期、上车时间、下车时间、金额,一张发票录入EXCEL需要几分钟,几十张下来半天时间就没了,时间都浪费在这些无意义的劳动上了。
看来,需要程序员出手拯救他了。
二、为什么不能直接用现成工具
常见的发票包括购买商品发票、机票发票、住宿发票、火车发票、出租车发票等,从形式上来说,有电子的、的纸质的。
电子发票一般是pdf、ofd、xml格式的,网上有很多工具能实现统计功能,用程序直接提取相关字段就能识别。
但是出租车发票就完全不管用了,因为出租车发票一般都是纸质的,要想识别,只能按照"拍照→OCR识别→提取字段"的流程。

OCR识别、提取字段,看起来简简单单的2句话,却能够难倒一大堆人。
先说OCR。拍照时倾斜、光照不均、有折痕等,都会导致OCR识别失败,需要先对原始图像作二值化、去噪、透视校正等预处理才能提升识别率。
下图是我用电脑版微信OCR识别出来的效果,车牌号、日期、金额都识别错了。

再说提取相关字段。车号、日期、金额、里程这些字段位置相对固定但不同地区的版式差异很大,使用通用OCR(比如Tesseract、百度飞桨文字识别)只能识别出一坨文字,需要自己写解析逻辑把字段抠出来,如果换一种发票版式,程序就会出错。
所以正确的做法是:直接用云厂商的专用出租车发票识别接口。阿里云、腾讯云、百度都有,它们用深度学习模型专门训练过,直接返回结构化数据:发票代码、发票号码、金额、上下车时间、里程、车牌号,这才是财务场景该用的东西。
三、为什么选腾讯云
主要是免费额度高:腾讯云,免费1000次/月;阿里云,免费200次/月;百度智能云,财务票据文字识别个人认证免费200次、企业认证免费500次。
腾讯云给得最多,个人用完全够了。
所以下面教程以腾讯云为例。
四、具体操作步骤
总体思路:写一个Python小程序,调用腾讯云的识别接口,把照片丢进去,自动吐出Excel表格。
下面一步步来,跟着做就行。
第一步:注册腾讯云,开通文字识别服务
链接是:https://console.cloud.tencent.com/ocr/overview
使用微信扫码即可登陆,然后申请开通文字识别服务。

新建一个密钥。点击常用工具中的密钥管理,弹出新窗口,点击继续使用。

点击新建密钥,这时会弹出新的密钥代码,这个非常重要,一定要保存好,而且不要告诉别人。把这个csv文件下载下来,后面有用。

第二步:在自己电脑上安装Python和必要的库
2.1安装Python
官方地址是:https://www.python.org/,这个地址在国内下载比较慢。
我一般是去阿里云的镜像网站下载,地址是:https://mirrors.aliyun.com/python-release/windows,目前最新版本是python-3.15.0rc2-amd64.exe。下载后,一路点击下一步安装即可。

2.2安装依赖
正常使用的话,还需要安装2个库,分别是tencentcloud-sdk-python和openpyxl。
打开cmd窗口,依次输入以下命令:
#升级 pip 到最新的版本
python -m pip install --upgrade pip
#将pip的源设置为国内清华大学的源,方便快速下载库文件
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
#安装2个库
pip install tencentcloud-sdk-python openpyxl
第三步:让AI帮你写程序
这一步最轻松,不用自己写一行代码,让AI来写。
打开元宝、DeepSeek或者任何你常用的AI对话工具,把下面这段提示词粘贴进去,它就会生成一个完整的Python程序:
我是一名财务人员,经常整理报销的发票,其中有一些是纸质的出租车发票,我拍照后用程序识别内容。请用 Python 帮我写一个完整的识别程序,要求如下:
【技术选型】
1. 使用腾讯云 OCR 的 RecognizeGeneralInvoice 接口,Type 指定为 "TaxiTicket"。
2. 不要使用旧版 TaxiInvoiceOCR(已下架),也不要用通用 OCR 自己解析。
3. SDK 使用 tencentcloud-sdk-python(最新 3.x 版本)。
4. 密钥写在 PY 文件开头,先空着,我后续自己填写。
5. 使用 Python 3.8+(兼容),相关 pip 库我已安装。
【关键踩坑提醒 —— 请务必按此编写,否则会报错】
1. 新版 SDK(3.x)中,出租车票数据不在顶层,真实返回路径是:
data → MixedInvoiceItems[0] → SingleInvoiceInfos → TaxiTicket → {具体字段}
2. TaxiTicket 里的字段名是:Code(发票代码)、Number(发票号码)、Total(金额)、
Date(日期,格式如"2026年06月01日")、TimeGetOn(上车)、TimeGetOff(下车)、
Mileage(里程)、LicensePlate(车牌号)、Place/Province(地区)。
3. 不要猜测字段名,严格按上述路径和名称取值。
4. 创建请求时,必须使用 from_json_string() 或 _deserialize 来设置参数,
不能直接对 req 对象赋值属性(如 req.Type = "TaxiTicket"),否则在某些 SDK 版本中
会导致参数名被截断(例如 "Type" 变成 "Ype")而报 UnknownParameter 错误。
正确做法示例:
params = {"Type": "TaxiTicket", "ImageBase64": base64_str}
req.from_json_string(json.dumps(params))
【功能需求】
1. 支持传入一个目录路径,批量识别该目录下所有 jpg/png 图片(不递归子目录)。
2. 支持传入单张图片路径。
3. client 在外部创建一次,循环里复用(避免签名冲突和重复创建)。
4. 对金额做格式校验(正则匹配数字格式),对发票号码和日期做非空校验。
5. 用发票代码 + 发票号码做去重检测。
【Excel 输出格式】
- 列顺序:序号、姓名、车牌号、日期、时间、金额、备注
- 序号:按日期排序后从 1 开始回填
- 姓名:留空
- 日期:将"2026年06月01日"格式化为"2026-06-01"
- 时间:将上车时间和下车时间合并为"14:11-15:31"格式
- 金额:转为数字类型(方便 Excel 求和)
- 备注:留空
- 用 openpyxl 生成 .xlsx 文件
【文件名规则】
1. 输出文件名格式:YYYYMMDD-HHMMSS_识别结果.xlsx(如 20260903-122322_识别结果.xlsx)
2. 时间戳在 Python 内用 datetime 生成,不要从命令行传中文文件名(避免 Windows GBK 乱码)
【运行方式】
提供一个最简的 Windows .bat 批处理,双击运行,bat 只写一行 python taxi_ocr.py . 即可
【代码风格】
1. 完整可运行,不要省略任何部分
2. 字段解析函数单独写成 parse_fields(raw),方便根据实际 JSON 微调
3. 校验函数单独写成 validate(fields)
4. 最终文件名为 taxi_ocr.py
第四步:填入你的密钥,准备运行
将AI生成的代码保存在本地文件夹中,命名为“taxi_ocr.py”。

用记事本打开这个文件,将第一步下载的密钥文件“SecretKey.csv”里的SECRET_ID和SECRET_KEY填写进去。

在文件夹里新建一个文本文件,名字为“run.bat”,内容为:
@echo off
if "%~1"=="" (
python taxi_ocr.py .
) else (
python taxi_ocr.py %*
)
pause

五、怎么用
这个程序有2种运行方式:
用法1:双击运行。直接双击run.bat,它会自动识别当前文件夹里所有的图片(只识别当前文件夹,不会扫描子文件夹里的图片)。
用法2:拖放图片。把一张或多张发票照片直接拖到run.bat图标上,松手就开始识别。
识别完成后,会自动生成一个Excel文件,文件名带时间戳,比如“20260903-232322_识别结果.xlsx”。文件名格式为:年月日-时分秒加“_识别结果.xlsx”,方便后续查找。
六、实际效果
测试一下,把刚才微信识别错误的1.jpg拖到“run.bat”上,程序就开始运行了,生成了一个“识别结果.xlsx”。

这张发票是倾斜的,车牌号和实收金额已经被线挡住了,日期那里有折痕,但是识别的完全正确,金额有2种,分别是金额和实收金额,程序自动提取了实收金额,更贴合实际。总体来说,效果非常好。

现在这个Excel表格的样式是朋友要求的,如果你需要不同的样式,直接跟AI提需求就行。
七、结语
到这儿,一个能用的出租车发票识别工具就做好了。
整个过程你没写过一行代码,全靠AI生成,但结果还不错。
如果需要成品,请到https://www.xcpdf.com/works/的更多作品页面下载,运行前记得替换成你自己的Key。
几个小提醒:
1.腾讯云免费额度是每月1000次,对个人完全够用。用完后按量计费也很便宜,几分钱一次。
2.拍照时尽量把发票放平、光线均匀,识别率会更高。
3.密钥不要发给别人。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
