diff --git a/modules/bmw/lib/arcsoft-sdk-face-3.0.0.0-linux.jar b/modules/bmw/lib/arcsoft-sdk-face-3.0.0.0-linux.jar index a5dcac9..3091a2e 100644 Binary files a/modules/bmw/lib/arcsoft-sdk-face-3.0.0.0-linux.jar and b/modules/bmw/lib/arcsoft-sdk-face-3.0.0.0-linux.jar differ diff --git a/modules/bmw/src/main/java/com/bonus/bmw/person/utils/ArcFaceHelper.java b/modules/bmw/src/main/java/com/bonus/bmw/person/utils/ArcFaceHelper.java index 6bcc9f2..5468959 100644 --- a/modules/bmw/src/main/java/com/bonus/bmw/person/utils/ArcFaceHelper.java +++ b/modules/bmw/src/main/java/com/bonus/bmw/person/utils/ArcFaceHelper.java @@ -1,7 +1,7 @@ package com.bonus.bmw.person.utils; import com.arcsoft.face.*; -import com.arcsoft.face.enums.ImageFormat; +import com.arcsoft.face.enums.*; import org.apache.commons.lang3.StringUtils; import javax.imageio.ImageIO; import java.awt.color.ColorSpace; @@ -30,13 +30,13 @@ public class ArcFaceHelper { * linux_64 */ private static final String LINUX64_SDK_KEY = "GggpcEphVxXLXcpEZz6tdC19evqXbbhMyYt71DGLwnCp"; - - private static FaceEngine faceEngine = null; - - public static final float STANDARD_SCORE = 0.85F; - static { - try{ + private static FaceEngine faceEngine = null; + + public static final float STANDARD_SCORE = 0.85F; + + static { + try{ String os = System.getProperty("os.name"); if(StringUtils.startsWith(os.toLowerCase(), "win")){ faceEngine = new FaceEngine("D:\\arcsoft_lib_64"); @@ -50,28 +50,28 @@ public class ArcFaceHelper { }catch (Throwable e){ System.out.println("加载人脸识别引擎异常:" + e.getMessage()); } - } - - public static FaceEngine getFaceEngine() { - return faceEngine; - } - - public FaceResult getFaceFeatures(String imgSrc) { + } + + public static FaceEngine getFaceEngine() { + return faceEngine; + } + + public FaceResult getFaceFeatures(String imgSrc) { if(imgSrc.contains("http")){ return getFaceFeatures(getNetUrlHttp(imgSrc)); }else{ return getFaceFeatures(new File(imgSrc)); } - } + } - public static FaceResult getFaceFeatures(File file) { - ImageInfo imageInfo = getRGBData(file); - if (imageInfo == null){ + public static FaceResult getFaceFeatures(File file) { + ImageInfo imageInfo = getRGBData(file); + if (imageInfo == null){ return null; } - EngineConfiguration engineConfiguration = EngineConfiguration.builder().functionConfiguration( + EngineConfiguration engineConfiguration = EngineConfiguration.builder().functionConfiguration( FunctionConfiguration.builder() - .supportFaceDetect(true) + .supportFaceDetect(true) .supportAge(true) .supportFace3dAngle(true) .supportFaceDetect(true) @@ -82,24 +82,24 @@ public class ArcFaceHelper { faceEngine.init(engineConfiguration); //人脸检测 List lstFaceInfo = new ArrayList(); - faceEngine.detectFaces(imageInfo.getRgbData(), imageInfo.getWidth(), imageInfo.getHeight(), - ImageFormat.CP_PAF_BGR24, lstFaceInfo); + faceEngine.detectFaces(imageInfo.getRgbData(), imageInfo.getWidth(), imageInfo.getHeight(), + ImageFormat.CP_PAF_BGR24, lstFaceInfo); System.out.println("检测到人脸数:" + lstFaceInfo.size()); if (lstFaceInfo.size() == 0) { return null; // throw new NullPointerException("未检测到人脸"); - } + } FaceResult result = new FaceResult(); //提取人脸特征 FaceFeature faceFeature = new FaceFeature(); - int code = faceEngine.extractFaceFeature(imageInfo.getRgbData(), imageInfo.getWidth(), imageInfo.getHeight(), - ImageFormat.CP_PAF_BGR24, lstFaceInfo.get(0), faceFeature); + int code = faceEngine.extractFaceFeature(imageInfo.getRgbData(), imageInfo.getWidth(), imageInfo.getHeight(), + ImageFormat.CP_PAF_BGR24, lstFaceInfo.get(0), faceFeature); System.out.println("提取特征结果码:" + code); result.setFeatures(faceFeature.getFeatureData()); //人脸信息检测 - int processCode = faceEngine.process(imageInfo.getRgbData(), imageInfo.getWidth(), imageInfo.getHeight(), - ImageFormat.CP_PAF_BGR24, lstFaceInfo, - FunctionConfiguration.builder().supportAge(true).supportFace3dAngle(true).supportGender(true).build()); + int processCode = faceEngine.process(imageInfo.getRgbData(), imageInfo.getWidth(), imageInfo.getHeight(), + ImageFormat.CP_PAF_BGR24, lstFaceInfo, + FunctionConfiguration.builder().supportAge(true).supportFace3dAngle(true).supportGender(true).build()); System.out.println("人脸信息检测码:" + processCode); if(code != 0 || processCode != 0){ return null; @@ -122,14 +122,14 @@ public class ArcFaceHelper { System.out.println("3D信息:" + face3DAngleList + ",3D信息提取码:" + face3dCode); unInintEngine(); return result; - } + } - public static void unInintEngine() { - int code = faceEngine.unInit(); - System.out.println("销毁引擎:" + code); - } - - public static ImageInfo getRGBData(File file) { + public static void unInintEngine() { + int code = faceEngine.unInit(); + System.out.println("销毁引擎:" + code); + } + + public static ImageInfo getRGBData(File file) { if (file == null){ return null; } @@ -163,18 +163,18 @@ public class ArcFaceHelper { //进行数据格式化为可用数据 BufferedImage dstImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_3BYTE_BGR); try { - if (resultImage.getType() != BufferedImage.TYPE_3BYTE_BGR) { - ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB); - ColorConvertOp colorConvertOp = new ColorConvertOp(cs, dstImage.createGraphics().getRenderingHints()); - colorConvertOp.filter(resultImage, dstImage); - } else { - dstImage = resultImage; - } - } catch (Exception e) { - // TODO: handle exception - System.err.println(e.toString()); - } - + if (resultImage.getType() != BufferedImage.TYPE_3BYTE_BGR) { + ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB); + ColorConvertOp colorConvertOp = new ColorConvertOp(cs, dstImage.createGraphics().getRenderingHints()); + colorConvertOp.filter(resultImage, dstImage); + } else { + dstImage = resultImage; + } + } catch (Exception e) { + // TODO: handle exception + System.err.println(e.toString()); + } + //获取rgb数据 imageInfo.setRgbData(((DataBufferByte) (dstImage.getRaster().getDataBuffer())).getData()); return imageInfo; @@ -241,5 +241,5 @@ public class ArcFaceHelper { } return file; } - + }