修复人脸识别算法facenet-pytorch实现方式

This commit is contained in:
dengwenjie
2025-04-01 16:57:01 +08:00
parent b2fc391abc
commit 4eb02c6d87
42 changed files with 238 additions and 129 deletions

View File

@@ -1,11 +1,15 @@
package com.seetaface;
import jdk.dynalink.linker.support.Lookup;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.io.*;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
@@ -19,9 +23,10 @@ public class NativeLoader {
private static Path tempNativeDir;
private static final String[] WIN_LIBS = {"tennis","tennis_haswell","tennis_pentium","tennis_sandy_bridge","SeetaAuthorize","SeetaFaceAntiSpoofingX600","SeetaFaceDetector600","SeetaFaceLandmarker600","SeetaFaceRecognizer610","SeetaFace6JNI"};
private static final String[] LINUX_CENTOS_LIBS = {"libmain.so"};
private static final String[] LINUX_UBUNTU_LIBS = {"libdependency1.so", "libdependency2.so", "libmain.so"};
private static final String[] WIN_LIBS = {"tennis.dll","tennis_haswell.dll","tennis_pentium.dll","tennis_sandy_bridge.dll","SeetaAuthorize.dll","SeetaFaceAntiSpoofingX600.dll","SeetaFaceDetector600.dll","SeetaFaceLandmarker600.dll","SeetaFaceRecognizer610.dll","SeetaFace6JNI.dll"};
//private static final String[] WIN_LIBS = {"tennis","tennis_haswell","tennis_pentium","tennis_sandy_bridge","SeetaAuthorize","SeetaFaceAntiSpoofingX600","SeetaFaceDetector600","SeetaFaceLandmarker600","SeetaFaceRecognizer610","SeetaFace6JNI"};
private static final String[] LINUX_CENTOS_LIBS = {"libSeetaAuthorize.so","libtennis.so","libtennis_haswell.so","libtennis_pentium.so","libtennis_sandy_bridge.so","libSeetaFaceDetector600.so","libSeetaAgePredictor600.so","libSeetaEyeStateDetector200.so","libSeetaFaceAntiSpoofingX600.so","libSeetaFaceLandmarker600.so","libSeetaFaceRecognizer610.so","libSeetaGenderPredictor600.so","libSeetaMaskDetector200.so","libSeetaPoseEstimation600.so","libSeetaFaceTracking600.so","libSeetaQualityAssessor300.so"};
private static final String[] LINUX_UBUNTU_LIBS = {"libSeetaAuthorize.so","libtennis.so","libtennis_haswell.so","libtennis_pentium.so","libtennis_sandy_bridge.so","libSeetaFaceDetector600.so","libSeetaAgePredictor600.so","libSeetaEyeStateDetector200.so","libSeetaFaceAntiSpoofingX600.so","libSeetaFaceLandmarker600.so","libSeetaFaceRecognizer610.so","libSeetaGenderPredictor600.so","libSeetaMaskDetector200.so","libSeetaPoseEstimation600.so","libSeetaFaceTracking600.so","libSeetaQualityAssessor300.so"};
private static final String TEMP_DIR = "smartjavaai-native-libs";
@@ -51,18 +56,12 @@ public class NativeLoader {
} else {
System.setProperty("java.library.path", sysLib + separator + tempNativeDir);
}
try {
//使java.library.path生效
Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
// 按顺序加载库(确保依赖关系)
for (String libName : libNames) {
System.loadLibrary(libName);
log.info("Loading library: " + tempNativeDir + File.separator + libName);
System.load(tempNativeDir + File.separator + libName);
}
} catch (Exception e) {
throw new RuntimeException("Native library loading failed", e);
@@ -84,7 +83,7 @@ public class NativeLoader {
* @throws IOException
*/
private static void extractLibrary(String libName,String libDir) throws IOException {
String resourcePath = "/native" + libDir + "/" + libName + ".dll";
String resourcePath = "/native" + libDir + "/" + libName;
try (InputStream in = NativeLoader.class.getResourceAsStream(resourcePath)) {
if (in == null) throw new FileNotFoundException(resourcePath);
@@ -107,7 +106,7 @@ public class NativeLoader {
String osName = System.getProperty("os.name").toLowerCase();
if (osName.contains("win")) {
return "/windows";
} else if (osName.contains("linux")) {
} /*else if (osName.contains("linux")) {
String linuxOsName = getLinuxOsName();
if(StringUtils.isBlank(linuxOsName)){
throw new UnsupportedOperationException("Unsupported platform");
@@ -117,7 +116,7 @@ public class NativeLoader {
}else if(linuxOsName.contains("centos")){
return "/linux/centos";
}
}
}*/
throw new UnsupportedOperationException("Unsupported platform");
}