Face++身份證圖片識別
阿新 • • 發佈:2018-12-18
在不少web系統都需要對身份證圖片裡面資訊進行識別,然後再呼叫官方的系統介面,判斷該身份證號是否正確。下面我們就介紹如何使用face++進行身份證圖片的識別。
首先我們需要將圖片上傳到指定的目錄,之後再讀取圖片,呼叫face++介面進行身份證資訊的識別。
下面的上傳正反面身份證圖片的java程式碼
public final String idcardpath="E:\\ruanjian\\idcard\\";///usr/lib/tomcat/head/idcard/ //上傳身份證到idcard目錄 @RequestMapping(value = "/uploadIdcard",method = RequestMethod.POST) public String updateInfo(@RequestParam("qian") MultipartFile qian,@RequestParam("hou") MultipartFile hou ,HttpServletRequest request) throws IllegalStateException, IOException { String imgNmae1 = qian.getOriginalFilename(); String imgType1 = imgNmae1.substring(imgNmae1.lastIndexOf(".")+1); String imgNmae2 = hou.getOriginalFilename(); String imgType2 = imgNmae2.substring(imgNmae2.lastIndexOf(".")+1); File newFile1 = new File(idcardpath+"1." +imgType1); File newFile2 = new File(idcardpath+"2."+imgType2); qian.transferTo(newFile1); hou.transferTo(newFile2); return "forward:cardstest"; }
下面是對應的jsp程式碼:
<form action="${pageContext.request.contextPath}/uploadIdcard" method="post" action="${pageContext.request.contextPath}/uploadIdcard" enctype="multipart/form-data"> <div class="clearfix idcard"> <div class="fl"> <p class="title g-title">身份證正面照</p> <div class="file"> <input type="hidden" name="identityCertificateFrontImage" data-imgurl="" showcropbox="" title="身份證正面照" width="381" height="225" require=""> <img src="${pageContext.request.contextPath}/css/idcard/idcard-1.jpg" id="img0"> <div class="file-selecter"> <div class="selecter"> <img src="${pageContext.request.contextPath}/css/idcard/file_selecter.png" > <p>點選上傳 <input class="file_input" type="file" id="qian" name="qian"></p> </div> </div> <!--<input type="file" accept="image/*" data-pass = "no" data-file="yes"/>--> </div> <div class="err-box"> <div class="msg-box"></div> </div> </div> <div class="fl"> <p class="title g-title">身份證反面照</p> <div class="file"> <input type="hidden" name="identityCertificateBackImage" data-imgurl="" showcropbox="" title="身份證反面照" width="381" height="225" require=""> <img src="${pageContext.request.contextPath}/css/idcard/idcard-2.jpg" id="img1"> <div class="file-selecter"> <div class="selecter"> <img src="${pageContext.request.contextPath}/css/idcard/file_selecter.png"> <p>點選上傳 <input class="file_input" type="file" id="hou" name="hou"></p> </div> </div> </div> <div class="err-box"> <div class="msg-box"></div> </div> </div> </div> <p class="line mt30"></p> <button class="btn-green sub" type="submit" style="width:100px;height:50px;">提交稽核</button> </form>
讀取idcard目錄下的身份證照片,並且驗證。decodeUnicode()對json的編碼由unicode改為utf-8
@RequestMapping(value = "/cardstest",produces = {"text/html;charset=UTF-8;"},method=RequestMethod.POST) public String cardstest(HttpServletRequest request) { //String path="E:\\Tomcat ruanjian\\idcard\\";// /usr/lib/tomcat/head/idcard/ E:\\Tomcat ruanjian\\idcard\\ String ret=""; ret=fun(idcardpath+"1.jpg"); String ret2=fun(idcardpath+"2.jpg"); Cards c=getCards(ret); System.out.println(c.toString()); request.setAttribute("c", c); return "addProvider"; }
fun()獲取face++返回的json字串,
public String fun(String path){
String ret="";
File file1 = new File(path);
byte[] buff1 = getBytesFromFile(file1);
String url = "https://api-cn.faceplusplus.com/cardpp/v1/ocridcard";
HashMap<String, String> map = new HashMap<>();
HashMap<String, byte[]> byteMap = new HashMap<>();
map.put("api_key", "-rmz0oCucWPcvlBv49RErHipvsGlf5DC");
map.put("api_secret", "kBvsaSkZnp4aYkJeiT4JkIck0PjLOtnJ");
map.put("return_landmark", "1");
map.put("return_attributes", "gender,age,smiling,headpose,facequality,blur,eyestatus,emotion,ethnicity,beauty,mouthstatus,eyegaze,skinstatus");
byteMap.put("image_file", buff1);
try{
byte[] bacd = post(url, map, byteMap);
String str = new String(bacd);
ret = decodeUnicode(str);
System.out.println(ret);
}catch (Exception e) {
e.printStackTrace();
}
return ret;
}