跳到主要内容

⚡ 电费账单 OCR

1 IC每页
v1.0 活跃 2026年7月 POST /ocr/v3/electricity-bill/file

欢迎使用电费账单 OCR API,这是 iApp Any Documents OCR 的一部分,由艾艾普科技有限公司提供。该 API 可从泰国都会电力局 (Metropolitan Electricity Authority - การไฟฟ้านครหลวง) 和省电力局 (Provincial Electricity Authority - การไฟฟ้าส่วนภูมิภาค) 的账单中提取账单数据,包括电表读数、每项费用明细以及增值税。

试用演示!

试用 AI 演示

登录或创建免费账户来使用此 AI 服务演示并探索我们强大的 API。

注册即可获得 100 积分 (IC) 免费赠送!

优惠截止至 2025 年 12 月 31 日

Example Images (Click to try)

入门指南

  1. 先决条件

    • 艾艾普科技 (iApp Technology) 的 API 密钥
    • 文档文件:电费账单 (ใบแจ้งค่าไฟฟ้า)
    • 支持的文件格式:PDF, JPG, JPEG, PNG, WEBP
    • 最大文件大小:50MB
  2. 快速入门

    • 单个 POST 请求,使用 multipart/form-data
    • 结构化的 JSON 输出,包含每个字段的置信度得分
    • 每个输入页面将在 docs 中返回自己的条目,因此可以在一次请求中发送一批文档。
  3. 主要特点

    • 字段级提取,带有置信度评分
    • 通过 target_lang 提供泰语和英语输出
    • 通过 return_ocr 可选原始 OCR 文本
    • 可处理照片和扫描的 PDF
  4. 安全与合规

    • 符合 GDPR 和 PDPA
    • 安全的 API 端点
    • 处理后不保留数据
如何获取 API 密钥?

请访问 API 密钥管理 页面查看您现有的 API 密钥或申请新密钥。

API 端点

端点方法描述费用
/ocr/v3/electricity-bill/file
/v3/store/ocr/electricity-bill
POST从泰国电费账单 (MEA / PEA) 中提取账单数据每页 1 IC

这两种形式是等效的。此端点没有 base64 变体 — 仅支持文件上传。

请求

请求头

头部是否必需
apikey您的艾艾普 API 密钥

请求正文 (multipart/form-data)

参数类型默认值描述
file文件 (可重复)必需。 文档文件。PDF 页面会自动处理。
return_ocr布尔值false在响应中包含原始 OCR 文本。
target_lang字符串th提取值的语言:then
include_confidence布尔值true包含每个字段的置信度得分 (0.00–1.00)。

cURL

curl -X POST "https://api.iapp.co.th/ocr/v3/electricity-bill/file" \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/document.pdf" \
-F "target_lang=th" \
-F "include_confidence=true"

响应

{
"docs": [
{
"message": "success",
"raw": {},
"processed": {
"provider": "การไฟฟ้านครหลวง",
"customer_name": "นายสมศักดิ์ รักการเรียน",
"customer_address": "12/5 ม.7 ต.ไทรน้อย อ.ไทรน้อย จ.นนทบุรี",
"account_number": "012345678",
"invoice_number": "00962934584",
"tariff_type": "1.2",
"reading_date": "15/08/64",
"last_reading": 6704,
"previous_reading": 6542,
"units_consumed": 162,
"energy_charge": 537.92,
"service_charge": 38.22,
"ft_rate_per_unit": -0.1532,
"ft_charge": -24.82,
"discount": 0.0,
"subtotal_before_vat": 551.32,
"vat_amount": 38.59,
"total_current_bill": 589.91,
"due_date": "31/08/64"
},
"confidence": {
"provider": 0.95,
"customer_name": 0.95,
"customer_address": 0.95,
"account_number": 0.95,
"invoice_number": 0.95,
"tariff_type": 0.95
},
"process_ms": 4120
}
],
"docs_count": 1,
"process_ms": 4300
}

iapp-input-pages 响应头报告了计费页面的数量。

支持的字段

字段类型描述
provider字符串发行机构,例如:การไฟฟ้านครหลวง
customer_name字符串电力客户姓名
customer_address字符串服务地址
account_number字符串客户账号 (CA)
invoice_number字符串账单/税务发票号码
tariff_type字符串费率类型,例如:1.2
reading_date字符串抄表日期
last_reading数字当前电表读数
previous_reading数字上期电表读数
units_consumed数字消耗的电力 (kWh)
energy_charge数字能源费用 (泰铢)
service_charge数字月度服务费 (泰铢)
ft_rate_per_unit数字每单位燃料成本调整电价 (泰铢/单位)
ft_charge数字燃料成本调整费用 (泰铢,可能为负数)
discount数字折扣,例如政府补贴 (泰铢)
subtotal_before_vat数字增值税前总计 (泰铢)
vat_amount数字增值税金额 (泰铢)
total_current_bill数字当前应付总额 (泰铢)
due_date字符串付款截止日期

错误处理

状态码含义
400文件扩展名不支持,或文件大小超过 50MB
401缺少或无效的 apikey
402信用余额不足
404URL 中文档类型未知
422请求未附加文件
500处理错误 — 响应包含一个错误代码,用于向支持部门报价

代码示例

Python

import requests

url = "https://api.iapp.co.th/ocr/v3/electricity-bill/file"
headers = {"apikey": "YOUR_API_KEY"}
files = {"file": open("document.pdf", "rb")}
data = {"target_lang": "th", "include_confidence": "true"}

response = requests.post(url, headers=headers, files=files, data=data)
result = response.json()
print(result["docs"][0]["processed"])
print(result["docs"][0]["confidence"])

JavaScript

const form = new FormData();
form.append("file", fileInput.files[0]);
form.append("target_lang", "th");
form.append("include_confidence", "true");

const res = await fetch("https://api.iapp.co.th/ocr/v3/electricity-bill/file", {
method: "POST",
headers: { apikey: "YOUR_API_KEY" },
body: form,
});
const result = await res.json();
console.log(result.docs[0].processed);

PHP

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.iapp.co.th/ocr/v3/electricity-bill/file");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["apikey: YOUR_API_KEY"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
"file" => new CURLFile("/path/to/document.pdf"),
"target_lang" => "th",
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>

Java

OkHttpClient client = new OkHttpClient();

RequestBody body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", "document.pdf",
RequestBody.create(new File("/path/to/document.pdf"),
MediaType.parse("application/pdf")))
.addFormDataPart("target_lang", "th")
.build();

Request request = new Request.Builder()
.url("https://api.iapp.co.th/ocr/v3/electricity-bill/file")
.addHeader("apikey", "YOUR_API_KEY")
.post(body)
.build();

try (Response response = client.newCall(request).execute()) {
System.out.println(response.body().string());
}

Swift

let url = URL(string: "https://api.iapp.co.th/ocr/v3/electricity-bill/file")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("YOUR_API_KEY", forHTTPHeaderField: "apikey")

let boundary = UUID().uuidString
request.setValue("multipart/form-data; boundary=\(boundary)",
forHTTPHeaderField: "Content-Type")

var data = Data()
let fileData = try Data(contentsOf: URL(fileURLWithPath: "/path/to/document.pdf"))
data.append("--\(boundary)\r\n".data(using: .utf8)!)
data.append("Content-Disposition: form-data; name=\"file\"; filename=\"document.pdf\"\r\n\r\n".data(using: .utf8)!)
data.append(fileData)
data.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)

URLSession.shared.uploadTask(with: request, from: data) { responseData, _, _ in
if let responseData, let json = String(data: responseData, encoding: .utf8) {
print(json)
}
}.resume()

Kotlin

val client = OkHttpClient()

val body = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(
"file", "document.pdf",
File("/path/to/document.pdf").asRequestBody("application/pdf".toMediaType())
)
.addFormDataPart("target_lang", "th")
.build()

val request = Request.Builder()
.url("https://api.iapp.co.th/ocr/v3/electricity-bill/file")
.addHeader("apikey", "YOUR_API_KEY")
.post(body)
.build()

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

Dart

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

final request = http.MultipartRequest(
'POST',
Uri.parse('https://api.iapp.co.th/ocr/v3/electricity-bill/file'),
);
request.headers['apikey'] = 'YOUR_API_KEY';
request.fields['target_lang'] = 'th';
request.files.add(
await http.MultipartFile.fromPath('file', '/path/to/document.pdf'),
);

final response = await request.send();
print(await response.stream.bytesToString());

限制与最佳实践

限制

  • 每个请求最大文件大小 50MB
  • 支持的格式:PDF, JPG, JPEG, PNG, WEBP
  • 准确性取决于图像质量 — 严重损坏的扫描件、反光和手写字覆盖打印值会降低字段级准确性
  • 提取仅限于上述字段

最佳实践

  • 如果有原始 PDF,请优先使用 PDF 而非照片
  • 拍摄整个文档,保持正对且光线均匀
  • 扫描件使用至少 300 DPI
  • 检查每个字段的 confidence 分数,并将低置信度值路由到人工审核
  • 在支持的情况下,一次请求发送多个文档以减少往返次数

准确性与性能

字段级提取准确性是在内部 ChindaOCR-M3 金色评估数据集上测量的 — 在真实的泰国文档上进行视觉重新验证的标签,包括低分辨率照片和部分被手写字覆盖的账单。

文档类型文档数量字段数量准确性
电费账单54597.8%
总计,所有六种文档类型2514798.6%

支持

需要帮助?请联系我们: