百度AI攻略:行驶证识别

本文详细介绍了一种针对机动车行驶证的OCR识别技术,能够快速准确地从行驶证主页及副页中识别出21个关键字段,如号牌号码、车辆类型、所有人等,显著提升了信息录入效率和用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.功能描述:

对机动车行驶证主页及副页所有21个字段进行结构化识别,包括号牌号码、车辆类型、所有人、品牌型号、车辆识别代码、发动机号码、核定载人数、质量、检验记录等。可应用于网约车或货车司机身份审查等场景,有效提升信息录入效率,降低用户输入成本,提升用户使用体验。

2.平台接入

具体接入方式比较简单,可以参考我的另一个帖子,这里就不重复了:
http://ai.baidu.com/forum/topic/show/943327

3.调用攻略(Python3)及评测

3.1首先认证授权:

在开始调用任何API之前需要先进行认证授权,具体的说明请参考:

http://ai.baidu.com/docs#/Auth/top

具体Python3代码如下:

# -*- coding: utf-8 -*-
#!/usr/bin/env python

import urllib
import base64
import json
#client_id 为官网获取的AK, client_secret 为官网获取的SK
client_id =【百度云应用的AK】
client_secret =【百度云应用的SK】

#获取token
def get_token():
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
token_content = response.read()
if token_content:
token_info = json.loads(token_content)
token_key = token_info['access_token']
return token_key


3.2行驶证识别分析接口调用:

详细说明请参考: https://ai.baidu.com/docs#/OCR-API/5116ac95

说明的比较清晰,这里就不重复了。

大家需要注意的是:
API访问URL:https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate
图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式

Python3调用代码如下:

#行驶证
#filename:图片名(本地存储包括路径),
def vehicle_license(filename):
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/vehicle_license"
    
    # 二进制方式打开图片文件
    f = open(filename, 'rb')
    img = base64.b64encode(f.read())
    
    params = dict()
    params['image'] = img
    params = urllib.parse.urlencode(params).encode("utf-8")
    
    access_token = get_token()
    
    begin = time.perf_counter()
    request_url = request_url + "?access_token=" + access_token
    request = urllib.request.Request(url=request_url, data=params)
    request.add_header('Content-Type', 'application/x-www-form-urlencoded')
    response = urllib.request.urlopen(request)
    content = response.read()
    end = time.perf_counter()

    print('处理时长:'+'%.2f'%(end-begin)+'秒')
    
    if content:
        #print(content)
        content=content.decode('utf-8')
        #print(content)
        data = json.loads(content)
        #print(data)
        words_result=data['words_result']
        print ("识别结果")
        for item in words_result:
            print (item,':',words_result[item]['words'])  
                
vehicle_license('../img/license2.jpg')

4.功能评测:
选用不同的数据对效果进行测试,具体效果如下(以下例子均来自网上):

处理时长:1.77秒
识别结果
品牌型号 : 某某牌XXXXX
发证日期 : 20100000
使用性质 : 非营运
发动机号码 : 9999999
号牌号码 : A88888
所有人 : 代用名
住址 : 某某市某某区某某路某某号
注册日期 : 20100000
车辆识别代号 : XXXXX1234567890000
车辆类型 : 小型轿车

处理时长:2.26秒
识别结果
品牌型号 : 解放牌CA4257P2K2T1EA84
发证日期 : 20130722
使用性质 : 货运
发动机号码 : 51676680
号牌号码 : 蒙E76258
所有人 : 呼伦贝尔市晓明运输有限公司
住址 : 内蒙古自治区呼伦贝尔市鄂温克族自治旗巴彦托海镇八居安居小区5号楼2单元4层2号
注册日期 : 20101207
车辆识别代号 : LFWSRXNH6AAD38754
车辆类型 : 重型半挂牵引车

 

 

5.测试结论和建议

测试下来,整体识别效果不错。对于行驶证有较强的识别能力,效果很好,速度也很快。对于提高工作效率会有很大的帮助。

### 使用Java集成百度OCR API实现行驶证识别及服务开通教程 #### 百度OCR服务简介 百度AI平台提供了丰富的OCR(光学字符识别)API接口,能够帮助开发者轻松完成各种件、票据的图像文字识别工作。对于行驶证识别功能而言,可以利用其提供的通用表格文字识别或特定类型的驾驶/行驶证识别能力来简化开发过程。 #### 开通百度OCR服务并创建应用 为了使用百度OCR API,在开始之前需先登录到[百度AI开放平台](https://ai.baidu.com/)注册账号,并按照指引创建一个新的应用程序以获得`API Key` 和 `Secret Key` 。这两个密钥将在后续调用API时作为身份验使用[^1]。 #### Java环境准备与依赖引入 确保本地已安装JDK环境,并配置好Maven项目结构。接着在项目的pom.xml文件中加入如下依赖项以便于发起HTTP请求和处理JSON响应: ```xml <dependencies> <!-- Apache HttpClient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> <!-- JSON解析库 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> </dependency> </dependencies> ``` #### 获取AccessToken 由于每次访问都需要携带有效的access_token参数,因此首先要通过API key 和 secret_key换取此令牌。这里给出一段简单的代码片段用于获取token: ```java public class BaiduOcrUtil { private static final String TOKEN_URL = "https://aip.baidubce.com/oauth/2.0/token"; private static final String GRANT_TYPE = "client_credentials"; private static final String CLIENT_ID = "your_api_key"; // 替换成自己的API KEY private static final String CLIENT_SECRET = "your_secret_key";// 替换成自己的SECRET KEY public static String getAuth() throws Exception{ try (CloseableHttpClient client = HttpClients.createDefault()) { List<NameValuePair> params = Arrays.asList( new BasicNameValuePair("grant_type",GRANT_TYPE), new BasicNameValuePair("client_id",CLIENT_ID), new BasicNameValuePair("client_secret",CLIENT_SECRET)); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, Consts.UTF_8); HttpPost post = new HttpPost(TOKEN_URL); post.setEntity(entity); CloseableHttpResponse response = client.execute(post); JSONObject jsonObject = null; if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){ String result = EntityUtils.toString(response.getEntity()); jsonObject = JSONObject.parseObject(result); } return jsonObject.getString("access_token"); } catch (Exception e) { throw new RuntimeException(e.getMessage(),e.getCause()); } } } ``` #### 行驶证图片转Base64编码 考虑到上传至服务器端的数据大小限制等因素,通常会将待识别行驶证照片转换成base64格式字符串后再提交给API进行分析。以下是将指定路径下的图片转化为base64串的小工具函数: ```java import java.io.File; import java.nio.file.Files; public class ImageToBase64 { /** * 将图片文件转换为Base64编码字符串. */ public static String encodeImageByPath(String imagePath) throws IOException { File file = new File(imagePath); byte[] bytes = Files.readAllBytes(file.toPath()); BASE64Encoder encoder = new sun.misc.BASE64Encoder(); return encoder.encode(bytes).replaceAll("\n","").replaceAll("\r",""); } } ``` #### 调用行驶证识别API 最后一步就是编写实际调用车牌识别的服务逻辑了。在这里假设已经成功拿到了上文中提到过的access_token,则可以直接构建POST请求发送给对应的API endpoint来进行行驶证信息提取操作: ```java private static final String DRIVING_LICENSE_RECOGNIZE_API = "https://aip.baidubce.com/rest/2.0/ocr/v1/driving_license"; // ...其他必要的导入语句... /** * 发送行驶证识别请求. */ public void recognizeDrivingLicense(String accessToken,String imageBase64String)throws Exception{ Map<String,Object> param = Maps.newHashMapWithExpectedSize(2); param.put("image",imageBase64String); // 图片base64编码后的字符串 param.put("config","{...}"); // 可选配置项,默认为空即可满足大部分场景需求 OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(5L, TimeUnit.SECONDS) .readTimeout(5L,TimeUnit.SECONDS) .writeTimeout(5L,TimeUnit.SECONDS) .build(); RequestBody requestBody = FormBody.create(MediaType.get("application/x-www-form-urlencoded"), JsonMapper.nonEmptyMapper().toJson(param)); Request request = new Request.Builder() .url(DRIVING_LICENSE_RECOGNIZE_API+"?access_token="+accessToken) .post(requestBody) .addHeader("Content-Type","application/json;charset=UTF-8") .build(); Response response = okHttpClient.newCall(request).execute(); System.out.println(response.body().string()); // 输出返回的结果json对象 } ``` 以上即完成了整个基于Java语言调用百度OCR API实现行驶证自动识别的过程描述。需要注意的是上述示例中的部分细节可能因版本更新而有所变化,请务必参照最新的官方文档说明做适当调整[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值