1. 程式人生 > >Face++身份證圖片識別

Face++身份證圖片識別

在不少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;
	}