java web 人臉識別技術

wisdomdd.cnjava

使用第三方 face++ 網址 https://www.faceplusplus.com.cn/ 實現。採用springmvc+spring+maven+tomcat實現,上傳圖片,識別圖片(圖片必須是全臉)識別圖片中人物的性別,年齡,情緒,人種,顏值等信息。web

一、首先須要在https://www.faceplusplus.com.cn/ 中註冊用戶信息。spring

二、在應用管理裏面中建立應用獲取apikey及apisecretapi

java web 人臉識別技術

三、建立maven工程tomcat

java web 人臉識別技術

四、項目訪問路徑(tomcat端口爲80端口)mvc

http://localhost/faceapp

五、效果圖dom

java web 人臉識別技術

六、識別圖片的核心代碼maven

package com.face.service;post

import java.io.ByteArrayOutputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Random;

import javax.net.ssl.SSLException;

public class FaceCore {

public String face(String path) throws Exception{

File file = new File(path);

byte[] buff = getBytesFromFile(file);

String url = "https://api-cn.faceplusplus.com/facepp/v3/detect";

HashMap<String, String> map = new HashMap<String, String>();

HashMap<String, byte[]> byteMap = new HashMap<String, byte[]>();

map.put("api_key", "mvUgQwEA8T1qgZivU5lFjOE8QpzLbRp6");

map.put("api_secret", "RGXAQdhAm9a-ttQd-Pz1o9jLiGvLFwlp");

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", buff);

String str = "";

try{

byte[] bacd = post(url, map, byteMap);

str = new String(bacd);

// System.out.println(str);

}catch (Exception e) {

e.printStackTrace();

}

return str;

}

private final static int CONNECT_TIME_OUT = 30000;

private final static int READ_OUT_TIME = 50000;

private static String boundaryString = getBoundary();

protected static byte[] post(String url, HashMap<String, String> map, HashMap<String, byte[]> fileMap) throws Exception {

HttpURLConnection conne;

URL url1 = new URL(url);

conne = (HttpURLConnection) url1.openConnection();

conne.setDoOutput(true);

conne.setUseCaches(false);

conne.setRequestMethod("POST");

conne.setConnectTimeout(CONNECT_TIME_OUT);

conne.setReadTimeout(READ_OUT_TIME);

conne.setRequestProperty("accept", "*/*");

conne.setRequestProperty("Content-Type", "multipart/form-data; boundary="+ boundaryString);

conne.setRequestProperty("connection", "Keep-Alive");

conne.setRequestProperty("user-agent", "Mozilla/4.0 (compatible;MSIE 6.0;Windows NT 5.1;SV1)");

DataOutputStream obos = new DataOutputStream(conne.getOutputStream());

Iterator iter = map.entrySet().iterator();

while(iter.hasNext()){

Map.Entry<String, String> entry = (Map.Entry) iter.next();

String key = entry.getKey();

String value = entry.getValue();

obos.writeBytes("--" + boundaryString + " ");

obos.writeBytes("Content-Disposition: form-data; name="" + key

+ "" ");

obos.writeBytes(" ");

obos.writeBytes(value + " ");

}

if(fileMap != null && fileMap.size() > 0){

Iterator fileIter = fileMap.entrySet().iterator();

while(fileIter.hasNext()){

Map.Entry<String, byte[]> fileEntry = (Map.Entry<String, byte[]>) fileIter.next();

obos.writeBytes("--" + boundaryString + " ");

obos.writeBytes("Content-Disposition: form-data; name="" + fileEntry.getKey()

+ ""; filename="" + encode(" ") + "" ");

obos.writeBytes(" ");

obos.write(fileEntry.getValue());

obos.writeBytes(" ");

}

}

obos.writeBytes("--" + boundaryString + "--" + " ");

obos.writeBytes(" ");

obos.flush();

obos.close();

InputStream ins = null;

int code = conne.getResponseCode();

try{

if(code == 200){

ins = conne.getInputStream();

}else{

ins = conne.getErrorStream();

}

}catch (SSLException e){

e.printStackTrace();

return new byte[0];

}

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buff = new byte[4096];

int len;

while((len = ins.read(buff)) != -1){

baos.write(buff, 0, len);

}

byte[] bytes = baos.toByteArray();

ins.close();

return bytes;

}

private static String getBoundary() {

StringBuilder sb = new StringBuilder();

Random random = new Random();

for(int i = 0; i < 32; ++i) {

sb.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-".charAt(random.nextInt("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_".length())));

}

return sb.toString();

}

private static String encode(String value) throws Exception{

return URLEncoder.encode(value, "UTF-8");

}

public static byte[] getBytesFromFile(File f) {

if (f == null) {

return null;

}

try {

FileInputStream stream = new FileInputStream(f);

ByteArrayOutputStream out = new ByteArrayOutputStream(1000);

byte[] b = new byte[1000];

int n;

while ((n = stream.read(b)) != -1)

out.write(b, 0, n);

stream.close();

out.close();

return out.toByteArray();

} catch (IOException e) {

}

return null;

}

}

相關文章
相關標籤/搜索