FormRead服务器端处理API
服务器端表单处理
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 选项:
创建 API 令牌,以允许第三方服务代表您与我们的应用程序进行身份验证:
处理表单图像
发送要处理的扫描表单图像。表单必须已经通过仪表板或iframe设置好读取区域(OMR、OCR、BCR)。API使用保存的表单配置来处理图像。
标题
| 名称 | 值 |
|---|---|
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。