FormRead服务器端处理API

Oscar Munoz Oscar Munoz · · 2 分钟阅读

服务器端表单处理

FormRead服务器端API允许您发送扫描的表单图像,并直接以JSON格式接收结构化结果(OMR、OCR、BCR)。无需浏览器,无需iframe——只需从您的后端向我们发送一个简单的HTTP请求。

  • 发送图像,在单个请求中返回JSON格式的结果
  • 支持OMR(气泡检测)、OCR(文本提取)和BCR(条码/QR码读取)
  • 表单配置将自动从您在仪表板上设置的表单中加载

何时使用此API

当您需要无需任何用户界面的自动化服务器到服务器处理时,请使用服务器端API——例如,从文件夹中批量处理扫描表单、与现有后端管道集成或构建自动化评分系统。

如果您需要可视化界面,让用户可以设置表单、查看结果和执行QA——请改用Iframe集成API。

身份验证

对于企业用途,通过生成 Bearer Auth token 即可使用 API。

登录 FormRead 仪表盘 并访问 API Token 选项:

FormRead仪表板菜单,突出显示API Tokens选项

创建 API 令牌,以允许第三方服务代表您与我们的应用程序进行身份验证:

创建新的FormRead API令牌,带权限复选框

处理表单图像

发送要处理的扫描表单图像。表单必须已经通过仪表板或iframe设置好读取区域(OMR、OCR、BCR)。API使用保存的表单配置来处理图像。

POST /api/forms/{form_id}/process

标题

名称 值
Authorization Bearer YOUR_API_TOKEN
Accept application/json
Content-Type application/json or multipart/form-data

通过文件上传:

curl --location 'https://formread.org/api/forms/123/process' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --form 'image=@"/path/to/scanned-form.jpg"'

通过图像URL:

curl --location 'https://formread.org/api/forms/123/process' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{"image_url": "https://example.com/scanned-form.jpg"}'

回答

{
  "success": true,
  "results": {
    "OMR-0-0": "A",
    "OMR-0-1": "C",
    "OMR-0-2": "B,D",
    "OCR-1": "John Smith",
    "BCR-2": "1234567890"
  },
  "omr_details": {
    "OMR-0": {
      "questions": [
        [
          {"left": 0.12, "top": 0.22, "width": 0.02, "height": 0.02, "blackPixelsRatio": 0.72},
          {"left": 0.15, "top": 0.22, "width": 0.02, "height": 0.02, "blackPixelsRatio": 0.15}
        ]
      ]
    }
  },
  "anchor_error": false,
  "processing_time_ms": 450
}

响应字段

字段 类型 描述
success boolean 处理是否成功完成
results object 区域结果的键值对。键是区域名称(例如:OMR-0-0、OCR-1、BCR-2)
omr_details object OMR区域的详细气泡级数据,包括位置和填充比率
anchor_error boolean 如果表单纸张无法对齐(例如未检测到角点),则为True
processing_time_ms integer 处理时间(毫秒)

图像输入选项

您可以通过三种方式提供图像。请仅使用其中一种:

参数 类型 描述
image file 文件上传(multipart/form-data)
image_url string 图像的公共URL
image_base64 string Base64编码的图像数据

注意

表单配置(读取区域、阈值、锚点)会自动从您在FormRead仪表板中设置的表单加载。您无需在请求中发送任何配置。

批处理

要在一次请求中处理同一表单的多个图像,请在image_url字段中传递以逗号分隔的URL列表。结果按相同顺序以数组形式返回。

请求

curl --location 'https://formread.org/api/forms/123/process' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{"image_url": "https://example.com/a.jpg,https://example.com/b.jpg,https://example.com/c.jpg"}'

回答

{
  "results": [
    {
      "id": "0",
      "image_url": "https://example.com/a.jpg",
      "success": true,
      "results": { "OMR-0-0": "A", "OCR-1": "John Smith" },
      "anchor_error": false,
      "processing_time_ms": 430
    },
    {
      "id": "1",
      "image_url": "https://example.com/b.jpg",
      "success": true,
      "results": { "OMR-0-0": "B", "OCR-1": "Jane Doe" }
    },
    {
      "id": "2",
      "image_url": "https://example.com/c.jpg",
      "success": false,
      "error": "Failed to fetch image from URL: 404"
    }
  ],
  "total": 3
}

批处理参数

参数 类型 默认 描述
image_url string — 一个或多个公共图像URL。批处理模式下以逗号分隔。
details boolean false 在每个批处理结果中包含omr_details(每个气泡的位置和填充率)。默认省略以保持响应较小。

批处理行为

  • 批处理模式仅适用于image_url。文件上传和image_base64仅支持单张图像。
  • 失败的URL不会导致整个批处理失败—该条目会得到"success": false和一个error字段;其余条目继续处理。
  • 结果通过id(从0开始索引)保持提交的顺序。
  • 在单张图像模式下始终返回omr_details;在批处理模式下需要"details": true。

使用omr_details进行批处理

curl --location 'https://formread.org/api/forms/123/process' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "image_url": "https://example.com/a.jpg,https://example.com/b.jpg",
    "details": true
  }'

限制

限额 值 行为
每分钟请求数 60 每个API令牌。超出将返回HTTP 429。
每次请求超时 60s 超过60秒的请求将被终止并返回错误。

429响应如下所示:

{
  "message": "Too Many Attempts."
}

无论包含多少URL,一次批处理请求都计为一个调用。

批处理规模

  • 每批次:在示例单图像响应上测量 processing_time_ms,然后组装一个能在 60 秒内轻松完成的批次。
  • 跨批次:控制请求速率,使每分钟不超过 60 次。
  • 图像大小:在客户端将图像缩小到仍能产生正确结果的最小尺寸。这是影响单张图像处理时间的最关键因素。

支持的区域类型

类型 描述 结果格式
OMR 光学标记识别 - 检测答题卡上填充的气泡 "A", "B,C"
OCR 光学字符识别 - 提取打印或手写文本 "John Smith"
BCR 条形码/QR码识别 - 读取条形码和QR码 "1234567890"

代码示例

以下是用Python和JavaScript处理表单图像的完整示例:

Python

import requests

API_URL = "https://formread.org/api/forms/{form_id}/process"
TOKEN = "YOUR_API_TOKEN"

with open("scanned-form.jpg", "rb") as f:
    response = requests.post(
        API_URL.format(form_id=123),
        headers={
            "Accept": "application/json",
            "Authorization": f"Bearer {TOKEN}",
        },
        files={"image": f},
    )

data = response.json()
print(data["results"])
# {"OMR-0-0": "A", "OMR-0-1": "C", "OCR-1": "John Smith"}

Node.js

const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');

const form = new FormData();
form.append('image', fs.createReadStream('scanned-form.jpg'));

const response = await axios.post(
  'https://formread.org/api/forms/123/process',
  form,
  {
    headers: {
      ...form.getHeaders(),
      'Accept': 'application/json',
      'Authorization': 'Bearer YOUR_API_TOKEN',
    },
  }
);

console.log(response.data.results);
// { 'OMR-0-0': 'A', 'OMR-0-1': 'C', 'OCR-1': 'John Smith' }

常见问题解答

服务端处理API有什么作用?

您通过单个HTTP POST发送扫描的表单图像,并收到结构化的OMR(气泡)、OCR(文本)和BCR(条形码/QR码)结果,以JSON格式返回 - 无需浏览器,无需iframe。

如何对请求进行身份验证?

在Authorization标头中将您的个人访问令牌作为Bearer令牌传递:Authorization: Bearer YOUR_API_TOKEN。从FormRead仪表板的API Tokens部分生成该令牌。

我可以在单个请求中处理多个图像吗?

可以。在image_url字段中传递以逗号分隔的公共图像URL列表。结果按提交顺序以数组形式返回,失败的URL仅影响自身项目 - 其余继续处理。

速率和大小限制是什么?

每个API令牌每分钟最多60个请求,每个请求有60秒的处理超时。无论包含多少个URL,批量请求都计为一次调用。

我是否需要在每个请求中发送表单配置?

不需要。表单配置 - 读取区域、阈值、锚点 - 会自动从您在FormRead仪表板中设置的表单加载。您的请求只需在URL路径中包含图像和表单id。

停止手动评分表单。

立即让FormRead发挥作用:创建您的表单,扫描您的第一张表,几分钟内获得结构化结果。

立即开始——无需信用卡