OpenThai 2.0 OCR Text — ไทย + อังกฤษ · รันบนเซิร์ฟเวอร์ของเราเอง · ไม่มีค่าใช้จ่ายต่อหน้า
⚠️ ไฟล์นี้มี token
ใครมี token นี้ = ใช้ API ได้เต็มที่ · ส่งให้คนในทีมได้ แต่ อย่าโพสต์ที่สาธารณะ · ถ้า token หลุด บอกผมเพื่อเปลี่ยน
2 · Token
2261934b40661d36e8db1b0a00a621d68c2600d746604dd6
X-OCR-Token (หรือ Authorization: Bearer)POST /v1/ocr → กด Try it outx_ocr_token วาง token · กด Choose File → Execute3 · เรียกจากโค้ด (แตะแท็บ → คัดลอก)
curl -s https://ocr.131199999.xyz/v1/ocr \ -H "X-OCR-Token: 2261934b40661d36e8db1b0a00a621d68c2600d746604dd6" \ -F "file=@page.png"
const TOKEN = "2261934b40661d36e8db1b0a00a621d68c2600d746604dd6";
const form = new FormData();
form.append("file", fileInput.files[0]); // เบราว์เซอร์: ไฟล์จาก input
// Node 18+: form.append("file", new Blob([await readFile("page.pdf")]), "page.pdf");
const res = await fetch("https://ocr.131199999.xyz/v1/ocr?layout=1", {
method: "POST",
headers: { "X-OCR-Token": TOKEN },
body: form
});
const data = await res.json();
console.log(data.text); // ข้อความทั้งไฟล์
console.log(data.pages[0].lines); // บรรทัด + confidence + box
import requests
TOKEN = "2261934b40661d36e8db1b0a00a621d68c2600d746604dd6"
with open("page.pdf", "rb") as f:
r = requests.post(
"https://ocr.131199999.xyz/v1/ocr?layout=1",
headers={"X-OCR-Token": TOKEN},
files={"file": f},
timeout=120,
)
r.raise_for_status()
data = r.json()
print(data["text"])
$token = "2261934b40661d36e8db1b0a00a621d68c2600d746604dd6"
$form = @{ file = Get-Item "C:\path\page.png" }
$r = Invoke-RestMethod -Uri "https://ocr.131199999.xyz/v1/ocr" -Method Post `
-Headers @{ "X-OCR-Token" = $token } -Form $form
$r.text
node "HTTP Request"
Method: POST
URL: https://ocr.131199999.xyz/v1/ocr
Authentication: none
Header: X-OCR-Token = 2261934b40661d36e8db1b0a00a621d68c2600d746604dd6
Body: Form-Data → field "file" = binary จาก node ก่อนหน้า
(หรือ JSON body: { "file_base64": "..." })
ผลลัพธ์: text · pages[].text · pages[].lines[]
ใส่ ?layout=1 ถ้าต้องการตำแหน่งบรรทัด (box) และค่าความมั่นใจของแต่ละบรรทัด
| เรื่อง | ค่า |
|---|---|
| ไฟล์ที่รับ | PNG · JPG · WEBP · BMP · TIFF · PDF |
| ขนาดไฟล์ | ไม่เกิน 25 MB |
| สูงสุด 40 หน้า (ระบบแปลงเป็นภาพ 200 DPI ให้เอง) | |
| ยิงพร้อมกัน | 3 คำขอ — เกินนั้นรอคิวได้ถึง 300 วิ |
| หลายไฟล์ในคำขอเดียว | /v1/ocr/batch สูงสุด 10 ไฟล์ (base64) |
| ความเร็วที่วัดได้ | รูป 1 หน้า ~0.4 วิ · PDF 2 หน้า ~0.3–1 วิ (ฝั่งเซิร์ฟเวอร์) |
| ภาษา | ไทย + อังกฤษ (พิมพ์/สแกน) · ยังไม่ทดสอบตัวเขียนมือ |
{
"ok": true,
"model": "OpenThai2.0-OCR-Text",
"pages_count": 1,
"text": "ข้อความทั้งไฟล์ (หลายหน้าคั่นด้วยบรรทัดว่าง)",
"pages": [
{ "page": 1, "text": "...", "ms": 364.9,
"lines": [
{ "text": "ใบเสร็จรับเงิน / Receipt", "confidence": 0.993, "row": 0,
"box": [[45,44],[279,46],[278,76],[44,73]] }
] }
],
"ms_total": 364.9
}
เอาไปใช้ต่อง่ายสุดคือ text · ถ้าต้องจัดตำแหน่ง (ทำตาราง/ตัดช่อง) ใช้ lines[].box + row
| รหัส | สาเหตุ / แก้ยังไง |
|---|---|
| 401 | ไม่ได้ใส่ token หรือใส่ผิด → คัดลอก token ใหม่ (ระวังช่องว่างหน้า-หลัง) |
| 400 | อ่านไฟล์ไม่ได้ / JSON ผิดรูป → เช็กนามสกุลไฟล์ |
| 413 | ไฟล์ใหญ่เกิน 25 MB · PDF เกิน 40 หน้า · batch เกิน 10 |
| 503 | คิวเต็ม (มีคนใช้ครบ 3 แล้ว) → ยิงใหม่ทีหลัง |
| ถาม | ตอบ |
|---|---|
| คิดเงินไหม | ไม่คิด — รันบน VM ของเรา ไม่มีค่าใช้จ่ายต่อหน้า |
| ข้อมูลไปที่ไหน | ประมวลผลในเครื่องเราเอง ไม่ได้ส่งไปบริการภายนอก · ไฟล์ไม่ถูกเก็บหลังตอบกลับ |
| ใช้ภาษาอื่นได้ไหม | โมเดลนี้เน้นไทย + อังกฤษ (พิมพ์/สแกน) · จีน/ญี่ปุ่นยังไม่ได้ |
| ใช้จากเว็บของเราได้ไหม | ได้ CORS เปิดไว้ · ใช้ fetch จากเบราว์เซอร์ได้เลย |
| เรียกจาก Google Sheet / Apps Script | ได้ — ใช้ UrlFetchApp ส่ง multipart หรือ JSON base64 |
| ต้องการ box เพื่อตัดช่องในฟอร์ม | ใส่ ?layout=1 แล้วใช้ lines[].box |
ทักมาได้เลย (บอกด้วยว่าใช้เครื่องมืออะไร ยิงจากที่ไหน ได้รหัสอะไร) — token หลุด/อยากเปลี่ยน = บอกผม เปลี่ยนได้ทันที
OpenThai 2.0 OCR Text · บริการภายในทีม · อัปเดต 15 พ.ย. 2026