FormReadサーバーサイド処理API

Oscar Munoz Oscar Munoz · · 読了時間 2 分

サーバーサイドフォーム処理

FormReadサーバーサイドAPIを使用すると、スキャンしたフォーム画像を送信し、構造化された結果(OMR、OCR、BCR)を直接JSONとして受け取ることができます。ブラウザもiframeも不要で、バックエンドから当社へシンプルなHTTPリクエストを送るだけです。

  • 画像を送信し、1回のリクエストで結果をJSONとして受け取ります
  • OMR(バブル検出)、OCR(テキスト抽出)、BCR(バーコード/QR読み取り)に対応
  • フォーム設定は、ダッシュボードで設定したフォームから自動的に読み込まれます

このAPIを使用するタイミング

ユーザーインターフェースなしで自動化されたサーバー間処理が必要な場合にサーバーサイドAPIを使用します。例えば、フォルダからスキャンしたフォームの一括処理、既存のバックエンドパイプラインとの統合、自動採点システムの構築などです。

ユーザーがフォームを設定し、結果を確認し、QAを行えるビジュアルインターフェースが必要な場合は、代わりにIframe統合APIを使用してください。

認証

エンタープライズ用途では、Bearer認証トークンを生成してAPIを使用できます。

FormRead ダッシュボードにログインし、APIトークンオプションにアクセスします:

API Tokensオプションが強調表示されたFormReadダッシュボードメニュー

サードパーティサービスがあなたの代わりに当社のアプリケーションで認証できるように、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 処理時間 (ミリ秒)

画像入力オプション

画像は 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 のみが必要です。

手作業での採点をやめましょう。

今すぐFormReadを活用しましょう:フォームを作成し、最初のシートをスキャンすれば、数分で構造化された結果が得られます。

今すぐ開始 — クレジットカード不要