//package jnpf.util; // //import com.seeta.sdk.*; //import com.seeta.sdk.util.SeetafaceUtil; //import jnpf.exception.HandleException; //import lombok.extern.slf4j.Slf4j; //import org.springframework.web.multipart.MultipartFile; // //import javax.imageio.ImageIO; //import java.awt.image.BufferedImage; //import java.io.InputStream; //import java.net.HttpURLConnection; //import java.net.URL; // ///** // * 人脸识别工具类 // * // * @author yanwenfu // * @create 2025-04-08 // */ //@Slf4j //public class SeetaFaceUtil { // // //人脸检测器 // private static final FaceDetector detector; // //关键点定位器 5点 // private static final FaceLandmarker faceLandmarker; // //人脸向量特征提取和对比器 // private static final FaceRecognizer faceRecognizer; // static { // try { // detector = new FaceDetector(new SeetaModelSetting(SeetaConstant.face_detector, SeetaDevice.SEETA_DEVICE_AUTO)); // faceLandmarker = new FaceLandmarker(new SeetaModelSetting(SeetaConstant.face_landmarker_pts5, SeetaDevice.SEETA_DEVICE_AUTO)); // faceRecognizer = new FaceRecognizer(new SeetaModelSetting(SeetaConstant.face_recognizer, SeetaDevice.SEETA_DEVICE_AUTO)); // } catch (Exception e) { // throw new RuntimeException(e); // } // } // // // 资源释放方法 // public static synchronized void releaseModels() { // try { // if (detector != null) { // detector.dispose(); // 实际方法名以SDK为准 // } // if (faceLandmarker != null) { // faceLandmarker.dispose(); // } // if (faceRecognizer != null) { // faceRecognizer.dispose(); // } // } catch (Exception e) { // log.error("模型资源释放异常", e); // } // } // // /** // * 获取照片特征(参数必须传递一个) // * @param file 文件 // * @param url 远程路径 // * @return float[] // */ // public static float[] analyzeEcognizer(MultipartFile file, String url) throws HandleException { // float[] features1 = null; // try { // //第1张照片 // SeetaImageData image1; // if (null != file) { // image1 = SeetafaceUtil.toSeetaImageData(imageAsBufferedImage(file)); // } else { // image1 = SeetafaceUtil.toSeetaImageData(downloadImageAsBufferedImage(url)); // } // //第一张照片人脸识别 // SeetaRect[] detects1 = detector.Detect(image1); // if (null == detects1 || detects1.length == 0) { // throw new HandleException("未识别到人脸,请重试"); // } // SeetaPointF[] pointFS1 = new SeetaPointF[faceRecognizer.GetExtractFeatureSize()]; // int[] masks1 = new int[faceRecognizer.GetExtractFeatureSize()]; // //第一张图片,第一个人脸关键点定位,有多个人脸的情况下,只取第一个人脸(这是测试,先这样写) // faceLandmarker.mark(image1, detects1[0], pointFS1, masks1); // //第一张图片,第一个人脸向量特征提取features1 // features1 = new float[faceRecognizer.GetExtractFeatureSize()]; // faceRecognizer.Extract(image1, pointFS1, features1); // } catch (Exception e) { // throw new HandleException(e.getMessage()); // } // return features1; // } // // public static Boolean compareEigenvalue(float[] features1, float[] features2) { // try { // //人脸向量特征提取和对比器 // // FaceRecognizer faceRecognizer = new FaceRecognizer(new SeetaModelSetting(SeetaConstant.face_recognizer, SeetaDevice.SEETA_DEVICE_AUTO)); // if (features1 != null && features2 != null ) { // float calculateSimilarity = faceRecognizer.CalculateSimilarity(features1, features2); // // if (calculateSimilarity > 0.75) { // return true; // } // } // } catch (Exception e) { // log.error(e.getMessage()); // return false; // } // return false; // } // // public static BufferedImage imageAsBufferedImage(MultipartFile file) throws Exception { // // 获取输入流 // InputStream inputStream = file.getInputStream(); // // 使用ImageIO读取InputStream到BufferedImage // BufferedImage bufferedImage = ImageIO.read(inputStream); // // 关闭输入流 // inputStream.close(); // return bufferedImage; // } // // public static BufferedImage downloadImageAsBufferedImage(String imageUrl) throws Exception { // // 创建URL对象 // URL url = new URL(imageUrl); // // 打开连接 // HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // connection.setRequestMethod("GET"); // // 连接到资源 // connection.connect(); // // 获取输入流 // InputStream inputStream = connection.getInputStream(); // // 使用ImageIO读取InputStream到BufferedImage // BufferedImage bufferedImage = ImageIO.read(inputStream); // // 关闭输入流 // inputStream.close(); // // 断开连接 // connection.disconnect(); // return bufferedImage; // } //}