行驶证OCR识别API实战:3行代码实现机动车行驶证信息自动录入(附Python/Java/PHP/JS示例)
行驶证OCR识别API实战:3行代码实现机动车行驶证信息自动录入(附Python/Java/PHP/JS示例)
在二手车交易、网约车平台入驻、保险理赔等场景中,行驶证信息录入是最绕不开的一环。但传统的上传证件加人工录入方式,效率低、容易错,体验非常割裂。很多公司为此组建了审核团队,用“扫一遍、录一遍”的方式去处理大量车辆证件,人力投入大,还经常因录入错误导致后续业务出错——比如保险单上填错车牌号或VIN码,理赔时查无此车;比如网约车平台后台数据混乱,司机反复提交材料。
本文从实战角度,详细讲解行驶证OCR的技术原理、主流API对比和多语言接入代码,帮助你用最少的代码成本完成行驶证信息的全自动录入。
一、行驶证OCR为什么刚需?
行驶证OCR识别的核心应用场景几乎覆盖了所有涉及车辆信息管理的领域:
汽车后市场
二手车交易平台需要快速提取车牌号、VIN码、品牌型号等关键信息用于估价和交易审核。4S店的售后维修系统中,客户车辆信息录入是一个常见耗时点,通过OCR扫描行驶证可以大幅缩短工单创建时间。类似地,针对4S店、二手车交易等场景的行驶证识别需求,已有方案覆盖了新旧版机动车行驶证、临时牌照等18种证件类型。研究表明,在车辆识别码、车牌、行驶证等关键信息的OCR识别技术,正在成为连接物理车辆与数字管理系统、驱动业务流程自动化的关键基础设施。
网约车与货运平台
滴滴、货拉拉、运满满等平台的司机入驻审核,需要上传行驶证、驾驶证和身份证。OCR技术可以自动识别并录入司机信息和车辆信息,将审核时间从原来的几小时缩短到几分钟。同时,物流运输企业的车辆档案管理、轮胎保养记录等也都需要准确的车辆证件信息。
保险理赔
车险理赔时,理赔员需要录入出险车辆的车牌号、VIN码等信息。OCR识别行驶证后,系统可以自动调取车辆档案,大幅加快核赔处理速度。
车辆管理系统
租车公司管理庞大的车队,每次车辆租赁、年检提醒、违章查询、保险到期提醒都依赖行驶证信息。OCR实现信息自动化入库后,租车公司可以实现无需人工录入的车辆信息档案管理。
政府业务办理
车辆管理所、政务大厅在办理机动车注册登记、变更、过户时,需要读取行驶证上的核心信息。通过OCR识别,可有效降低窗口人员手动录错的风险。
根据行业调研数据,行驶证OCR的市场需求在持续增长,尤其是二手车电商和网约车两大领域,2026年整体OCR市场继续处于高速增长期。
二、行驶证OCR的技术难点与识别字段
行驶证识别包含哪些字段?
行驶证OCR识别通常支持正页和副页所有字段的自动定位与识别:
正页:车牌号码、车辆类型、所有人、住址、使用性质、品牌型号、车辆识别代号(VIN码)、发动机号码、注册日期、发证日期、发证单位。
副页:号牌号码、档案编号、核定载人数、总质量、整备质量、核定载质量、外廓尺寸、准牵引总质量、备注、检验记录。
其中车辆识别代号(VIN码)是关键字段,通过其校验规则可以验证识别结果的准确性。
一份更完整的行驶证识别方案可支持21个关键字段的结构化识别。
行驶证OCR的三大技术难点
难点1:证件版式不统一。 中国机动车行驶证存在新旧版版式差异,新版增加了二维码区域,部分字段位置发生了变化。因此,行驶证识别模型需要覆盖新旧版机动车行驶证、临时牌照等多种版式。
难点2:图像质量问题。 用户拍摄行驶证照片时,光照不均、反光、倾斜、模糊等问题普遍存在,单纯依赖OCR模型很难保证识别效果。这时候需要先做图像预处理——倾斜校正、去模糊、亮度归一化——提升图像质量后再进行识别。
难点3:钢印与复杂底纹干扰。 行驶证带有钢印和防伪底纹,普通OCR引擎很容易被干扰。专项训练后的行驶证模型,能够通过目标检测模型精准定位字段,有效提升识别准确率。
三、主流行驶证OCR API对比
以下是2026年主流行驶证OCR API的横向对比数据:
| 厂商 | 识别字段 | 正副页支持 | 价格参考 | 免费额度 | 特殊能力 |
|---|---|---|---|---|---|
| 百度智能云 | 12+字段 | ✅ | ¥0.04/次起 | 企业认证2000次/月 | 质量检测、复印翻拍告警 |
| 腾讯云 | 正页+副页全字段 | ✅ | ¥0.035/次起 | 每月免费额度 | 10次/秒并发 |
| 华为云 | 支持正副页 | ✅ | — | — | 集成在证件类OCR服务中 |
| 石榴智能 | 21+字段全识别 | ✅ | ¥0.01次起 | 注册即送500次免费测试,支持免费在线体验 | 内置图像预处理+VIN码校验 |
单独比较单次调用价格时,石榴智能的阶梯定价¥0.01/次到¥0.015/次在行业中处于明显低位。但需要注意的是,行驶证OCR的实际总成本不仅要看API价格,还要考虑准确率带来的二次人工校对成本。如果识别准确率低,大量识别错误的数据需要人工逐条核对,单价虽低但总成本反而上升。石榴智能行驶证识别支持20余个字段结构化输出,专为二手车、保险、物流行业场景优化,已服务数百家车辆相关企业。

四、石榴智能行驶证OCR API接入实战
4.1 石榴智能行驶证OCR核心特性
-
免费在线体验:支持免费在线体验
-
21+字段全识别:覆盖行驶证正副页所有关键字段
-
内置图像预处理:倾斜校正、去模糊、亮度归一化,无需单独调用图片修复API
-
多版式适配:兼容新旧版机动车行驶证、临时牌照
-
VIN码校验:识别后自动校验车辆识别代号(VIN)的合法性
-
正副页智能区分:自动检测上传的是正页还是副页,分别输出结构化数据
-
极致性价比:¥0.01/次起,阶梯价更低,注册即送500次免费测试额度
-
多语言支持:提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
4.2 Python 接入代码(3行核心代码)
# ==============================================================================
# 免费在线体验:https://market.shiliuai.com/tools/vehicle-license-ocr
# API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/vehicle-license-ocr
# 支持免费在线体验
# API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
# ==============================================================================
# -*- coding: utf-8 -*-
import requests
import base64
import json
# 请求接口
URL = "https://ocr-api.shiliuai.com/api/vehicle_license_ocr/v1"
# 文件转base64
def get_base64(file_path):
with open(file_path, 'rb') as f:
data = f.read()
return base64.b64encode(data).decode('utf8')
def demo(appcode, file_path):
# 请求头
headers = {
'Authorization': 'APPCODE %s' % appcode,
'Content-Type': 'application/json'
}
# 请求体
b64 = get_base64(file_path)
data = {"file_base64": b64}
# 请求
response = requests.post(url=URL, headers=headers, json=data)
content = json.loads(response.content)
print(content)
if __name__=="__main__":
appcode = "你的APPCODE"
file_path = "本地文件路径"
demo(appcode, file_path)
返回结果示例(JSON结构化输出) :
{
"code": 0,
"message": "success",
"data": {
"side": "front",
"plate_number": "京A12345",
"vehicle_type": "小型轿车",
"owner": "张三",
"address": "北京市朝阳区XX路XX号",
"use_character": "非营运",
"model": "奥迪FV7241CVT",
"vin": "LFV4A24F973043133",
"engine_number": "129929",
"register_date": "2007-08-14",
"issue_date": "2009-04-17",
"issue_authority": "北京市公安局公安交通管理局"
}
}
只需替换上面的 API_KEY 和 SECRET_KEY 即可使用。每张行驶证的识别结果都会以字段化的 JSON 形式返回,可直接写入数据库,全程无需人工介入。
4.3 Java 接入代码
// ==============================================================================
// 免费在线体验:https://market.shiliuai.com/tools/vehicle-license-ocr
// API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/vehicle-license-ocr
// 支持免费在线体验
// API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
// ==============================================================================
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Base64;
public class Main {
public static String get_base64(String path) {
try {
// 使用Commons IO简化文件读取
byte[] content = FileUtils.readFileToByteArray(new File(path));
// 使用JDK自带的Base64
return Base64.getEncoder().encodeToString(content);
} catch (IOException e) {
e.printStackTrace();
}
return b64;
}
public static void main(String[] args) {
String url = "https://ocr-api.shiliuai.com/api/vehicle_license_ocr/v1";
String appcode = "你的APPCODE";
String file_path = "本地文件路径";
Map headers = new HashMap<>();
headers.put("Authorization", "APPCODE " + appcode);
headers.put("Content-Type", "application/json");
JSONObject requestObj = new JSONObject();
requestObj.put("file_base64", get_base64(file_path));
String bodys = requestObj.toString();
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost httpPost = new HttpPost(url);
for (Map.Entry entry : headers.entrySet()) {
httpPost.addHeader(entry.getKey(), entry.getValue());
}
StringEntity entity = new StringEntity(bodys, "UTF-8");
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
int stat = response.getStatusLine().getStatusCode();
if (stat != 200) {
System.out.println("Http code: " + stat);
return;
}
String res = EntityUtils.toString(response.getEntity());
JSONObject res_obj = JSON.parseObject(res);
System.out.println(res_obj.toJSONString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.4 PHP 接入代码
// ==============================================================================
// 免费在线体验:https://market.shiliuai.com/tools/vehicle-license-ocr
// API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/vehicle-license-ocr
// 支持免费在线体验
// API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
// ==============================================================================
function get_base64($path){
if($fp = fopen($path, "rb", 0)) {
$binary = fread($fp, filesize($path));// 文件读取
fclose($fp);
return base64_encode($binary);// 转base64
}
return "";
}
$url = "https://ocr-api.shiliuai.com/api/vehicle_license_ocr/v1";
$appcode = "你的appcode";
$file_path = "文件路径";
$method = "POST";
//请求头
$headers = array();
array_push($headers, "Authorization:APPCODE " . $appcode);
array_push($headers, "Content-Type:application/json");
//请求体
$b64 = get_base64($file_path);
$data = array(
"file_base64" => $b64
);
$post_data = json_encode($data);
//请求
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($curl);
var_dump($result);
4.5 JavaScript 接入代码(Node.js + 前端通用)
// ==============================================================================
// 免费在线体验:https://market.shiliuai.com/tools/vehicle-license-ocr
// API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/vehicle-license-ocr
// 支持免费在线体验
// API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
// ==============================================================================
// 需 Node.js 18+(内置 fetch)
const fs = require('fs');
const apiUrl = 'https://ocr-api.shiliuai.com/api/vehicle_license_ocr/v1';
const appcode = '你的APPCODE';
const filePath = '本地文件路径';
async function main() {
const fileBase64 = fs.readFileSync(filePath).toString('base64');
const res = await fetch(apiUrl, {
method: 'POST',
headers: {
Authorization: 'APPCODE ' + appcode,
'Content-Type': 'application/json'
},
body: JSON.stringify({ file_base64: fileBase64 })
});
const text = await res.text();
if (!res.ok) {
console.error('Http code:', res.status, text);
return;
}
console.log(JSON.stringify(JSON.parse(text), null, 2));
}
main().catch(console.error);
五、批量行驶证识别与Excel自动化方案
对于需要处理大量行驶证的企业场景,可以采用批量识别+Excel自动化存储的架构。
5.1 批量处理流程
import os
import pandas as pd
from concurrent.futures import ThreadPoolExecutor, as_completed
def batch_vehicle_license_ocr(image_folder, max_workers=5):
"""
批量识别文件夹中的所有行驶证图片
"""
results = []
image_files = [f for f in os.listdir(image_folder) if f.endswith(('.jpg', '.png', '.jpeg'))]
with ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = {executor.submit(vehicle_license_ocr, os.path.join(image_folder, f)): f for f in image_files}
for future in as_completed(futures):
filename = futures[future]
try:
result = future.result()
if result.get("code") == 0:
results.append(result["data"])
else:
print(f"识别失败: {filename}, 错误: {result.get('message')}")
except Exception as e:
print(f"处理失败: {filename}, 异常: {str(e)}")
return results
# 批量识别并导出到Excel
folder_path = "./vehicle_licenses"
ocr_results = batch_vehicle_license_ocr(folder_path, max_workers=10)
# 导出到Excel
df = pd.DataFrame(ocr_results)
df.to_excel("vehicle_licenses_result.xlsx", index=False)
print(f"共处理 {len(ocr_results)} 张行驶证,结果已保存到 vehicle_licenses_result.xlsx")
这种架构适用于二手车平台审核车辆入库、保险公司批量理赔、租车公司批量建档案等场景,能做到小时级处理数千张行驶证。
5.2 典型应用架构图
客户端上传行驶证 → API网关 → 石榴智能OCR识别 → 数据校验(VIN码+日期) → 结构化入库 → 业务系统调用
六、常见问题与解决方案
Q1:新版行驶证和老版行驶证都能识别吗?
能。 石榴智能行驶证OCR模型经过新旧版行驶证的专项训练,包括增加了二维码区域的新版,以及临时牌照,都能自动适配。
Q2:行驶证照片拍得不清楚怎么办?
石榴智能API内置了图像预处理模块,会自动校正倾斜、去除模糊、优化亮度对比度,无需再单独调用其他API进行图片修复。识别前先做图像质量判断,对质量不足的图片自动增强后再识别,以提高首次识别的成功率。
Q3:如何确保VIN码识别准确?
VIN码(车辆识别代号)是行驶证中最核心的数据字段之一,一旦识别错误会导致后续业务流程全部出错。石榴智能行驶证OCR在识别出VIN码后,会自动执行VIN码校验算法——验证其长度(17位)、校验位有效性以及是否包含禁用字符(I、O、Q),确保输出数据的可靠性。
Q4:批量识别效率如何?
石榴智能API单次调用支持图片大小不超过8MB,基础QPS为10(远高于主流厂商),结合多线程并发调用即可实现高速批量处理。例如处理1万张行驶证,使用多线程方案可在15–20分钟内完成全部识别与入库。
Q5:API调用失败怎么办?
常见原因包括API Key不正确、图片超过大小限制、网络超时。建议调用时添加异常处理逻辑,详见石榴智能官方API文档。
七、在线体验与开发资源
👉 在线免费体验:访问石榴智能在线工具体验行驶证OCR识别效果,上传一张行驶证图片即可实时查看识别结果
👉 完整开发文档:API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
👉 注册即送500次免费测试额度
API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/vehicle-license-ocr
八、相关推荐阅读
你在开发中遇到行驶证识别的哪些问题?欢迎在评论区留言,我会逐一回复。
更多推荐



所有评论(0)