131 lines
3.1 KiB
Markdown
131 lines
3.1 KiB
Markdown
# Info-Privacy
|
||||
|
|
|
|||
|
|
基于 Rockchip RKNN NPU 的文档隐私安全处理 REST API 服务,支持 RK3588 板端和 x86 双平台。
|
|||
|
|
|
|||
|
|
**两阶段工作流**:先 `analyze`(返回 JSON 检测报告)→ 用户决策 → 再 `redact`(返回处理后文档)。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 支持的文档格式
|
|||
|
|
|
|||
|
|
| 格式 | 解析方式 |
|
|||
|
|
|------|---------|
|
|||
|
|
| PDF(含文字层) | pdfminer.six |
|
|||
|
|
| PDF(扫描件) | PaddleOCR RKNN |
|
|||
|
|
| .docx | python-docx |
|
|||
|
|
| .xlsx | openpyxl |
|
|||
|
|
| JPG / PNG | PaddleOCR RKNN |
|
|||
|
|
|
|||
|
|
## 可检测的隐私类型
|
|||
|
|
|
|||
|
|
| 类型 | 检测方式 | 安全等级 |
|
|||
|
|
|------|---------|---------|
|
|||
|
|
| `id_card` | Regex | high |
|
|||
|
|
| `phone` | Regex | high |
|
|||
|
|
| `bank_card` | Regex | high |
|
|||
|
|
| `face` | MediaPipe RKNN | high |
|
|||
|
|
| `email` | Regex | medium |
|
|||
|
|
| `name` | 规则词典 NER | medium |
|
|||
|
|
| `address` | 规则词典 NER | medium |
|
|||
|
|
| `license_plate` | Regex | medium |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### x86 开发环境
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 初始化虚拟环境
|
|||
|
|
bash setup_venv.sh
|
|||
|
|
source venv/bin/activate
|
|||
|
|
|
|||
|
|
# 启动服务
|
|||
|
|
make server # http://0.0.0.0:8000
|
|||
|
|
|
|||
|
|
# 端到端验证(需先启动服务)
|
|||
|
|
make verify
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### RK3588 板端
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 同步代码
|
|||
|
|
rsync -av /data/rockchip/info-privacy/ pi@192.168.0.127:/home/pi/Desktop/info-privacy/
|
|||
|
|
|
|||
|
|
# 板端启动
|
|||
|
|
ssh pi@192.168.0.127 "clashon && clashproxy on && \
|
|||
|
|
cd /home/pi/Desktop/info-privacy && \
|
|||
|
|
bash setup_venv.sh && source venv/bin/activate && \
|
|||
|
|
uvicorn info_privacy.api.main:app --host 0.0.0.0 --port 8000"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## API 使用示例
|
|||
|
|
|
|||
|
|
### 检测隐私信息
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST http://localhost:8000/api/v1/analyze \
|
|||
|
|
-F "file=@document.docx"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
响应:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"doc_id": "uuid",
|
|||
|
|
"classification": "normal",
|
|||
|
|
"blocked": false,
|
|||
|
|
"warning": null,
|
|||
|
|
"entities": [
|
|||
|
|
{"id": "e1", "type": "id_card", "value": "110101199001011234",
|
|||
|
|
"page": 1, "bbox": [10, 20, 200, 40], "layer": "text", "security_level": "high"}
|
|||
|
|
],
|
|||
|
|
"summary": {"id_card": 1}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 遮罩指定类型
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST http://localhost:8000/api/v1/redact \
|
|||
|
|
-F "file=@document.docx" \
|
|||
|
|
-F 'config={"redact_types":["id_card","phone"]}' \
|
|||
|
|
-o redacted.docx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
响应 Body 为处理后文档,Header `X-Security-Report` 包含遮罩统计。
|
|||
|
|
|
|||
|
|
### 其他端点
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
GET /api/v1/health # 健康检查
|
|||
|
|
GET /api/v1/types # 支持的隐私类型列表
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 遮罩安全保证
|
|||
|
|
|
|||
|
|
系统根据文档类型**自动选择最安全策略**,用户无需指定:
|
|||
|
|
|
|||
|
|
| 文档类型 | 遮罩方式 | 安全保证 |
|
|||
|
|
|---------|---------|---------|
|
|||
|
|
| PDF(文字层)/ Word / Excel | 删除文字节点(text_replace) | 字节级安全 |
|
|||
|
|
| 图像 / 扫描 PDF | OpenCV 黑色矩形覆盖(image_mask) | 图像级安全 |
|
|||
|
|
|
|||
|
|
> **重要**:PDF 含文字层时,即使 `redact_types` 包含 `face`,也强制使用 text_replace 防止文字层信息泄露。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## RKNN 模型路径
|
|||
|
|
|
|||
|
|
| 模型 | 路径 |
|
|||
|
|
|------|------|
|
|||
|
|
| PaddleOCR 检测 | `/data/rockchip/paddle_ocr/models/rknn/PP-OCRv4/det/` |
|
|||
|
|
| PaddleOCR 识别 | `/data/rockchip/paddle_ocr/models/rknn/PP-OCRv4/rec/` |
|
|||
|
|
| MediaPipe 人脸 | `/data/rockchip/mediapipe/models/rknn/` |
|
|||
|
|
|
|||
|
|
详见 [DEVELOP.md](DEVELOP.md) · [RELEASE.md](RELEASE.md)
|