carlostousferragut/rentacaar-scanner-agent
GitHub: carlostousferragut/rentacaar-scanner-agent
运行于Windows的文档扫描代理服务,通过HTTP API提供西班牙身份证及护照的自动化扫描与识别能力。
Stars: 0 | Forks: 0
# RentaCaaR Scanner Agent
Windows 服务,在端口 7823 上提供本地 HTTP API,用于通过 WIA 连接的平板扫描仪扫描文档(通过 PDF417 条形码扫描西班牙 DNI/NIE,通过 MRZ OCR 扫描护照)。
## 环境要求
- Windows 10/11 x64
- .NET 8 SDK(用于开发)
- WIA 兼容的平板扫描仪
- Inno Setup 6(用于构建安装程序)
- Tesseract tessdata 文件(用于 MRZ/护照 OCR)
## Tessdata 设置
从 [tessdata_fast](https://github.com/tesseract-ocr/tessdata_fast) 仓库下载训练数据文件,并将其放入:
```
RentaCaaR.ScannerAgent/tessdata/
mrz.traineddata ← specialized MRZ model (preferred)
spa.traineddata ← Spanish language (fallback)
eng.traineddata ← English language (fallback)
```
`mrz.traineddata` 文件可以在 [tessdata](https://github.com/tesseract-ocr/tessdata) 仓库中找到(这是用于机读区的专用模型)。
## 构建
```
# 还原包
dotnet restore RentaCaaR.ScannerAgent/RentaCaaR.ScannerAgent.csproj
# 发布自包含单文件可执行文件
dotnet publish RentaCaaR.ScannerAgent/RentaCaaR.ScannerAgent.csproj -c Release
```
输出:`RentaCaaR.ScannerAgent/bin/Release/net8.0-windows/win-x64/publish/RentaCaaR.ScannerAgent.exe`
## 构建安装程序
1. 安装 [Inno Setup 6](https://jrsoftware.org/isinfo.php)
2. 首先运行构建(见上文),以便生成发布输出
3. 编译安装脚本:
```
iscc installer/setup.iss
```
输出:`installer/Output/RentaCaaR-Scanner-Setup-1.0.6.exe`
## 自动发布 (GitHub Actions)
此仓库包含位于 `.github/workflows/release.yml` 的工作流,它会:
1. 从 `installer/setup.iss` 读取 `MyAppVersion`
2. 验证其与 `RentaCaaR.ScannerAgent.csproj` 中的 `` 匹配
3. 在 `Release` 模式下还原并发布 Agent
4. 在 Runner 上安装 Inno Setup
5. 根据 `installer/setup.iss` 构建安装程序
6. 创建/发布包含安装程序资产的 GitHub Release `v{MyAppVersion}`
它在推送到 `main` 分支时自动运行(无需手动标记 Tag)。
如果 Release `v{MyAppVersion}` 已存在,则跳过发布。
典型流程:
```
# 1) 将两个文件中的版本号提升至相同的值(例如 1.0.5)
# - RentaCaaR.ScannerAgent/RentaCaaR.ScannerAgent.csproj
# - installer/setup.iss
# 2) 提交并推送到 main
git add .
git commit -m "Release 1.0.5"
git push origin main
```
重要提示:保持 `RentaCaaR.ScannerAgent.csproj` 与 `installer/setup.iss` 的版本一致,否则工作流将按设计执行失败。
## 开发(作为控制台应用运行)
```
dotnet run --project RentaCaaR.ScannerAgent/RentaCaaR.ScannerAgent.csproj
```
服务将在 `http://127.0.0.1:7823` 上启动。作为控制台应用(而非 Windows 服务)运行时,其行为完全相同 —— WIA 和 OCR 的工作方式一致。
## API 端点
| Method | Path | 描述 |
|--------|-------------|--------------------------------------------------|
| GET | /health | 服务状态、版本、注册状态 |
| GET | /scanners | 列出已连接的 WIA 扫描仪 |
| POST | /scan | 扫描文档并返回字段 + base64 图像 |
| POST | /register | 使用 Token 将 Agent 注册到后端 |
| POST | /settings | 设置默认扫描仪 ID |
### POST /scan 请求体
```
{
"scannerId": "optional-wia-device-id",
"dpi": 300
}
```
### POST /register 请求体
```
{
"token": "one-time-registration-token",
"backendUrl": "https://your-rentacaar-instance.com",
"name": "optional-agent-name"
}
```
## Windows 注册表
配置存储在:
```
HKEY_LOCAL_MACHINE\SOFTWARE\RentaCaaR\ScannerAgent
AgentId (string)
Secret (string)
BackendUrl (string)
OrgName (string)
OfficeName (string)
DefaultScannerId (string, optional)
```
## 自动更新
服务每小时轮询一次 `{backendUrl}/api/agent/updates?version=X&agentId=Y`。如果有新版本可用,它会下载并静默运行 Inno Setup 安装程序(`/VERYSILENT /NORESTART /SUPPRESSMSGBOXES`),该程序会停止服务、替换二进制文件并自动重启服务。
## 心跳
每 5 分钟,服务会向 `{backendUrl}/api/agent/heartbeat` 发送当前版本。认证使用 `X-Agent-Auth: {agentId}:{secret}` 标头。
标签:GitHub Actions, HTTP API, HTTP工具, Inno Setup, MRZ, .NET 8, OCR, PDF417条码, Python脚本, RentaCaaR, Tesseract, WIA, Windows服务, WinForms/WPF相关, 命令控制, 图像处理, 平板扫描仪, 护照识别, 数据采集, 文档扫描, 本地服务, 机器视觉, 自动笔记, 西班牙DNI/NIE, 身份证识别