This page was machine-translated. Spotted a mistake?Help improve it.
Skip to content

护照照片

基于 AI 的护照和证件照生成器。采用两阶段工作流:先分析(人脸检测 + 背景去除),再生成(裁剪、调整尺寸并拼贴以供打印)。

API 端点

该工具采用两阶段流程,分析和生成使用各自独立的端点。

模型包: background-removalface-detection


阶段 1:分析

POST /api/v1/tools/image/passport-photo/analyze

检测人脸特征点并去除背景。返回特征点数据和一张预览图,供前端显示裁剪预览。

参数

参数类型是否必填默认值说明
filefile-图片文件(multipart)
clientJobIdstring-可选的任务 ID,用于通过 SSE 跟踪进度

请求示例

bash
curl -X POST http://localhost:1349/api/v1/tools/image/passport-photo/analyze \
  -F "[email protected]"

响应(200 OK)

json
{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "filename": "headshot.jpg",
  "preview": "<base64-encoded PNG>",
  "previewWidth": 800,
  "previewHeight": 1067,
  "landmarks": {
    "leftEye": { "x": 0.42, "y": 0.35 },
    "rightEye": { "x": 0.58, "y": 0.35 },
    "eyeCenter": { "x": 0.50, "y": 0.35 },
    "chin": { "x": 0.50, "y": 0.65 },
    "forehead": { "x": 0.50, "y": 0.22 },
    "crown": { "x": 0.50, "y": 0.18 },
    "nose": { "x": 0.50, "y": 0.48 },
    "faceCenterX": 0.50
  },
  "imageWidth": 2400,
  "imageHeight": 3200
}

进度(SSE,可选)

若提供了 clientJobId,则会流式传输进度(人脸检测为 0-30%,背景去除为 30-95%)。

错误:未检测到人脸(422)

json
{
  "error": "No face detected",
  "details": "Could not detect a face in the uploaded image. Please upload a clear, front-facing photo with good lighting."
}

阶段 2:生成

POST /api/v1/tools/image/passport-photo/generate

裁剪、调整尺寸,并可选地将照片拼贴到打印排版上。使用阶段 1 的缓存图片(不重新运行 AI)。

参数(JSON 请求体)

参数类型是否必填默认值说明
jobIdstring-阶段 1 返回的任务 ID
filenamestring-阶段 1 的原始文件名
countryCodestring-护照规格的国家代码(例如 USGBIN
documentTypestring"passport"证件类型(来自国家规格)
bgColorstring"#FFFFFF"背景颜色十六进制值
printLayoutstring"none"打印纸张排版:none4x6a4
maxFileSizeKbnumber0最大文件大小限制(KB,0 = 无限制)
dpinumber300输出 DPI(72-1200)
customWidthMmnumber-自定义照片宽度(毫米,覆盖国家规格)
customHeightMmnumber-自定义照片高度(毫米,覆盖国家规格)
zoomnumber1缩放系数(0.5-3)。值 > 1 时裁剪得更紧
adjustXnumber0水平位置调整
adjustYnumber0垂直位置调整
landmarksobject-来自阶段 1 响应的特征点对象
imageWidthnumber-来自阶段 1 响应的图片宽度
imageHeightnumber-来自阶段 1 响应的图片高度

请求示例

bash
curl -X POST http://localhost:1349/api/v1/tools/image/passport-photo/generate \
  -H "Content-Type: application/json" \
  -d '{
    "jobId": "a1b2c3d4-...",
    "filename": "headshot.jpg",
    "countryCode": "US",
    "documentType": "passport",
    "bgColor": "#FFFFFF",
    "printLayout": "4x6",
    "dpi": 300,
    "zoom": 1,
    "adjustX": 0,
    "adjustY": 0,
    "landmarks": { "leftEye": {"x":0.42,"y":0.35}, "rightEye": {"x":0.58,"y":0.35}, "eyeCenter": {"x":0.50,"y":0.35}, "chin": {"x":0.50,"y":0.65}, "forehead": {"x":0.50,"y":0.22}, "crown": {"x":0.50,"y":0.18}, "nose": {"x":0.50,"y":0.48}, "faceCenterX": 0.50 },
    "imageWidth": 2400,
    "imageHeight": 3200
  }'

响应(200 OK)

json
{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "downloadUrl": "/api/v1/download/{jobId}/headshot_passport.jpg",
  "dimensions": {
    "widthMm": 51,
    "heightMm": 51,
    "widthPx": 602,
    "heightPx": 602,
    "dpi": 300
  },
  "spec": {
    "country": "United States",
    "countryCode": "US",
    "documentType": "passport",
    "documentLabel": "Passport"
  },
  "printDownloadUrl": "/api/v1/download/{jobId}/headshot_passport_print_4x6.jpg"
}

基础路由

POST /api/v1/tools/image/passport-photo

返回引导信息,提示使用正确的子端点。

json
{
  "error": "Use /api/v1/tools/image/passport-photo/analyze or /generate"
}

说明

  • 需要安装 background-removalface-detection 模型包。
  • 阶段 1 运行 AI(人脸特征点 + 背景去除)并缓存结果。阶段 2 是纯 Sharp 图片处理(快速,无需 AI)。
  • 特征点以归一化坐标形式返回(相对于图片尺寸的 0-1 范围)。
  • 分析响应中的 preview 字段是一张 base64 编码的 PNG(最大宽度 800px),用于快速显示。
  • 国家规格包含证件尺寸、头部高度比例以及基于官方护照照片要求的视线定位。
  • printLayout 选项会在 4x6 英寸或 A4 纸上生成拼贴排版,照片之间留有 2mm 的间隙。
  • 设置 maxFileSizeKb 时,输出会经过迭代压缩以符合大小限制。