一个基于Flask框架开发的智能发票管理系统,支持发票图片上传与OCR识别,提供发票信息管理、数据导出及统计分析等功能。系统采用腾讯云OCR API进行发票文字识别,实现发票信息的智能提取与处理。
- 📤 发票图片和PDF文件上传与预览
- ✏️ 支持手动创建发票,无需上传图片
- 🔍 基于腾讯云OCR API的发票文字识别
- 📄 支持直接识别PDF发票第一页
- 💾 发票数据结构化处理与存储
- 📋 发票列表展示与多维度排序
- 🔎 发票详情查看与编辑
- 📁 项目分类管理功能
- 👁️ 发票图片与PDF预览功能
- 📊 发票数据导出(CSV、Excel格式)
- 📈 发票统计分析与图表展示
- 📱 响应式网页设计,适配多种设备
- ⏱️ 定时任务自动清理过期文件
最新版本 v1.3 (2024.04.04)
- ✅ 添加手动创建发票功能,无需上传图片即可录入信息
- 🐛 修复未分类发票统计显示问题
- 🔧 添加对image_path为None的检查,避免模板渲染错误
查看完整的更新历史请参考 CHANGELOG.md
确保已安装Docker和Docker Compose:
git clone https://github.com/chiupam/invoiceOCR.git
cd invoiceOCR
cp .env.example .env
# 仅需配置基本环境变量,API密钥通过Web界面配置
docker-compose up -d
浏览器访问 http://localhost:5001 即可使用应用。首次访问时,系统会引导您完成腾讯云API密钥设置。
- 查看容器日志
docker-compose logs -f
- 停止容器
docker-compose down
- 重新构建(更新代码后)
docker-compose up -d --build
我们提供了多个镜像源以适应不同地区用户的需求:
# 拉取最新版本
docker pull chiupam/invoiceocr:latest
# 拉取特定版本
docker pull chiupam/invoiceocr:v1.3
# 运行容器
docker run -d -p 5001:5001 -v $(pwd)/data:/app/data --name invoice_ocr chiupam/invoiceocr:latest
# 拉取最新版本
docker pull ghcr.io/chiupam/invoiceocr:latest
# 拉取特定版本
docker pull ghcr.io/chiupam/invoiceocr:v1.3
# 运行容器
docker run -d -p 5001:5001 -v $(pwd)/data:/app/data --name invoice_ocr ghcr.io/chiupam/invoiceocr:latest
上面的命令使用了卷挂载 -v $(pwd)/data:/app/data
来保证数据在容器重启后不会丢失。您可以根据需要修改本地路径。
git clone https://github.com/chiupam/invoiceOCR.git
cd invoiceOCR
# 创建虚拟环境
python3 -m venv .venv
# 激活虚拟环境 (Linux/Mac)
source .venv/bin/activate
# 激活虚拟环境 (Windows)
# .venv\Scripts\activate
激活后,命令行前面会出现(.venv)
前缀,表示当前处于虚拟环境中。后续所有命令都应在此环境中执行。
# 确保在虚拟环境中执行
(.venv) pip3 install -r requirements.txt
创建 .env
文件(可以复制 .env.example
并根据需要修改):
# 复制示例配置
(.venv) cp .env.example .env
注意:与旧版本不同,API密钥现在不需要在环境变量中配置,而是在Web界面中设置。
(.venv) python3 run.py
应用将在 http://127.0.0.1:5001/ 运行。首次运行时,系统会自动初始化数据库并引导您完成必要的设置。
首次访问系统时,会自动跳转到设置页面,需要配置以下信息:
- 腾讯云OCR API密钥(SecretId和SecretKey)
- 可在腾讯云控制台获取
- 需要开通腾讯云OCR服务(增值税发票识别)
配置完成后,即可开始使用系统的所有功能。
(.venv) deactivate
- 依赖安装失败:尝试更新pip后再安装
python3 -m pip install --upgrade pip
- 数据库初始化错误:确认是否有足够权限创建文件,或检查data目录是否存在
- OCR识别失败:检查
.env
文件中的腾讯云API密钥是否正确
InvoiceOCR/
├── app/ # Web应用主目录
│ ├── static/ # 静态资源
│ │ ├── css/ # CSS样式
│ │ │ └── style.css # 全局样式表
│ │ ├── js/ # JavaScript文件
│ │ │ ├── edit_invoice.js # 发票编辑页面脚本
│ │ │ ├── index.js # 首页脚本
│ │ │ ├── main.js # 主要公共脚本
│ │ │ └── upload.js # 上传页面脚本
│ │ └── uploads/ # 上传的发票图片存储目录
│ ├── templates/ # HTML模板
│ │ ├── errors/ # 错误页面模板
│ │ │ ├── 404.html # 404错误页面
│ │ │ └── 500.html # 500错误页面
│ │ ├── base.html # 基础布局模板
│ │ ├── index.html # 首页模板
│ │ ├── invoice_create.html # 发票创建页面
│ │ ├── invoice_detail.html # 发票详情页面
│ │ ├── invoice_edit.html # 发票编辑页面
│ │ ├── project_detail.html # 项目详情页面
│ │ ├── project_form.html # 项目编辑表单
│ │ ├── project_list.html # 项目列表页面
│ │ ├── settings.html # 设置页面
│ │ └── upload.html # 上传页面
│ ├── __init__.py # 应用初始化
│ ├── config.py # 应用配置
│ ├── models.py # 数据模型
│ ├── routes.py # 路由定义
│ └── utils.py # 辅助函数
├── core/ # 核心功能模块
│ ├── __init__.py # 模块初始化
│ ├── invoice_export.py # 发票数据导出功能
│ ├── invoice_formatter.py # 发票数据格式化
│ ├── ocr_api.py # OCR API调用功能
│ ├── ocr_process.py # OCR结果处理
│ └── README.md # 核心模块说明文档
├── data/ # 数据存储目录
│ ├── invoices.db # SQLite数据库文件
│ ├── output/ # 导出文件存储目录
│ └── README.md # 数据目录说明文档
├── tools/ # 工具脚本目录
│ ├── clean_temp_files.py # 临时文件清理工具
│ ├── db_backup.py # 数据库备份工具
│ ├── db_init.py # 数据库初始化脚本
│ ├── db_query.py # 数据库查询工具
│ ├── generate_test_data.py # 测试数据生成工具
│ └── README.md # 工具脚本说明文档
├── test/ # 测试目录
│ ├── fixtures/ # 测试数据目录
│ │ └── invoices/ # 测试发票图片
│ └── README.md # 测试说明文档
├── .env.example # 环境变量示例文件
├── .gitignore # Git忽略文件
├── docker-compose.yml # Docker Compose配置
├── Dockerfile # Docker构建文件
├── LICENSE # 许可证文件
├── README.md # 项目说明文档
├── requirements.txt # 项目依赖
└── run.py # 应用启动脚本
- 点击左侧导航栏中的"上传发票"
- 选择一个项目分类(可选)
- 拖拽发票图片或PDF文件到上传区域,或点击选择文件
- 系统会自动识别并处理发票内容(对于PDF文件,会识别第一页)
- 上传后自动跳转到发票详情页进行查看和编辑
- 点击左侧导航栏中的"项目管理"
- 可以创建、编辑、删除项目
- 点击项目卡片查看该项目下的所有发票
- 未分类发票会显示在"未分类"区域
- 在首页可以看到所有上传的发票列表
- 可以通过点击表头排序发票
- 控制台上方显示统计数据和图表
- 可以根据项目筛选发票列表
- 点击发票列表中的发票行即可查看详情
- 点击发票图片可以在弹窗中查看大图,支持放大缩小功能
- 对于PDF文件,会显示PDF阅读器方便查看
- 点击"编辑"按钮修改发票信息,所有金额字段会自动处理货币符号
- 点击"删除"按钮删除发票
在发票详情页,可以选择导出格式(CSV或Excel)导出发票数据。 在项目详情页,可以导出整个项目的发票数据为Excel。
首页提供"清理导出文件"按钮,可以手动清理已导出的临时文件。 系统还会自动定期(每天凌晨3点)清理过期的导出文件。
本项目使用GitHub Actions自动构建和发布Docker镜像。如果您fork了本项目并希望启用自动构建,需要配置以下GitHub Secrets:
- 前往您的GitHub仓库
- 点击顶部的"Settings"选项卡
- 在左侧菜单中找到"Security"部分下的"Secrets and variables"
- 选择"Actions"
需要添加以下Secret以启用Docker Hub发布:
Secret名称 | 说明 | 获取方式 |
---|---|---|
DOCKERHUB_USERNAME |
Docker Hub用户名 | 您的Docker Hub账号用户名 |
DOCKERHUB_TOKEN |
Docker Hub访问令牌 | 在Docker Hub → Account Settings → Security中创建 |
- 登录Docker Hub
- 点击右上角头像 → Account Settings → Security
- 点击"New Access Token"按钮
- 输入描述(如"GitHub Actions")
- 选择适当的权限(至少需要"Read & Write"权限)
- 点击"Generate"生成令牌
- 重要: 立即复制生成的令牌,它只会显示一次
配置完成后,每次发布新Release或手动触发工作流时,将自动构建并推送Docker镜像到您的Docker Hub账号。
MIT License
感谢您的使用和反馈!如果您有任何问题或建议,请随时联系我们。