FormReadサーバーサイド処理API
サーバーサイドフォーム処理
FormReadサーバーサイドAPIを使用すると、スキャンしたフォーム画像を送信し、構造化された結果(OMR、OCR、BCR)を直接JSONとして受け取ることができます。ブラウザもiframeも不要で、バックエンドから当社へシンプルなHTTPリクエストを送るだけです。
- 画像を送信し、1回のリクエストで結果をJSONとして受け取ります
- OMR(バブル検出)、OCR(テキスト抽出)、BCR(バーコード/QR読み取り)に対応
- フォーム設定は、ダッシュボードで設定したフォームから自動的に読み込まれます
このAPIを使用するタイミング
ユーザーインターフェースなしで自動化されたサーバー間処理が必要な場合にサーバーサイドAPIを使用します。例えば、フォルダからスキャンしたフォームの一括処理、既存のバックエンドパイプラインとの統合、自動採点システムの構築などです。
ユーザーがフォームを設定し、結果を確認し、QAを行えるビジュアルインターフェースが必要な場合は、代わりにIframe統合APIを使用してください。
認証
エンタープライズ用途では、Bearer認証トークンを生成してAPIを使用できます。
FormRead ダッシュボードにログインし、APIトークンオプションにアクセスします:
サードパーティサービスがあなたの代わりに当社のアプリケーションで認証できるように、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 | 処理時間 (ミリ秒) |
画像入力オプション
画像は 3 つの方法で指定できます。必ず 1 つのみ使用してください。
| パラメーター | 型 | 説明 |
|---|---|---|
image |
file | ファイルアップロード (multipart/form-data) |
image_url |
string | 画像の公開 URL |
image_base64 |
string | Base64 エンコード画像データ |
注意
フォーム設定 (読み取り領域、しきい値、アンカー) は、FormRead ダッシュボードで設定したフォームから自動的に読み込まれます。リクエストに設定を送信する必要はありません。
バッチ処理
1つのリクエストで同じフォームの複数の画像を処理するには、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 | — | 1つ以上の公開画像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
}'
制限
| 制限 | 値 | 動作 |
|---|---|---|
| 1分あたりのリクエスト数 | 60 |
APIトークンごと。超過するとHTTP 429が返されます。 |
| リクエストあたりのタイムアウト | 60s |
60秒を超えるリクエストはエラーで終了します。 |
429レスポンスは次のようになります:
{
"message": "Too Many Attempts."
}
バッチリクエストは、含まれるURLの数にかかわらず1回の呼び出しとしてカウントされます。
バッチのサイズ設定
- バッチごと:サンプルの単一画像レスポンスで
processing_time_msを測定し、60秒未満で余裕を持って終了するバッチを組んでください。 - バッチ全体:リクエストのペースを調整し、毎分60未満に抑えてください。
- 画像サイズ:正しい結果が得られる最小の寸法にクライアント側で縮小してください。これが画像ごとの時間に最も効果がある手段です。
サポートされている領域タイプ
| 型 | 説明 | 結果フォーマット |
|---|---|---|
| OMR | Optical Mark Recognition (OMR) - 解答用紙の塗りつぶされたバブルを検出します | "A", "B,C" |
| OCR | Optical Character Recognition (OCR) - 印刷または手書きテキストを抽出します | "John Smith" |
| BCR | Barcode/QR Code Recognition (BCR) - バーコードと 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' }
よくある質問
Server-Side Processing API では何ができますか?
スキャンしたフォーム画像を 1 回の HTTP POST で送信すると、構造化された OMR (バブル)、OCR (テキスト)、BCR (バーコード/QR) の結果が JSON で返されます。ブラウザや iframe は不要です。
リクエストを認証するにはどうすればよいですか?
個人用アクセストークンを Authorization ヘッダーに Bearer トークンとして渡します: Authorization: Bearer YOUR_API_TOKEN。トークンは FormRead ダッシュボードの API トークンセクションから生成します。
1 回のリクエストで複数の画像を処理できますか?
はい。公開画像 URL をカンマ区切りで image_url フィールドに指定します。結果は送信順に一致する配列で返され、失敗した URL はその項目だけが失敗し、残りは続行されます。
レート制限とサイズ制限はありますか?
API トークンごとに 1 分間最大 60 リクエスト、リクエストあたり 60 秒の処理タイムアウトがあります。一括リクエストは、含まれる URL の数に関係なく 1 回の呼び出しとしてカウントされます。
リクエストごとにフォーム設定を送信する必要はありますか?
いいえ。フォーム設定 (読み取り領域、しきい値、アンカー) は、FormRead ダッシュボードで設定したフォームから自動的に読み込まれます。リクエストには画像と URL パス内のフォーム ID のみが必要です。