Skip to main content

passport

description: "ดึงข้อมูลจากรูปภาพหนังสือเดินทาง รวมถึงข้อมูล MRZ"
---

import ImageToTextBox from '@site/src/components/ImageToTextBox';
import DemoOcrCommonResult from '@site/src/components/DemoResult/ocr-common';
import ApiCallStats from '@site/src/components/ApiCallStats';
import ApiPerformanceGraphs from '@site/src/components/ApiPerformanceGraphs';
import EkycSdkDemo from '@site/src/components/EkycSdkDemo';

# 🛂 OCR หนังสือเดินทาง

<div className="api-info-box" style={{backgroundColor: '#f0f9ff', padding: '16px', borderRadius: '12px', marginBottom: '16px', border: '1px solid #bae6fd'}}>
<div className="api-info-price-row" style={{fontSize: '1.5rem', fontWeight: 'bold', color: '#0c4a6e', marginBottom: '8px'}}>
<i className="fa-solid fa-coins" style={{marginRight: '8px', color: '#0284c7'}}></i>
<span className="api-info-price" style={{color: '#0284c7'}}>0.75 IC</span>
<span className="api-info-unit" style={{fontSize: '1rem', fontWeight: 'normal', color: '#475569', marginLeft: '8px'}}>ต่อหน้า</span>
</div>
<div className="api-info-meta" style={{fontSize: '0.8rem', color: '#64748b', display: 'flex', flexWrap: 'wrap', gap: '12px', alignItems: 'center'}}>
<ApiCallStats />
<span><strong><i className="fa-solid fa-tag" style={{marginRight: '4px'}}></i> v2.0</strong></span>
<span><i className="fa-solid fa-circle-check" style={{marginRight: '4px', color: '#22c55e'}}></i> ใช้งานอยู่</span>
<span><i className="fa-solid fa-calendar" style={{marginRight: '4px'}}></i> ก.พ. 2023</span>
<span><i className="fa-solid fa-location-dot" style={{marginRight: '4px'}}></i> POST <code>/v3/store/ekyc/passport</code></span>
</div>
</div>

:::tip[มี Mobile & Web SDK ให้บริการ]
ข้ามขั้นตอนการจัดการกล้อง — SDK eKYC แบบโอเพนซอร์สฟรีของเรา [eKYC SDK](/docs/ekyc/sdk/getting-started) (Web, Flutter, iOS, Android & React Native) จะจับภาพเอกสารและใบหน้าโดยอัตโนมัติและเรียก API นี้ให้คุณ ดูบน GitHub ได้ที่ [GitHub](https://github.com/iapp-technology/iapp-ekyc-sdk)
:::

<ApiPerformanceGraphs />

ยินดีต้อนรับสู่ iApp Passport OCR API ซึ่งเป็นผลิตภัณฑ์ AI ที่พัฒนาโดย บริษัท ไอแอพพ์เทคโนโลยี จำกัด API ของเราได้รับการออกแบบมาเพื่อรับรู้และดึงข้อมูลจากรูปภาพหนังสือเดินทางที่สแกนโดยอัตโนมัติด้วยความแม่นยำและความเร็วสูง ระบบจะเน้นการอ่าน Machine Readable Zone (MRZ) ที่ด้านล่างของหน้าหนังสือเดินทาง โดยดึงข้อมูลสำคัญ เช่น ชื่อผู้ถือสัญชาติ วันเกิด และอื่นๆ

## ทดลองเดโม!

<ImageToTextBox
endpointUrl="https://api.iapp.co.th/v3/store/ekyc/passport"
requireUpload={{total: 1, label: ['อัปโหลดหนังสือเดินทาง'] }}
submitTitle="ประมวลผลหนังสือเดินทาง"
exampleImages={{title: "รูปตัวอย่าง (คลิกเพื่อลอง)", "image": ['/img/api/passport-ocr-example.png']}}
customDemoResultView={(result) => DemoOcrCommonResult(result, "passport-ocr")}
/>

## ลองใช้ SDK (กล้องสด)

ไม่ต้องการอัปโหลดไฟล์ใช่ไหม [iApp eKYC Web SDK](/docs/ekyc/sdk/getting-started) แบบโอเพนซอร์สฟรี จะจับภาพหน้าข้อมูลหนังสือเดินทางโดยอัตโนมัติจากกล้องของคุณ — ระบบจะตรวจจับหน้าหนังสือเดินทาง รอเฟรมที่คมชัดและเสถียร ปรับมุมมองของรูปภาพ และส่งไปยัง API นี้ ดูขั้นตอนเพิ่มเติมได้ที่ [หน้าเดโมสด SDK ฉบับเต็ม](/ekyc-demo)

<EkycSdkDemo flow="documentCapture" documentType="passport" title="หน้าข้อมูลหนังสือเดินทาง (จับภาพอัตโนมัติ)" />

## เริ่มต้นใช้งาน

1. **ข้อกำหนดเบื้องต้น**

- คีย์ API จาก iApp Technology
- รูปภาพหนังสือเดินทางที่สแกน (หน้าโปรไฟล์)
- รูปแบบไฟล์ที่รองรับ: JPEG, JPG, PNG, PDF
- ขนาดไฟล์สูงสุด: 10MB

2. **เริ่มต้นใช้งานฉบับย่อ**

- การประมวลผลรวดเร็ว (1-2 วินาทีต่อรูปภาพ)
- การดึงข้อความความแม่นยำสูง (95.51%)
- รองรับรูปแบบไฟล์หลายรูปแบบ

3. **คุณสมบัติหลัก**

- ดึงข้อมูลจาก TD3 type MRZ
- การให้คะแนนความแม่นยำ OCR และการตรวจสอบ
- การดึงรูปภาพใบหน้าในรูปแบบ base64
- รองรับเอกสาร PDF หลายหน้า
- จัดการกับรูปภาพที่หมุนและเอียง
- การประมวลผลล่วงหน้าด้วยการแบ่งส่วนรูปภาพสำหรับรูปภาพที่เอียง
- รองรับภาษาไทยและอังกฤษ

4. **ความปลอดภัยและการปฏิบัติตามข้อกำหนด**
- เป็นไปตาม GDPR และ PDPA
- ไม่มีการเก็บข้อมูลหลังการประมวลผล

:::info[จะรับคีย์ API ได้อย่างไร?]
โปรดไปที่หน้า [การจัดการคีย์ API](/control/api-keys) เพื่อดูคีย์ API ที่มีอยู่ของคุณ หรือขอคีย์ใหม่
:::

## ตัวอย่าง

### หน้าโปรไฟล์

![รูปภาพตัวอย่างหน้าโปรไฟล์หนังสือเดินทาง](@site/static/img/api/passport-ocr-example.webp)

#### คำขอ:

```bash
curl -X POST https://api.iapp.co.th/v3/store/ekyc/passport/v2 \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/passport.jpg"

การตอบสนอง:

{
"check_composite": "4",
"check_date_of_birth": "4",
"check_expiration_date": "4",
"check_number": "6",
"check_personal_number": "3",
"country": "THA",
"date_of_birth": "930710",
"expiration_date": "250304",
"method": "direct",
"mrz_type": "TD3",
"names": "MATHANIDA",
"nationality": "THA",
"number": "AC1062346",
"personal_number": "0012345678913",
"raw_text": "P<THAPOSHNASWADIWONG<<MATHANIDA<<<<<<<<<<<<<\nAC10623466THA9307104F25030440012345678913<34",
"sex": "F",
"surname": "POSHNASWADIWONG",
"type": "P",
"valid_composite": true,
"valid_date_of_birth": true,
"valid_expiration_date": true,
"valid_number": true,
"valid_personal_number": true,
"valid_score": 100,
"face": "/9j/4AAQSkZJRgABAQAAAQABAAD/..."
}

คำอธิบายฟิลด์การตอบสนอง

ฟิลด์คำอธิบายรูปแบบตัวอย่าง
check_compositeเลขตรวจสอบโดยรวมสำหรับบรรทัดที่อ่านด้วยเครื่องด้านบนและตรงกลางเลขโดด"4"
check_date_of_birthเลขตรวจสอบสำหรับฟิลด์วันเกิดเลขโดด"4"
check_expiration_dateเลขตรวจสอบสำหรับวันหมดอายุเลขโดด"4"
check_numberเลขตรวจสอบสำหรับหมายเลขเอกสารเลขโดด"6"
check_personal_numberเลขตรวจสอบสำหรับหมายเลขประจำตัวประชาชนเลขโดด"3"
countryรหัสประเทศที่ออกหนังสือเดินทาง3 ตัวอักษร"THA"
date_of_birthวันเกิดYYMMDD"930710"
expiration_dateวันหมดอายุเอกสารYYMMDD"250304"
methodวิธีการอ่านที่ใช้String"direct"
mrz_typeประเภทของ machine readable zoneString"TD3"
namesชื่อ/นามสกุล (ถ้ามี)String"MATHANIDA"
nationalityสัญชาติของผู้ถือ3 ตัวอักษร"THA"
numberหมายเลขหนังสือเดินทางString"AC1062346"
personal_numberหมายเลขประจำตัวประชาชนString"0012345678913"
raw_textข้อความ MRZ ดิบจากหนังสือเดินทางString"P<THAPOSHNASWADIWONG..."
sexเพศตัวอักษรเดียว"F"
surnameนามสกุลString"POSHNASWADIWONG"
typeประเภทเอกสารString"P"
valid_compositeการตรวจสอบความถูกต้องของ MRZ โดยรวมBooleantrue
valid_date_of_birthความถูกต้องของเลขตรวจสอบวันเกิดBooleantrue
valid_expiration_dateความถูกต้องของเลขตรวจสอบวันหมดอายุBooleantrue
valid_numberความถูกต้องของเลขตรวจสอบหมายเลขเอกสารBooleantrue
valid_personal_numberความถูกต้องของเลขตรวจสอบหมายเลขประจำตัวประชาชนBooleantrue
valid_scoreคะแนนความถูกต้องโดยรวมInteger 0-100100
faceรูปภาพใบหน้าที่ถูกดึงออกมาBase64 string"/9j/4AAQSkZJRgABA..."

การประมวลผลไฟล์ PDF

เมื่อประมวลผลไฟล์ PDF รูปแบบการตอบสนองจะแตกต่างกันเล็กน้อย:

  1. การตอบสนองจะเป็น JSON array ที่มีผลลัพธ์สำหรับแต่ละหน้า
  2. ผลลัพธ์แต่ละหน้าประกอบด้วย:
    • page: หมายเลขหน้า
    • info: ประกอบด้วยฟิลด์มาตรฐานทั้งหมดตามที่แสดงด้านบน
  3. ฟิลด์ process_time แสดงระยะเวลาการประมวลผลทั้งหมด

โครงสร้างการตอบสนอง PDF ตัวอย่าง:

[
{
"page": 1,
"info": {
"sex": "F",
"number": "AC1062346",
"expiration_date": "04/03/25",
"raw_text": "P<THAPOSHNASWADIWONG<<MATHANIDA<<<<<<<<<<<<<\nAC10623466THA9307104F25030440012345678913<34",
"personal_number": "0012345678913",
"surname": "POSHNASWADIWONG",
"nationality": "THA",
"date_of_birth": "10/07/93",
"names": "MATHANIDA",
"country": "THA",
"face": "iVBORw0...CYII=",
"inference": "3.888",
"file_name": "1676365480.3823211_thai_passport_page_1.png",
"message": "Success",
"status_code": 200
}
},
{
"process_time": "4.918s"
}
]

คุณสมบัติและความสามารถ

คุณสมบัติหลัก

  • การดึงข้อความ MRZ (Machine Readable Zone)
  • การดึงรูปภาพใบหน้า
  • รองรับ PDF หลายหน้า
  • การแก้ไขการวางแนวรูปภาพอัตโนมัติ
  • การแบ่งส่วนรูปภาพสำหรับรูปภาพที่เอียง
  • การตรวจสอบความถูกต้องความแม่นยำสูง

ฟิลด์ที่รองรับ

  • ประเภทเอกสาร
  • ประเทศที่ออก
  • หมายเลขเอกสาร
  • ชื่อผู้ถือ
  • สัญชาติ
  • วันเกิด
  • เพศ
  • วันหมดอายุ
  • หมายเลขประจำตัวประชาชน
  • รูปภาพใบหน้า (base64)
  • ข้อความ MRZ ดิบ
  • คะแนนการตรวจสอบ

Endpoint ของ API

EndpointMethodคำอธิบายค่าใช้จ่าย
/v3/store/ekyc/passport/v2
/passport-ocr/v2 (รุ่นเก่า)
POSTPassport OCR ที่ปรับปรุงแล้วมีความแม่นยำ 95.51% - ดึงข้อมูล MRZ และรูปภาพใบหน้า0.75 IC ต่อหน้า
/v3/store/ekyc/passport/v1
/passport-ocr (รุ่นเก่า)
POSTPassport OCR - ดึงข้อมูล MRZ และรูปภาพใบหน้า0.75 IC ต่อหน้า

เอกสารอ้างอิง API

Endpoint Passport OCR

1. Passport OCR (เวอร์ชัน 1)

POST /v3/store/ekyc/passport/v1

ทำการ OCR บนหน้าโปรไฟล์หนังสือเดินทางและดึงข้อมูล MRZ


2. Passport OCR (เวอร์ชัน 2)

POST /v3/store/ekyc/passport/v2

เวอร์ชันที่ปรับปรุงแล้วด้วยความแม่นยำที่เพิ่มขึ้น (95.51%) ทำการ OCR บนหน้าโปรไฟล์หนังสือเดินทางและดึงข้อมูล MRZ

ส่วนหัวคำขอ

ชื่อประเภทจำเป็นคำอธิบาย
apikeystringใช่คีย์ API ของคุณ

ส่วนเนื้อหาคำขอ (multipart/form-data)

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
fileFileใช่ไฟล์รูปภาพ (JPG, PNG, PDF)
optionsStringไม่เปิดใช้งาน "segmentation" สำหรับการประมวลผลรูปภาพที่เอียง

ตัวอย่างโค้ด

Curl

curl -X POST https://api.iapp.co.th/v3/store/ekyc/passport/front \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/file.jpg"

Python

import requests

url = "https://api.iapp.co.th/v3/store/ekyc/passport/v2"
headers = {
"apikey": "YOUR_API_KEY"
}
files = {
"file": open("passport.jpg", "rb")
}

response = requests.post(url, headers=headers, files=files)
print(response.json())

JavaScript

const axios = require("axios")
const FormData = require("form-data")
const fs = require("fs")

let data = new FormData()
data.append("file", fs.createReadStream("passport.jpg"))

let config = {
method: "post",
url: "https://api.iapp.co.th/v3/store/ekyc/passport/v2",
headers: {
apikey: "YOUR_API_KEY",
...data.getHeaders(),
},
data: data,
}

axios(config)
.then((response) => console.log(response.data))
.catch((error) => console.log(error))

PHP

<?php
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.iapp.co.th/v3/store/ekyc/passport/v2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => array(
'apikey: YOUR_API_KEY'
),
CURLOPT_POSTFIELDS => array(
'file'=> new CURLFILE('passport.jpg')
)
));

$response = curl_exec($curl);
curl_close($curl);
echo $response;

Swift

import Foundation

let url = URL(string: "https://api.iapp.co.th/v3/store/ekyc/passport/v2")!
let boundary = "Boundary-\(UUID().uuidString)"

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("YOUR_API_KEY", forHTTPHeaderField: "apikey")
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

let imageData = try! Data(contentsOf: URL(fileURLWithPath: "passport.jpg"))

var body = Data()
body.append("--\(boundary)\r\n")
body.append("Content-Disposition: form-data; name=\"file\"; filename=\"passport.jpg\"\r\n")
body.append("Content-Type: image/jpeg\r\n\r\n")
body.append(imageData)
body.append("\r\n--\(boundary)--\r\n")

let task = URLSession.shared.uploadTask(with: request, from: body) { data, response, error in
if let data = data {
let json = try? JSONSerialization.jsonObject(with: data)
print(json ?? "")
}
}
task.resume()

Kotlin

import okhttp3.*
import java.io.File

val client = OkHttpClient()

val file = File("passport.jpg")
val requestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(
"file",
file.name,
RequestBody.create(MediaType.parse("image/jpeg"), file)
)
.build()

val request = Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/passport/v2")
.addHeader("apikey", "YOUR_API_KEY")
.post(requestBody)
.build()

client.newCall(request).execute().use { response ->
println(response.body()?.string())
}

Java

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.*;

public class PassportOCR {
public static void main(String[] args) throws IOException {
String boundary = "Boundary-" + System.currentTimeMillis();
URL url = new URL("https://api.iapp.co.th/v3/store/ekyc/passport/v2");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("apikey", "YOUR_API_KEY");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

try (OutputStream os = conn.getOutputStream()) {
byte[] fileBytes = Files.readAllBytes(Paths.get("passport.jpg"));

os.write(("--" + boundary + "\r\n").getBytes());
os.write(("Content-Disposition: form-data; name=\"file\"; filename=\"passport.jpg\"\r\n").getBytes());
os.write(("Content-Type: image/jpeg\r\n\r\n").getBytes());
os.write(fileBytes);
os.write(("\r\n--" + boundary + "--\r\n").getBytes());
}

try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
}

Dart

import 'package:http/http.dart' as http;
import 'dart:io';

Future<void> scanPassport() async {
var url = Uri.parse('https://api.iapp.co.th/v3/store/ekyc/passport/v2');
var request = http.MultipartRequest('POST', url);

request.headers['apikey'] = 'YOUR_API_KEY';

request.files.add(
await http.MultipartFile.fromPath(
'file',
'passport.jpg',
),
);

var response = await request.send();
var responseBody = await response.stream.bytesToString();
print(responseBody);
}

ข้อจำกัดและแนวทางปฏิบัติที่ดีที่สุด

ข้อจำกัด

  • ขนาดไฟล์สูงสุด: 10MB
  • รูปแบบที่รองรับ: JPG, PNG, PDF
  • หนังสือเดินทางหนึ่งเล่มต่อรูปภาพ
  • ต้องการรูปภาพที่ชัดเจนและโฟกัส

แนวทางปฏิบัติที่ดีที่สุด

  • ตรวจสอบให้แน่ใจว่ามีแสงสว่างเพียงพอ
  • หลีกเลี่ยงแสงสะท้อน
  • จัดหนังสือเดินทางให้อยู่ตรงกลางเฟรม
  • วางหนังสือเดินทางให้ราบ
  • ใช้รูปภาพความละเอียดสูง
  • เปิดใช้งานตัวเลือก segmentation สำหรับรูปภาพที่เอียง

ความแม่นยำและประสิทธิภาพ

ความแม่นยำโดยรวม

  • เวอร์ชันปัจจุบัน (2.0): 95.51%
  • เวอร์ชันก่อนหน้า (1.1): 88.86%

ความแม่นยำระดับฟิลด์ (เวอร์ชัน 1.1)

  • ชื่อ: 81.93%
  • นามสกุล: 90.26%
  • หมายเลขเอกสาร: 84.03%
  • สัญชาติ: 88.09%
  • การตรวจจับใบหน้า: 100%

ความเร็วในการประมวลผล

  • รูปภาพเดียว: 1-2 วินาที
  • เอกสาร PDF: 2-3 วินาทีต่อหน้า
  • เวลาเพิ่มเติมเมื่อใช้ segmentation

ปัจจัยที่มีผลต่อความแม่นยำ

  • คุณภาพรูปภาพ
  • สภาพแสง
  • ตำแหน่งของเอกสาร
  • ความละเอียดของรูปภาพ
  • สภาพของเอกสาร
  • มุมเอียงของรูปภาพ

ประวัติ

เวอร์ชัน 2.0 (กุมภาพันธ์ 2023)

  • เพิ่มความแม่นยำโดยรวมจาก 88.86% เป็น 95.51%
  • อัปเกรดเอนจิน OCR ทั้งหมด
  • เพิ่มการประมวลผลล่วงหน้าด้วยการแบ่งส่วนรูปภาพสำหรับรูปภาพที่เอียง

เวอร์ชัน 1.1 (มกราคม 2023)

  • เพิ่มการดึงรูปภาพใบหน้าเป็น base64
  • เพิ่มการรองรับรูปภาพที่เอียงเล็กน้อย
  • เพิ่มการรองรับไฟล์ PDF
  • เพิ่มการรองรับ PDF หลายหน้า

เวอร์ชัน 1.0 (กุมภาพันธ์ 2022)

  • เปิดตัวครั้งแรก
  • รองรับหนังสือเดินทางทุกประเทศโดยใช้ MRZ
  • รองรับรูปแบบรูปภาพพื้นฐาน (PNG, JPG, JPEG)

ราคา

การดำเนินการProduction PathLegacy Pathค่าใช้จ่าย ICหน่วยOn-Premise
Passport OCR (เวอร์ชัน 1)/v3/store/ekyc/passport/v1/passport-ocr0.75 ICต่อ 1 คำขอติดต่อเรา
Passport OCR (เวอร์ชัน 2)/v3/store/ekyc/passport/v2/passport-ocr/v20.75 ICต่อ 1 คำขอติดต่อเรา