百度AI-车牌号识别接口描述

支持识别中国大陆机动车蓝牌、黄牌(单双行)、绿牌、大型新能源(黄绿)、领使馆车牌、警牌、武警牌(单双行)、军牌(单双行)、港澳出入境车牌、农用车牌、民航车牌、非机动车车牌(北京地区)的地域编号和车牌号,并能同时识别图像中的多张车牌。

官网地址:https://ai.baidu.com/ai-doc/OCR/ck3h7y191

代码示例

Token验证代码如下

package com.picture.util;

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import java.util.List;
import java.util.Map;

/**
 * @Description :Token验证
 * @author :ybwx
 * @date : 2024年4月04日
 */
public class AuthService {

	// 获取token地址
	private static String authHost = "https://aip.baidubce.com/oauth/2.0/token?";

	/**
	 * 获取API访问token 该token有一定的有效期,需要自行管理,当失效时需重新获取.
	 *
	 * @param ak
	 *            - 百度云官网获取的 API Key
	 * @param sk
	 *            - 百度云官网获取的 Securet Key
	 */
	public static String getAuth(String ak, String sk) {

		String getAccessTokenUrl = authHost
				// 1. grant_type为固定参数
				+ "grant_type=client_credentials"
				// 2. 官网获取的 API Key
				+ "&client_id=" + ak
				// 3. 官网获取的 Secret Key
				+ "&client_secret=" + sk;
		try {
			URL realUrl = new URL(getAccessTokenUrl);
			// 打开和URL之间的连接
			HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
			connection.setRequestMethod("GET");
			connection.connect();
			// 获取所有响应头字段
			Map<String, List<String>> map = connection.getHeaderFields();
			// 遍历所有的响应头字段
			for (String key : map.keySet()) {
				System.err.println(key + "--->" + map.get(key));
			}
			// 定义 BufferedReader输入流来读取URL的响应
			BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
			String result = "";
			String line;
			while ((line = in.readLine()) != null) {
				result += line;
			}
			/**
			 * 返回结果示例
			 */
			System.err.println("result:" + result);
			JSONObject jsonObject = new JSONObject(result);
			String access_token = jsonObject.getString("access_token");
			return access_token;
		} catch (Exception e) {
			System.err.printf("获取token失败!");
			e.printStackTrace(System.err);
		}
		return null;
	}

}

百度车牌识别工具类示例:

package com.picture.util;

import java.net.URLEncoder;
import java.util.Base64;

/**
 * 百度车牌识别工具类
 * @Description :
 * @author :ybwx
 * @date : 2024年4月02日
 */
public class BaiduCarDiscern {

	// 车牌识别接口
	private static String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate";

	// 官网获取的 API Key
	private static String clientId = "百度AI申请的车牌识别API Key";

	// 官网获取的 Secret Key
	private static String clientSecret = "百度AI申请的车牌识别的Secret Key";

	public static String licensePlate() {
		try {
			// 本地文件路径
			String filePath = "D:\\work\\eclipse\\sungoal_bak\\airCar\\web\\upload\\ImgFile\\test.jpg";
			byte[] imgData = FileUtil.readFileByBytes(filePath);
			String imgStr = Base64.getEncoder().encodeToString(imgData);
			String imgParam = URLEncoder.encode(imgStr, "UTF-8");
			String param = "image=" + imgParam;
			// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
			String accessToken = AuthService.getAuth(clientId, clientSecret);
			String result = HttpUtil.post(url, accessToken, param);
			System.out.println(result);
			return result;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) {
		BaiduCarDiscern.licensePlate();
	}

}

识别结果示例:

{
	"words_result": {
		"number": "豫S67A88",
		"vertexes_location": [{
			"x": 191,
			"y": 529
		}, {
			"x": 514,
			"y": 545
		}, {
			"x": 509,
			"y": 635
		}, {
			"x": 186,
			"y": 618
		}],
		"color": "blue",
		"probability": [0.9999939203, 0.9999998808, 1, 1, 1, 1, 0.9999998808]
	},
	"log_id": 1779894101534333746
}