FormRead 서버 측 처리 API

Oscar Munoz Oscar Munoz · · 2분 읽기

서버 측 양식 처리

FormRead 서버 측 API를 사용하면 스캔된 양식 이미지를 보내고 구조화된 결과(OMR, OCR, BCR)를 JSON으로 직접 받을 수 있습니다. 브라우저나 iframe 없이 백엔드에서 당사로 간단한 HTTP 요청만 하면 됩니다.

  • 이미지를 보내면 단일 요청으로 결과를 JSON으로 받습니다.
  • OMR(버블 감지), OCR(텍스트 추출), BCR(바코드/QR 읽기) 지원
  • 양식 구성은 대시보드에서 설정한 양식에서 자동으로 로드됩니다.

이 API를 사용해야 하는 경우

사용자 인터페이스 없이 자동화된 서버 간 처리가 필요할 때 서버 측 API를 사용하세요. 예를 들어 폴더에서 스캔된 양식을 일괄 처리하거나 기존 백엔드 파이프라인과 통합하거나 자동 채점 시스템을 구축하는 경우입니다.

사용자가 양식을 설정하고 결과를 검토하며 QA를 수행할 수 있는 시각적 인터페이스가 필요하다면 Iframe 통합 API를 대신 사용하세요.

인증

엔터프라이즈 사용의 경우 Bearer Auth 토큰을 생성하여 API를 사용할 수 있습니다.

FormRead 대시보드에 로그인하여 API 토큰 옵션에 접근하세요:

API 토큰 옵션이 강조 표시된 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 처리 시간(밀리초)

이미지 입력 옵션

이미지를 세 가지 방법으로 제공할 수 있습니다. 정확히 하나를 사용하세요:

매개변수 유형 설명
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 광학 마크 인식(OMR) - 답안지에서 채워진 버블을 감지합니다. "A", "B,C"
OCR 광학 문자 인식(OCR) - 인쇄 또는 필기 텍스트를 추출합니다. "John Smith"
BCR 바코드/QR 코드 인식(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' }

자주 묻는 질문

서버 측 처리 API는 무엇을 하나요?

스캔된 양식 이미지를 단일 HTTP POST로 보내면 구조화된 OMR(버블), OCR(텍스트), BCR(바코드/QR) 결과를 JSON으로 받을 수 있습니다. 브라우저나 iframe이 필요하지 않습니다.

요청을 인증하려면 어떻게 하나요?

Authorization 헤더에 개인 액세스 토큰을 Bearer 토큰으로 전달합니다: Authorization: Bearer YOUR_API_TOKEN. FormRead 대시보드의 API 토큰 섹션에서 토큰을 생성하세요.

단일 요청으로 여러 이미지를 처리할 수 있나요?

예. image_url 필드에 공개 이미지 URL을 쉼표로 구분하여 목록으로 전달하세요. 결과는 제출 순서와 일치하는 배열로 반환되며, 실패한 URL은 해당 항목만 실패하고 나머지는 계속됩니다.

속도 및 크기 제한은 무엇인가요?

API 토큰당 분당 최대 60개의 요청이 가능하며, 요청당 처리 시간 초과는 60초입니다. 일괄 요청은 포함된 URL 수에 관계없이 단일 호출로 계산됩니다.

요청마다 양식 구성을 보내야 하나요?

아니요. 양식 구성(읽기 영역, 임계값, 앵커)은 FormRead 대시보드에서 설정한 양식에서 자동으로 로드됩니다. 요청에는 이미지와 URL 경로의 양식 ID만 필요합니다.

손으로 폼을 채점하는 것을 멈추세요.

지금 바로 FormRead를 사용하세요. 양식을 만들고, 첫 번째 시트를 스캔하여 몇 분 안에 구조화된 결과를 얻으세요.

지금 시작하세요 — 신용카드 불필요