您的位置 首页 java

java web 人脸识别技术

使用第三方 face++ 网址 实现。采用springmvc+spring+ maven +tomcat实现,上传图片,识别图片(图片必须是全脸)识别图片中人物的性别,年龄,情绪,人种,颜值等信息。

1、首先需要在 中注册用户信息。

2、在应用管理里面中创建应用获取apikey及apisecret

3、创建maven工程

4、项目访问路径(tomcat端口为80端口)

5、效果图

6、识别图片的核心代码

package com.face.service;

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 = "" ;

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 + "rn" );

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

+ ""rn" );

obos.writeBytes( "rn" );

obos.writeBytes(value + "rn" );

}

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 + "rn" );

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

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

obos.writeBytes( "rn" );

obos.write(fileEntry.getValue());

obos.writeBytes( "rn" );

}

}

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

obos.writeBytes( "rn" );

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 ;

}

}

文章来源:智云一二三科技

文章标题:java web 人脸识别技术

文章地址:https://www.zhihuclub.com/191617.shtml

关于作者: 智云科技

热门文章

网站地图