行驶证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

八、相关推荐阅读


你在开发中遇到行驶证识别的哪些问题?欢迎在评论区留言,我会逐一回复。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐