車牌識別
獲得阿里雲代碼
-
使用阿里雲中艾科瑞特車牌識別,得到代碼:
-
//API產品路徑 String requestUrl = "https://iplatecard.market.alicloudapi.com/ai_market/ai_ocr_universal/license_plate/v2"; //阿里雲APPCODE String appcode = "阿里雲APPCODE"; Map<String, String> headers = new HashMap<String, String>(); headers.put("Authorization", "APPCODE " + appcode); //根據API的要求,定義相對應的Content-Type headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); Map<String, String> bodys = new HashMap<String, String>(); //內容數據類型,如:0,則表示BASE64編碼;1,則表示圖像文件URL鏈接 if (false) { //啟用BASE64編碼方式進行識別 //內容數據類型是BASE64編碼 String imgFile = "本地圖片路徑"; String imgBase64 = ""; try { File file = new File(imgFile); byte[] content = new byte[(int) file.length()]; FileInputStream finputstream = new FileInputStream(file); finputstream.read(content); finputstream.close(); imgBase64 = new String(encodeBase64(content)); } catch (IOException e) { e.printStackTrace(); return; } bodys.put("IMAGE", imgBase64); bodys.put("IMAGE_TYPE", "0"); } else { //啟用URL方式進行識別 //內容數據類型是圖像文件URL鏈接 bodys.put("IMAGE", "https://icredit-brand.oss-cn-hangzhou-internal.aliyuncs.com/%E8%BD%A6%E7%89%8C_%E9%97%BDC_D8888.jpg"); bodys.put("IMAGE_TYPE", "1"); } try { String response = post(requestUrl, headers, bodys); System.out.println("response = " + response); } catch (Exception e) { e.printStackTrace(); } }
public static String post(String url, Map<String, String> headers, Map<String, String> body) throws IOException { HttpClient client = new HttpClient(); PostMethod postMethod = new PostMethod(url); // 必須設置下面這個Header for (String key : headers.keySet()) { postMethod.addRequestHeader(key, headers.get(key)); } List<NameValuePair> bodyPair = new ArrayList<>(); for (String key : body.keySet()) { bodyPair.add(new NameValuePair(key, body.get(key))); } NameValuePair[] bodyKvs = new NameValuePair[body.size()]; postMethod.setRequestBody(bodyPair.toArray(bodyKvs)); int code = client.executeMethod(postMethod); if (code == 200) { String res = postMethod.getResponseBodyAsString(); System.out.println(res); return res; } else { System.out.println(code); } throw new IOException("請求失敗"); }
-
代碼修改:
-
String appcode=“我自己的購買的appcode”;
-
傳輸的圖片使用BASE64編碼,所以使用if中的傳輸方法,將if(false)改為if(true)
-
imgFile中的圖片路徑就寫車牌圖片在本地的路徑,例如:String imgFile="D;\\upload\\"+carFile.getOriginalFilename();
-
if中的try catch代碼塊里的return注釋掉。
-
最外層try catch里的response就是經過阿里雲圖片識別后響應的json返回,接下來從中解析出車牌號字符串
使用車牌識別代碼需導入依賴:
-
<dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>
解析json
導入json依賴:
-
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency>
解析代碼:
-
String NUMBER=""; JSONObject json = JSONObject.fromObject(response); JSONArray content = json.getJSONArray("CAR_NUMBER_RECOGNITION_ENTITY"); CAR_NUMBER_RECOGNITION_ENTITY內容 if (content.size() > 0) { for (int i = 0; i < content.size(); i++) { JSONObject job = content.getJSONObject(i); NUMBER= (String) job.get("NUMBER"); } }
-
解析根結點為“[]”的json,使用 JSONArray:
-
例如:
[ { "id": 1580615, "name": "皮的嘛", "packageName": "com.renren.mobile.android", "iconUrl": "app/com.renren.mobile.android/icon.jpg", "stars": 2, "size": 21803987, "downloadUrl": "app/com.renren.mobile.android/com.renren.mobile.android.apk", "des": "2011-2017 你的鐵頭娃一直在這兒。中國最大的實名制SNS網絡平台,嫩頭青" }, { "id": 1540629, "name": "不存在的", "packageName": "com.ct.client", "iconUrl": "app/com.ct.client/icon.jpg", "stars": 2, "size": 4794202, "downloadUrl": "app/com.ct.client/com.ct.client.apk", "des": "斗魚271934走過路過不要錯過,這里有最好的雞兒" } ] JSONArray jsonArray=new JSONArray(json); for(int i=0;i<jsonArray.length();i++){ JSONObject object=jsonArray.getJSONObject(i); String id=object.getString("id"); String name=object.getString("name"); String packageName=object.getString("packageName"); String iconUrl = object.getString("iconUrl"); double stars=Double.parseDouble(object.getString("stars")); String size=object.getString("size"); String downloadUrl = object.getString("downloadUrl"); String des = object.getString("des"); //其他操作 .... }
-
-
解析根結點為"{}"的json,JSONObject
-
例如:
{ "id": 1525490, "name": "有緣網", "packageName": "com.youyuan.yyhl", "iconUrl": "app/com.youyuan.yyhl/icon.jpg", "stars": 4, "size": 3876203, "downloadUrl": "app/com.youyuan.yyhl/com.youyuan.yyhl.apk", "des": "產品介紹:有緣是時下最受大眾單身男女親睞的婚戀交友軟件。有緣網專注於通過輕松、" } JSONObject object = new JSONObject(json); long id = object.getLong("id"); String name = object.getString("name"); String packageName = object.getString("packageName"); String iconUrl = object.getString("iconUrl"); float stars = Float.parseFloat(object.getString("stars")); long size = object.getLong("size"); String downloadUrl = object.getString("downloadUrl"); String des = object.getString("des");
-
-
阿里雲的json返回response:
-
response = { "CAR_NUMBER_RECOGNITION_STATUS": "一切盡在您的掌握之中", "CAR_NUMBER_AMOUNT": 1, "CAR_NUMBER_RECOGNITION_ENTITY": [ { "TYPE": "BLUE", "NUMBER": "京Y06018", "CAR_NUMBER_RECOGNITION_PROBABILITY": "0.9778165732111249", "CAR_NUMBER_POSITION": "20, 128, 418, 247", "CAR_NUMBER_BELONG_TO": "京Y", "CAR_NUMBER_BELONG_TO_PROVINCE": "北京市", "CAR_NUMBER_BELONG_TO_CITY": "" } ] }
-
{}中嵌套了[],最外層{}的內容為 JSONObject類型:JSONObject json = JSONObject.fromObject(response);
-
其次再拿到【】里的內容:使用JSONArray類型接收:JSONArray content = json.getJSONArray("CAR_NUMBER_RECOGNITION_ENTITY");
-
拿到 JSONArray中的內容后,遍歷每一個“鍵值對”,拿到這個對:JSONObject job = content.getJSONObject(i);
-
拿到對后,通過get鍵,得到值:NUMBER= (String) job.get("NUMBER");
-