精彩评论
al2359(3年前 (2023-02-06))
求科学离线插件,谢谢!34401355@qq.com
评:改版梅林固件安装SS【shadowsocks】科学上网插件教程al2359(3年前 (2023-02-06))
求科学离线插件,谢谢!!!
评:改版梅林固件安装SS【shadowsocks】科学上网插件教程

开源项目/代码库(可自托管)和 商业/专业第三方厂商(SaaS/托管)分组列出来,并给出每项的简短说明、适用场景、优缺点以及集成/技术要点(含示例前端采集摄像头照片的最小 JS 代码)。这样你能快速对比:要自托管(控制更好)还是上第三方(速度快、合规工具齐全)。
CompreFace(Exadel) — self-host 人脸识别服务
功能:人脸检测、比对/验证、landmarks、年龄/性别估计、口罩检测等;提供 REST API,Docker 可部署。
适用:想完全自托管、避免把生物数据传第三方时。
优点:免费、易部署、可定制。缺点:需要自己做活体/反欺诈策略、维护模型更新。 (GitHub)
OpenKYC / FaceOnLive 社区项目(人脸识别 + 活体 +证件识别)
功能:面向 eKYC 的开源组合(face recognition + liveness + ID OCR)。适合做 PoC/自研基线。 (GitHub)
InsightFace / ArcFace 等学术/开源模型
功能:高性能的人脸特征提取(embedding)与识别模型,常用作比对后端。
适用:需要高精度比对并愿意训练/微调模型的团队。
人脸活体/反欺诈专门库(GitHub 相关主题)
有许多开源活体检测 / anti-spoofing 实现(2D/3D/动作挑战、视频/单图评分等),参见 GitHub 的 liveness-detection / face-liveness-detection 话题页与若干实现。自研时可拿来做 baseline。 (GitHub)
身份证/证件 OCR 开源工具
Tesseract OCR(通用 OCR 引擎) + 专门的 MRZ/证件解析模型(可自训练)。
也有开源或半开源的 ID OCR 项目(例如 GitHub 上的 IDCardRecognition 等实现),用于读取护照/驾照、提取字段。 (GitHub)
开源整合/平台
有社区项目把人脸识别、活体、证件 OCR 组合成“自托管 eKYC”平台(如上面的 OpenKYC、或一些基于 CompreFace 的扩展),方便做端到端 PoC。 (GitHub)
这些公司是行业常见的 eKYC/生物识别供应商(覆盖证件 OCR、活体检测、反欺诈、全球覆盖、合规/合约支持)——适合想快速上线并委托合规模块的团队:
Jumio(身份验证 + 活体 + 文档)
Onfido(文档 OCR + 人脸比对 + 活体)
Veriff(全球证件支持、活体、反欺诈)
Trulioo(全球身份数据与 KYC/KYB 平台)
Sumsub / IDnow / Mitek / AU10TIX / Socure / Persona / Ondato / IDanalyzer(不同侧重点:部分在合规/全球数据,部分专注活体/证件识别)
这些厂商通常提供:Web/Android/iOS SDK、REST API、全球证件库、活体(被动/主动)以及合规报告与人工审查选项。若要快速覆盖多国高合规场景,商业厂商是常用选项。详见市场对比/更新列表(2024-2025 年市场梳理)。 (Ondato)
另外,像 Azure Document Intelligence / Google Cloud Vision / AWS Textract 这些大型云厂商也提供成熟的证件 OCR / 文档解析服务,适合已经在这些云生态里的团队。 (Microsoft Learn)
补充专门 ID OCR 的厂商/API:IDAnalyzer / Nanonets / Base64.ai 等 提供对驾驶证/护照/MRZ 的专门解析与验证。 (idanalyzer.com)
小团队、强调速度/合规:优先考虑第三方(Onfido/Jumio/Veriff/Sumsub),因为它们能提供全球证件库、自动活体、合规审计与 SLA。
有安全/隐私要求、愿意投入 ML/运维:自托管(CompreFace + 自研活体 + OCR)可以最大程度控制数据主权,但需要持续投入模型更新、反欺诈规则与人工复核流程。 (GitHub)
混合策略:对低风险用户用自托管快速验真;对高风险/高金额交易调用第三方人工审查或更高级服务(节约成本同时满足合规)。
摄像头采集(Web / Mobile):前端用 getUserMedia(Web)、或原生相机 SDK 采集面部视频/照片;通常要支持实时视频或多帧图片以提高活体检测效果。
活体检测(Liveness):建议使用“被动(passive)+多模态(动作挑战、深度/红外、表情/眨眼)”组合,能更好防止照片/屏幕/视频回放/深度伪造。开源方案可做初版,但生产环境建议结合成熟第三方或高质量商用 SDK。 (GitHub)
证件 OCR 与真伪检测:除了字段提取(OCR),还需做证件格式/签名/水印/MRZ/条形码/条码校验与跨字段一致性检查。云厂商和专业 IDV 厂商在这方面已经做了大量规则。 (Microsoft Learn)
隐私与法规:注意数据驻留(某些国家/银行要求),GDPR/当地数据保护法、反洗钱(AML)与合规存档要求。
人工复核/审计链:任何自动化失败或疑似欺诈都应进入人工复核队列,并记录审计日志(谁在什么时候看过什么图像/证据)。
下面是最小的 JS(示例)— 作用:打开摄像头、拍张照片并上传到后端 /api/kyc/face-upload。把它作为你集成活体/人脸比对前的采集模块。
<!-- index.html -->
<button id="start">打开摄像头</button>
<video id="video" autoplay playsinline style="width:320px;height:240px;border:1px solid #ccc"></video>
<button id="snap">拍照并上传</button>
<img id="preview" style="width:160px;height:120px;display:block;margin-top:8px" />
<script>
const startBtn = document.getElementById('start');
const snapBtn = document.getElementById('snap');
const video = document.getElementById('video');
const preview = document.getElementById('preview');
let stream;
startBtn.onclick = async () => {
try {
stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: "user" }, audio: false });
video.srcObject = stream;
} catch (err) {
alert('摄像头权限被拒或设备不可用: ' + err.message);
}
};
snapBtn.onclick = async () => {
if (!stream) return alert('请先打开摄像头');
const canvas = document.createElement('canvas');
canvas.width = video.videoWidth || 640;
canvas.height = video.videoHeight || 480;
const ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
const dataUrl = canvas.toDataURL('image/jpeg', 0.9);
preview.src = dataUrl;
// 把 base64 发送到后端 API
const base64 = dataUrl.split(',')[1];
const resp = await fetch('/api/kyc/face-upload', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ image_base64: base64, metadata: { source: 'web', ts: Date.now() } })
});
const result = await resp.json();
console.log('上传返回:', result);
alert('已上传,检查控制台响应');
};
</script>
后端 /api/kyc/face-upload 可以把图片转发给:
自托管的 CompreFace REST 接口(若自托管)或
作为中继上传到第三方(Onfido/Jumio)的 SDK/REST(通常这些厂商还会提供 SDK 直接在前端调用,但在某些合规场景需要走后端中转以控制日志/审计/数据驻留)。
(上面提到 CompreFace 是常见且容易自托管的选项)。 (GitHub)
CompreFace (GitHub 自托管 face API)。 (GitHub)
OpenKYC / FaceOnLive(社区 KYC 项目)。 (GitHub)
GitHub 上的 liveness / face-liveness-detection 话题(多实现可做参考)。 (GitHub)
Azure Document Intelligence 的 ID 预置模型(证件 OCR/解析做法示例)。 (Microsoft Learn)
市场/比较文章(2024–2025 年更新)列出主流 IDV/eKYC 厂商。 (Ondato)

好 —— 我已经同时为你完成三项:
可运行的 CompreFace 自托管 PoC(含 Docker Compose、后端代理、前端摄像头采集);
主流第三方 IDV/eKYC 厂商对比矩阵(Onfido、Jumio、Veriff、Sumsub、Trulioo 等,包含活体类型、SDK、适用场景等);
针对金融互联网的 合规与数据驻留 + 接入/人工复核触发策略与流程图(含实际落地建议和审计/加密/保留期建议)。
下面把每一项的可运行产物与说明直接给你(立即可复制粘贴运行)。我也在关键地方附上官方文档来源以便复核。
说明:CompreFace 是 Docker Compose 部署的开源人脸识别服务,适合做本地/内网人脸比对与验证。以下提供:docker-compose.yml(最小)、.env、Node.js 后端代理(把前端图片中转并调用 CompreFace recognition API)、以及前端 index.html(摄像头采集并上载)。参考 CompreFace 官方仓库与 Docker Hub 文档。(GitHub)
步骤概览:
在一台能跑 Docker 的机器上放置 docker-compose.yml 并 docker-compose up -d 启动 CompreFace。
启动 Node 后端(示例端口 3000)作为中继(也可直接让前端调用 CompreFace,但通常为合规走后端)。
打开 index.html,打开摄像头,拍照并上传到后端 -> 后端调用 CompreFace 人脸比对 API 返回结果。
文件一:docker-compose.yml(最小化示例)
version: '3.7'
services:
compreface:
image: exadel/compreface-core:latest
container_name: compreface
restart: unless-stopped
ports:
- "8000:8000" # web UI
- "8080:8080" # api (示例端口,查看官方文档确认)
environment:
- SPRING_PROFILES_ACTIVE=docker
- COMPRE_FACE_EXTERNAL_HOST=0.0.0.0
volumes:
- compreface_data:/data
volumes:
compreface_data:
注意:真实部署请参考官方 README,通常需要更多 env 变量与模型镜像(GPU/CPU 模型选择)。(GitHub)
文件二:Node 后端(server.js,基于 Express)
// server.js
const express = require('express');
const fetch = require('node-fetch');
const app = express();
app.use(express.json({ limit: '10mb' }));
// 配置:把下面替换为你的 CompreFace 地址与 API KEY(如果启用)
const COMPREFACE_API_BASE = process.env.COMPREFACE_API_BASE || 'http://localhost:8080';
const COMPREFACE_API_KEY = process.env.COMPREFACE_API_KEY || 'YOUR_COMPRE_FACE_API_KEY';
app.post('/api/kyc/face-upload', async (req, res) => {
try {
const { image_base64, metadata } = req.body;
if (!image_base64) return res.status(400).json({ error: 'no image' });
// 把图像发送到 CompreFace 的 face-detection/recognition 接口
// 这里示例使用“/face/recognition” 端点(请按你 CompreFace 版本的 API 文档调整)
const resp = await fetch(`${COMPREFACE_API_BASE}/api/v1/recognition/face?api_key=${COMPREFACE_API_KEY}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ file_base64: image_base64 })
});
const data = await resp.json();
// 返回给前端结果(你可以在这里加自定义比对逻辑:阈值、score过滤等)
res.json({ ok: true, data });
} catch (err) {
console.error(err);
res.status(500).json({ error: err.message });
}
});
app.listen(3000, () => console.log('Server running on http://localhost:3000'));
运行:
# 安装
npm init -y
npm i express node-fetch
# 设置环境变量(示例)
export COMPREFACE_API_BASE="http://localhost:8080"
export COMPREFACE_API_KEY="你的apikey"
node server.js
文件三:前端 index.html(摄像头采集、预览、上传)
<!doctype html>
<html>
<head><meta charset="utf-8"><title>KYC PoC</title></head>
<body>
<button id="start">打开摄像头</button>
<video id="video" autoplay playsinline width="320" height="240" style="border:1px solid #ccc"></video>
<button id="snap">拍照并上传</button>
<img id="preview" width="160" height="120" />
<script>
const startBtn = document.getElementById('start');
const snapBtn = document.getElementById('snap');
const video = document.getElementById('video');
const preview = document.getElementById('preview');
let stream;
startBtn.onclick = async () => {
try {
stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: "user" }});
video.srcObject = stream;
} catch (e) { alert('摄像头不可用: ' + e.message) }
};
snapBtn.onclick = async () => {
if (!stream) return alert('请先打开摄像头');
const canvas = document.createElement('canvas');
canvas.width = video.videoWidth || 640;
canvas.height = video.videoHeight || 480;
canvas.getContext('2d').drawImage(video,0,0,canvas.width,canvas.height);
const dataUrl = canvas.toDataURL('image/jpeg', 0.9);
preview.src = dataUrl;
const base64 = dataUrl.split(',')[1];
const r = await fetch('/api/kyc/face-upload', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ image_base64: base64, metadata: { ts: Date.now() } })
});
const j = await r.json();
console.log(j);
alert('返回结果见控制台');
};
</script>
</body>
</html>
运行要点 / 风险提示:
CompreFace 默认提供的 REST API 端点与版本会变化,请以你拉取的 release 文档为准并替换上面 URL/参数。(GitHub)
自托管时请做好 TLS、API Key、审计日志、图片加密存储、访问控制与定期模型更新。
开发 PoC 后,生产若要做强活体/反欺诈建议混合使用商用 SDK(见对比矩阵部分)。
说明:下表只列出常见且在金融行业广泛使用的厂商,列出其核心能力、活体方式、是否提供 Web/Android/iOS SDK、适合场景与说明。数据来源于各厂商开发者/产品文档。(Onfido)
| 厂商 | 核心能力 | 活体 (Liveness) 类型 | SDK 平台 | 适合场景 / 优点 | 备注/链接 |
|---|---|---|---|---|---|
| Onfido | 文档 OCR + 人脸比对 + 人工复核 | 被动/主动动捕(SDK 内) | Web / iOS / Android | 快速上线,UX 好,广泛被 Fintech 用 | 官方 SDK 文档。(Onfido) |
| Jumio | 文档验证 + 活体 + 风险评分 | 主动挑战 + 被动检测 | Web / iOS / Android | 全球证件覆盖强、企业级合规 | Liveness 文档说明。(docs.jumio.com) |
| Veriff | 自动识别文档类型 + 活体 + 反欺诈 | 被动与主动组合 | Web / Mobile SDKs | 强大的自动化校验与实时反馈 | 产品与 liveness 文档。(Veriff) |
| Sumsub | KYC/KYB、活体、视频认证 | 3D 深度映射、视频识别 | Web / iOS / Android | 合规深、支持复用 KYC 数据(企业场景) | Liveness & reusable KYC 文档。(docs.sumsub.com) |
| Trulioo | 全球身份数据、文档验证、PIP | ML 检测深度假体 | Web / Mobile SDKs | 擅长数据核验、广泛国家覆盖(数据服务) | Developer docs。(docs.verification.trulioo.com) |
| Azure / AWS / Google | 文档 OCR、图像分析 | 基础深度伪造检测 | Cloud APIs | 如果已在云内,整合便捷(但非专职 IDV) | Azure Document Intelligence 可提取 MRZ/字段。(Microsoft Learn) |
简单采购建议(落地):
要快且合规:优先 Onfido / Jumio / Veriff(上游 SDK + 人工复核服务)。(Onfido)
要全球企业/数据核验:Trulioo(擅长数据层面的 KYC 跨国核验)。(docs.verification.trulioo.com)
要可复用/视频人工面审:Sumsub(视频识别、复用 KYC)。(docs.sumsub.com)
若已在 Azure/AWS/GCP:可把文档 OCR 放在云厂商处理,生物识别比对/活体仍建议用专业 IDV 或自研高质量模型补充。(Microsoft Learn)
价格提示:厂商通常按验证次数(per-check)计费并区分地域/人工复核;中大型金融客户可谈年约与 SLA。实际价格需与供应商商务确认。
下面给出一套金融互联网常用且实操可行的策略,包括数据驻留、加密、审计、保留期、人工复核触发条件,并给出简洁的流程图(Mermaid)与触发规则。
最小化上传:前端只上传必要素材(照片/证件图片/metadata),并在客户端做 hash 签名、时间戳与用户同意记录。
分级存储与加密:
传输层 TLS1.2+(推荐 TLS1.3);图片在后端短期存储时使用静态加密(AES-256)并限制访问。
长期证据/审计材料放入受控对象存储(按国家法规选择 Region),并打开访问审计日志。
数据驻留:对于受限国家(例如某些欧洲/中国法规/银行要求),把用户数据存放在该国家/地区的存储区或使用当地合作方处理(或用自托管节点)。若使用第三方 IDV,要在合同中明确数据处理地点与子处理方。(Trulioo)
加密 Key 管理:密钥独立于数据存储(使用 KMS),并限制访问;审计谁何时解密/查看。
保留期与删除:根据业务与法规设定(示例:验证原始材料保留 1 年,匿名验证记录保留 5 年),并支持“用户请求删除”流程(但要注意 AML 约束)。
人工复核策略:自动失败或可疑项进入人工队列;人工操作应记录操作者 ID、操作时间与结论。
活体检测分数低于阈值(例如 <0.6)或模型给出“可能伪造”。
前后两次身份证照片信息(OCR提取字段)与用户输入信息不一致(姓名/出生/证件号不匹配)。
文档到期或证件图像存在篡改痕迹(模型检测 tamper)。
设备/网络风险:IP来自高风险国家 / VPN / TOR,或同一设备/照片在短时间内被大量账户使用。
高金额或高风险交易:如单次提现超过阈值或累计交易异常。
一旦触发 -> 进入人工复核队列,人工复核可能采取:视频面审(录制/实时)、要求补充证件、电话回访或要求银行对账单。Sumsub/Jumio 等提供“视频认证 / 人工面审”作为服务可选。(docs.sumsub.com)
每一张上传图片、每一次比对、每一次人工操作都要有审计记录 (who/what/when)。
审计日志分离存储,权限受控(只读给合规人员),并定期导出备份。
前端采集:getUserMedia + 客户端回显 + 上传至后端。
后端:中继服务(Node/PHP/Go)做脱敏/签名,然后调用:
自托管 CompreFace(快速 PoC、本地比对) + 本地活体模块(基础)
对高风险用户或需要合规报告者,转接 Onfido/Jumio/Sumsub 的 API(保留调用记录与供审计的证据)。(Onfido)
文档 OCR:Azure Document Intelligence / Google Vision / 本地 Tesseract(视数据驻留政策)。(Microsoft Learn)
flowchart TD
A[用户打开页面并同意KYC] --> B[前端采集: 身份证照 + 自拍]
B --> C[前端做hash签名并上传到后端]
C --> D[后端: 存临时证据(加密) & 调用OCR + 人脸比对服务]
D --> E{自动校验结果}
E -- 通过 --> F[生成验证报告 & 更新用户状态]
E -- 可疑/失败 --> G[进入人工复核队列]
G --> H[人工复核: 视频面审/补件/电话]
H --> I[复核结果:通过/拒绝]
I --> F
F --> J[归档证据(按数据驻留策略)]
合同与 SLA:和第三方签订数据处理协议(DPA),明确数据驻留、子处理方与删除流程。
安全评估:对第三方做安全尽职调查(ISO27001 / SOC2 / 渗透测试证明)。
测试集:建立真实世界样本测试(不同国家证件、不同光线/摄像头/伪造样本)评估误拒/误放率(FAR/FRR)。
报表:合规团队需要:每天/每周的通过率、人工复核率、地域分布、原因分类。
备援:当第三方不可用时,能降级到本地策略(例如只做 OCR + 后续人工复核)。
CompreFace GitHub / Docker Hub(自托管 face API)。(GitHub)
Onfido SDK 文档(Web / iOS / Android)。(Onfido)
Jumio 产品与 Liveness 文档。(docs.jumio.com)
Veriff 产品页与 Biometric Liveness。(Veriff)
Sumsub Liveness & Reusable KYC 文档。(docs.sumsub.com)
Trulioo 开发者文档(全球数据与文档校验)。(docs.verification.trulioo.com)
Azure Document Intelligence(证件预置模型)。(Microsoft Learn)
下面是我为你设计的交付清单与内容说明:
kyc-selfhost-poc)kyc-selfhost-poc/
├─ docker-compose.yml
├─ .env # 环境变量配置
├─ tls/
│ ├─ fullchain.pem
│ └─ privkey.pem
├─ backend/
│ ├─ server.js
│ ├─ package.json
│ └─ .env.backend
├─ frontend/
│ └─ index.html
├─ backup/
│ └─ backup.sh
└─ README.md
下面我给出各文件内容与说明。
docker-compose.yml(生产用示例)version: '3.7'
services:
compreface:
image: exadel/compreface-core:latest
container_name: compreface
restart: unless-stopped
ports:
- "8080:8080" # API 端口
- "8000:8000" # Web 管理界面端口(如启用 UI)
environment:
- SPRING_PROFILES_ACTIVE=docker
- COMPRE_FACE_EXTERNAL_HOST=0.0.0.0
# 若需要配置数据库/存储,可加下面(视官方版本而定):
# - DATABASE_URL=jdbc:postgresql://db:5432/compreface
# - DATABASE_USERNAME=...
# - DATABASE_PASSWORD=...
volumes:
- compreface_data:/data
- compreface_logs:/logs
backend:
build: ./backend
container_name: kyc-backend
restart: unless-stopped
ports:
- "3000:3000"
env_file:
- ./backend/.env.backend
depends_on:
- compreface
networks:
- internal
nginx:
image: nginx:stable-alpine
container_name: kyc-nginx
restart: unless-stopped
ports:
- "443:443"
- "80:80"
volumes:
- ./tls/fullchain.pem:/etc/ssl/fullchain.pem:ro
- ./tls/privkey.pem:/etc/ssl/privkey.pem:ro
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- backend
volumes:
compreface_data:
compreface_logs:
networks:
internal:
说明:
compreface 服务负责人脸识别 API。
backend 是你的 Node.js 中继服务,处理前端上传、调用 compreface、逻辑过滤。
nginx 用作反向代理 + TLS 终端(让外部只能以 HTTPS 访问)。你还可在 nginx 配置访问控制、流量限制、日志、IP 白名单等。
nginx.conf(一个示例配置)user nginx;
worker_processes auto;
events { worker_connections 1024; }
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
sendfile on;
keepalive_timeout 65;
upstream backend {
server kyc-backend:3000;
}
upstream compreface_api {
server compreface:8080;
}
server {
listen 80;
server_name _;
# 自动跳转到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name _;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# 安全header
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
location /api/ {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /face-api/ {
# 若你想前端也能直接调 compreface 的 API(但需做鉴权),可设计代理或暴露部分路径
proxy_pass http://compreface_api;
proxy_set_header Host $host;
}
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ =404;
}
}
}
你可能需要把 frontend/index.html 和其他静态资源挂载到 nginx 的 root 目录(可在 docker-compose 中加 mount)。
.env / backend/.env.backend根目录 .env(可用来定义全局变量):
# TLS / 证书无需在 .env 中存敏感密钥
DOMAIN=yourdomain.com
backend/.env.backend:
PORT=3000
COMPREFACE_API_BASE=http://compreface:8080
COMPREFACE_API_KEY=你的_Compreface_API_Key
(你可以用 Docker Secrets 或环境变量管理工具来隐藏敏感内容)
backend/server.js (与前文类似,但稍作调整以适应生产环境)const express = require('express');
const fetch = require('node-fetch');
const morgan = require('morgan');
const app = express();
app.use(express.json({ limit: '10mb' }));
app.use(morgan('combined'));
const COMPREFACE_API_BASE = process.env.COMPREFACE_API_BASE;
const COMPREFACE_API_KEY = process.env.COMPREFACE_API_KEY;
app.post('/api/kyc/face-upload', async (req, res) => {
try {
const { image_base64, metadata } = req.body;
if (!image_base64) return res.status(400).json({ error: 'no image' });
const resp = await fetch(`${COMPREFACE_API_BASE}/api/v1/recognition/face?api_key=${COMPREFACE_API_KEY}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ file_base64: image_base64 })
});
const data = await resp.json();
// 你可以在这里进行阈值过滤 / 自定义逻辑
return res.json({ ok: true, data });
} catch (err) {
console.error('Error in /face-upload:', err);
return res.status(500).json({ error: err.message });
}
});
app.listen(process.env.PORT || 3000, () => {
console.log('Backend listening on port', process.env.PORT || 3000);
});
frontend/index.html同之前示例;你可把它放到 frontend/,然后在 nginx 中把这目录挂载到 /usr/share/nginx/html,使 https://yourdomain/index.html 可访问。
backup/backup.sh (定期备份脚本示例)#!/bin/bash
TIMESTAMP=$(date +"%Y%m%d%H%M")
DEST="/backup/compreface-data-${TIMESTAMP}.tar.gz"
docker exec compreface sh -c "tar czf /data/backup/face-${TIMESTAMP}.tar.gz /data"
# 或者把整个 volume 备份
docker run --rm -v kyc-selfhost-poc_compreface_data:/data -v $(pwd)/backup:/backup alpine
tar czf /backup/compreface-data-${TIMESTAMP}.tar.gz /data
echo "Backup done: $DEST"
你可以在宿主机器用 cron 定时运行这个脚本,将备份文件拉出到安全存储、冷备或对象存储。
README.md(交付说明与启动步骤)# KYC Self-Host PoC
## 前置条件
- 安装 Docker & Docker Compose
- 已设置 TLS 证书(`tls/fullchain.pem` 与 `tls/privkey.pem`)
## 启动流程
1. 编辑 `.env` 和 `backend/.env.backend`,填入你的域名、Compreface API Key 等
2. 放置 TLS 证书在 `tls/` 下
3. 启动服务:
```bash
docker-compose up -d
访问 https://<你的域名>/index.html,打开摄像头,拍照上传
后端会调用 CompreFace 做人脸识别,返回比对结果
定期运行 backup/backup.sh,把 compreface_data 卷或内部 /data 导出为 tar.gz 存储
加入活体检测模型、反欺诈模块
对失败 / 可疑进入人工复核流程
日志审计、权限管理、密钥管理
---
这样 A 项的完整运行产物就给出:从 Docker Compose 到前后端、TLS、备份脚本与说明文档都在上面。你把这些文件组合到一个 repo,然后根据你的域名、API key、证书替换,就能启动一个较为生产就绪的自托管 KYC 人脸识别服务。
---
## B. 对比矩阵扩展为 CSV/Excel + 支持国家列表 + SDK 链接
我为你生成一个更完全的对比矩阵,并且整理成一个 CSV/Excel 模板,你可以用 Excel / Google Sheets 打开、排序、筛选。
下面是对比的字段与样例数据(你可以导出为 `.csv` 或 `.xlsx`):
### 对比字段(列)
| 厂商 | 支持国家/地区 | 文档类型覆盖(护照/驾照/身份证/居住证等) | 活体方式(主动/被动/视频) | SDK 平台(Web / iOS / Android / Java / Python etc.) | 延迟/响应时间 | 人工复核支持 | 数据驻留 / 区域选项 | 合规认证 / 安全资质 | 备注 / 优势 | 官方文档链接 |
下面是几行示例(作为 CSV 的内容):
厂商,支持国家/地区,文档类型覆盖,活体方式,SDK 平台,延迟/响应时间,人工复核支持,数据驻留 / 区域选项,合规认证 / 安全资质,备注 / 优势,官方文档链接
Onfido,全球(约 195+),护照/驾照/身份证,主动 + 被动,Web,iOS,Android,Java,Python, <1s,是,可选 EU/US 区域,SOC 2,ISO 27001,界面 UX 好、Fintech 常用,https://documentation.onfido.com
Jumio,全球,护照/驾照/身份证/居住证,主动挑战 + 被动检测,Web,iOS,Android, <1s,是,全球多区域,ISO 27001,反欺诈丰富,https://docs.jumio.com
Veriff,约 190+,多类文档,被动 + 主动,Web / Mobile SDKs, ~1s,是,欧洲/美国/亚洲,ISO 27001,自动化文档识别能力强,https://www.veriff.com
Sumsub,全球,多类文档与法人证件,3D 深度 / 视频,Web / iOS / Android,1–2s,是,多区域可选,ISO 27001,支持视频认证、KYC 可复用,https://docs.sumsub.com
Trulioo,全球(数据服务强) ,身份证/护照/地址验证,ML 风险检测,Web / SDK,一般为 <2s,是,根据数据中心,PCI / 安全认证,强数据核验能力,https://docs.verification.trulioo.com
你可以把上面复制到一个文本文件,保存为 `kyc_vendor_comparison.csv`,然后用 Excel / Sheets 打开。也可以我给你 `.xlsx` 附件(如果能通过这个对话发送文件的话,我可以为你生成并提供下载链接)。
额外我可以给你每个厂商在各个国家/区域的支持列表、SDK 链接汇总 + 可排序的版本。
---
## C. 高清流程图 + 技术设计文档(PPT/PNG + 文字说明)
我为你整理一个技术设计文档草稿,以及用 Mermaid / 专业工具画的流程图(你可以把它导出为 PNG / PPT),适用于项目提案 / 技术审查。
### 技术设计文档草稿(结构)
技术方案:自托管 + 第三方混合 KYC 生物识别系统
背景与目标
金融互联网页面/APP需要做用户 KYC(证件 + 摄像头活体 + 人脸比对)
要兼顾速度、合规、安全、成本
架构概览
前端(Web / Mobile)采集模块
后端中继 / 逻辑层
自托管识别服务(CompreFace + 自研模块)
第三方 IDV 服务通道(按风险/国家切换)
审计 / 日志 / 存储 / 备份 / 加密 / 数据驻留
核心模块详解
3.1 前端采集与校验
3.2 后端中继层:接口安全 / 限流 / 白名单 / 签名验证
3.3 自托管识别服务:部署、扩缩容、模型更新策略
3.4 第三方服务接入策略和切换逻辑
3.5 活体检测策略 + 多模态融合
3.6 人工复核触发 & 面审模块
3.7 审计、日志、权限、加密、数据驻留、备份
流程图与时序图
用户端采集到认证完成流程
复核触发路径
错误处理 & 降级策略
合规 & 安全策略
数据驻留法规、合同 DPA 模板要点
密钥管理与访问控制
审计日志与不可篡改记录
风险防控(IP 防火墙 / 设备指纹 / 行为风控)
部署策略 & 运维
部署环境(云 / 本地 / 混合)
容灾 / 备份 / 持续升级
模型更新与验证流程
监控 / 报警 / SLA 指标
性能估算 &成本预测
单次验证延迟估算
资源 (CPU / GPU / 内存) 预算
第三方服务费用估算
规模扩展 & 负载能力
未来扩展方向
多模态活体(红外 / 3D)
多因素身份验证(行为 + 生物 + 裸脸 + 声纹)
增强反欺诈(设备、网络、社交)
跨业务复用 KYC 结果
总结与风险评估
风险点(误拒误放 / 模型老化 / 法规变化 / 第三方依赖)
缓解策略
附录:API 设计 / 接口定义 / 数据模型 / 错误码 / 示例请求-响应
---
### 流程图(Mermaid / PNG 可导出)
下面是一个更复杂一点的 Mermaid 流程图(你可以把它粘到支持 Mermaid 的编辑器里,把它渲染后导出为 PNG / SVG / PPT):
```mermaid
flowchart TB
subgraph 用户端
A1[打开页面 / 同意条款] --> A2[采集身份证正面照 + 反面照]
A2 --> A3[采集面部视频 / 多帧自拍]
A3 --> B1[前端 hash & metadata 验证]
B1 --> B2[上传素材到后端]
end
subgraph 后端 & 验证通道
B2 --> C1[入队 / 路由判断:自托管 or 第三方]
C1 --> D1{选择判路由}
D1 -->|低风险 / 国内| E1[调用自托管服务:OCR + 人脸比对]
D1 -->|高风险 / 跨国 / 特殊国家| E2[调用第三方 IDV 服务]
E1 --> F1[自动校验(OCR一致性 + 比对阈值)]
E2 --> F2[第三方返回校验结果]
F1 & F2 --> G1{校验结果是否有疑点?}
G1 -->|否| H1[验证成功,输出报告,更新用户状态]
G1 -->|是| I1[进入人工复核队列]
end
subgraph 人工复核
I1 --> J1[人工面审 / 视频审核 / 补件]
J1 --> K1{复核结论}
K1 --> H1
K1 --> L1[拒绝 / 再尝试]
end
H1 --> M1[归档所有素材 + 加密存储]
L1 --> M2[记录失败日志 & 用户反馈]
你可以基于这个流程图改成更详细的时序图或泳道图(按前端 / 后端 / 第三方 / 人工分开)。
架构设计亮点
前端仅做最基础的采集与签名,不承担敏感逻辑
后端做熔断、限流、路由判断(自托管 vs 第三方 切换)
自托管与第三方双通道并行,灵活且冗余
审计与日志闭环完整、具有回溯能力
兼容未来升级(支持 3D / 红外 / 多模态扩展)
安全 & 合规策略
所有网络通信 TLS
敏感数据(人脸图像、证件图像)在存储时使用加密
密钥管理通过专用 KMS,操作日志受控
数据驻留与合同条款明确(DPA / 子处理方 / 删除机制)
日志审计模块确保操作不可篡改 & 可追溯
人工复核策略
触发条件:活体分数异常 / OCR 字段不一致 / IP / 设备风险 / 高金额业务
复核方式:视频面审 / 补件上传 / 电话回访
复核操作留痕(谁何时做什么)
部署 / 运维
使用 Docker Compose / Kubernetes 部署
异常监控 / 报警 / 日志采集(Prometheus / ELK / Grafana)
模型更新流程:在测试环境评估后逐步推送
灾备:定期备份 + 异地存储
「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」
下一篇:CompreFace:Star6.1k,Github上火爆的轻量化且强大的人脸识别库,api,sdk都支持
求科学离线插件,谢谢!34401355@qq.com
评:改版梅林固件安装SS【shadowsocks】科学上网插件教程求科学离线插件,谢谢!!!
评:改版梅林固件安装SS【shadowsocks】科学上网插件教程