Java车辆牌照识别
大家好,近期想做一个Java的车牌识别功能(借助第三方百度云车牌识别API),大致搜索了一下相关的博客文档,没有看到有相对完整详细的文章,于是准备写一篇稍微详细一点的文章说明,废话不多说,开始码字。。。。。。
准备工作
- 百度云帐号申请注册(手机注册)
- 百度云控制台创建应用
第一步:选择车牌识别的功能应用:
产品 ===》 人工智能 ===》 汽车场景文字识别
第二步:点击过后,选择页面车辆产品列表中的车牌识别
第三步:创建应用实例
点击车牌识别后点击立即使用,进入到控制台界面,我们所需要的车牌识别功能API在汽车场景OCR中,描述每个月赠送1000次免费调用次数。注意:在列表右上方有一个免费领取资源按钮,新建的应用需要在此免费领取资源,在后续调用代码时,可能会抛出异常没有权限调用此API,明明是领取了资源的,需要重新退出后再登陆到控制台资源才会刷新,博主也是遇到了这个问题,百度了一圈,未找到解决方法,退出重登后调用API成功
第四步:创建应用
填写相应的信息,选择个人或公司,本章测试选择的个人使用。
创建成功后界面如下,后续在代码中,调用车牌识别的API需要用到API Key和Secret Key进行身份验证。
代码部分
这里贴出来百度云的接口文档说明,里面有详细的接口介绍,大家可以参考(https://cloud.baidu.com/doc/OCR/s/ck3h7y191)
- 下图是接口的描述,包括请求URL、参数,主要的参数是image(图片二进制数据)或url任选其一,还有Aceess Token如何获取。
- 下图中,我们选择的是JAVA代码示例,示例中的代码会用到其它的一些工具类,注释中都有相应的下载地址。
代码目录说明
获取TOKEN
以下是权限获取的Java示例代码,获取Access Token说明
clientId:对应百度云控制台新建实例的API Key
clientSecret:对应百度云控制台新建实例的Secret Key
调用API接口
注意如果提示没有Access调用API接口,在创建应用实例时,领券免费的接口调用次数。
private static final String ACCESS_TOKEN = AuthService.getAuth();public static void main(String[] args) {// 请求urlString url = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate";try {// 本地文件路径String filePath = "d://car1.jpg";// 转化成二进制数据byte[] imgData = FileUtil.readFileByBytes(filePath);// Base64转换String imgStr = Base64Util.encode(imgData);String imgParam = URLEncoder.encode(imgStr, "UTF-8");// 参数String param = "image=" + imgParam;// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。String result = HttpUtil.post(url, ACCESS_TOKEN, param);System.out.println(result);} catch (Exception e) {e.printStackTrace();}}
结果展示
- 测试图片
- 调用结果
会有车辆的车牌信息、颜色、坐标位置等信息。