diff --git a/face-search-core/src/test/java/com/visual/face/search/core/test/extract/FaceCompareTest.java b/face-search-core/src/test/java/com/visual/face/search/core/test/extract/FaceCompareTest.java new file mode 100755 index 0000000..2581a3d --- /dev/null +++ b/face-search-core/src/test/java/com/visual/face/search/core/test/extract/FaceCompareTest.java @@ -0,0 +1,72 @@ +package com.visual.face.search.core.test.extract; + +import com.visual.face.search.core.base.*; +import com.visual.face.search.core.domain.ExtParam; +import com.visual.face.search.core.domain.FaceImage; +import com.visual.face.search.core.domain.FaceInfo; +import com.visual.face.search.core.domain.ImageMat; +import com.visual.face.search.core.extract.FaceFeatureExtractor; +import com.visual.face.search.core.extract.FaceFeatureExtractorImpl; +import com.visual.face.search.core.models.*; +import com.visual.face.search.core.test.base.BaseTest; +import com.visual.face.search.core.utils.Similarity; +import org.opencv.core.Mat; +import org.opencv.imgcodecs.Imgcodecs; + +import java.util.Arrays; +import java.util.List; + +public class FaceCompareTest extends BaseTest { + + private static String modelPcn1Path = "face-search-core/src/main/resources/model/onnx/detection_face_pcn/pcn1_sd.onnx"; + private static String modelPcn2Path = "face-search-core/src/main/resources/model/onnx/detection_face_pcn/pcn2_sd.onnx"; + private static String modelPcn3Path = "face-search-core/src/main/resources/model/onnx/detection_face_pcn/pcn3_sd.onnx"; + private static String modelScrfdPath = "face-search-core/src/main/resources/model/onnx/detection_face_scrfd/scrfd_500m_bnkps.onnx"; + private static String modelCoordPath = "face-search-core/src/main/resources/model/onnx/keypoint_coordinate/coordinate_106_mobilenet_05.onnx"; + private static String modelArcPath = "face-search-core/src/main/resources/model/onnx/recognition_face_arc/glint360k_cosface_r18_fp16_0.1.onnx"; + private static String modelSeetaPath = "face-search-core/src/main/resources/model/onnx/recognition_fcae_seeta/face_recognizer_512.onnx"; +// private static String modelSeetaPath = "face-search-core/src/main/resources/model/onnx/recognition_fcae_seeta/face_recognizer_1024.onnx"; + private static String modelArrPath = "face-search-core/src/main/resources/model/onnx/attribute_gender_age/insight_gender_age.onnx"; + +// private static String imagePath = "face-search-core/src/test/resources/images/faces"; +// private static String imagePath1 = "face-search-core/src/test/resources/images/faces/debug/debug_0001.jpg"; +// private static String imagePath2 = "face-search-core/src/test/resources/images/faces/debug/debug_0001.jpg"; + private static String imagePath1 = "face-search-core/src/test/resources/images/faces/compare/1682052661610.jpg"; + private static String imagePath2 = "face-search-core/src/test/resources/images/faces/compare/1682052669004.jpg"; +// private static String imagePath2 = "face-search-core/src/test/resources/images/faces/compare/1682053163961.jpg"; + + + public static void main(String[] args) { +// Map map = getImagePathMap(imagePath); + FaceDetection insightScrfdFaceDetection = new InsightScrfdFaceDetection(modelScrfdPath, 1); + FaceKeyPoint insightCoordFaceKeyPoint = new InsightCoordFaceKeyPoint(modelCoordPath, 1); + FaceRecognition insightArcFaceRecognition = new InsightArcFaceRecognition(modelArcPath, 1); + FaceRecognition insightSeetaFaceRecognition = new SeetaFaceOpenRecognition(modelSeetaPath, 1); + FaceAlignment simple005pFaceAlignment = new Simple005pFaceAlignment(); + FaceAlignment simple106pFaceAlignment = new Simple106pFaceAlignment(); + FaceDetection pcnNetworkFaceDetection = new PcnNetworkFaceDetection(new String[]{modelPcn1Path, modelPcn2Path, modelPcn3Path}, 1); + FaceAttribute insightFaceAttribute = new InsightAttributeDetection(modelArrPath, 1); + + FaceFeatureExtractor extractor = new FaceFeatureExtractorImpl( + insightScrfdFaceDetection, pcnNetworkFaceDetection, insightCoordFaceKeyPoint, + simple005pFaceAlignment, insightSeetaFaceRecognition, insightFaceAttribute); + + Mat image1 = Imgcodecs.imread(imagePath1); + long s = System.currentTimeMillis(); + ExtParam extParam = ExtParam.build().setMask(false).setTopK(20).setScoreTh(0).setIouTh(0); + FaceImage faceImage1 = extractor.extract(ImageMat.fromCVMat(image1), extParam, null); + List faceInfos1 = faceImage1.faceInfos(); + long e = System.currentTimeMillis(); + System.out.println("image1 extract cost:"+(e-s)+"ms");; + + Mat image2 = Imgcodecs.imread(imagePath2); + s = System.currentTimeMillis(); + FaceImage faceImage2 = extractor.extract(ImageMat.fromCVMat(image2), extParam, null); + List faceInfos2 = faceImage2.faceInfos(); + e = System.currentTimeMillis(); + System.out.println("image2 extract cost:"+(e-s)+"ms"); + float similarity = Similarity.cosineSimilarity(faceInfos1.get(0).embedding.embeds, faceInfos2.get(0).embedding.embeds); + System.out.println("face similarity="+similarity); + + } +} diff --git a/face-search-core/src/test/java/com/visual/face/search/core/test/models/SeetaFaceOpenRecognitionTest.java b/face-search-core/src/test/java/com/visual/face/search/core/test/models/SeetaFaceOpenRecognitionTest.java new file mode 100644 index 0000000..9298e52 --- /dev/null +++ b/face-search-core/src/test/java/com/visual/face/search/core/test/models/SeetaFaceOpenRecognitionTest.java @@ -0,0 +1,53 @@ +package com.visual.face.search.core.test.models; + +import com.visual.face.search.core.base.FaceAlignment; +import com.visual.face.search.core.base.FaceKeyPoint; +import com.visual.face.search.core.base.FaceRecognition; +import com.visual.face.search.core.domain.FaceInfo; +import com.visual.face.search.core.domain.ImageMat; +import com.visual.face.search.core.models.InsightCoordFaceKeyPoint; +import com.visual.face.search.core.models.SeetaFaceOpenRecognition; +import com.visual.face.search.core.models.Simple005pFaceAlignment; +import com.visual.face.search.core.test.base.BaseTest; +import com.visual.face.search.core.utils.CropUtil; +import com.visual.face.search.core.utils.Similarity; +import org.opencv.core.Mat; +import org.opencv.imgcodecs.Imgcodecs; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class SeetaFaceOpenRecognitionTest extends BaseTest { + private static String modelCoordPath = "face-search-core/src/main/resources/model/onnx/keypoint_coordinate/coordinate_106_mobilenet_05.onnx"; + private static String modelSeetaPath = "face-search-core/src/main/resources/model/onnx/recognition_fcae_seeta/face_recognizer_512.onnx"; +// private static String modelSeetaPath = "face-search-core/src/main/resources/model/onnx/recognition_fcae_seeta/face_recognizer_1024.onnx"; + + private static String imagePath = "face-search-core/src/test/resources/images/faces"; +// private static String imagePath1 = "face-search-core/src/test/resources/images/faces/debug/debug_0001.jpg"; +// private static String imagePath2 = "face-search-core/src/test/resources/images/faces/debug/debug_0004.jpeg"; + private static String imagePath1 = "face-search-core/src/test/resources/images/faces/compare/1682052661610.jpg"; + private static String imagePath2 = "face-search-core/src/test/resources/images/faces/compare/1682052669004.jpg"; +// private static String imagePath2 = "face-search-core/src/test/resources/images/faces/compare/1682053163961.jpg"; + + public static void main(String[] args) { + FaceAlignment simple005pFaceAlignment = new Simple005pFaceAlignment(); + FaceKeyPoint insightCoordFaceKeyPoint = new InsightCoordFaceKeyPoint(modelCoordPath, 1); + FaceRecognition insightSeetaFaceRecognition = new SeetaFaceOpenRecognition(modelSeetaPath, 1); + + Mat image1 = Imgcodecs.imread(imagePath1); + Mat image2 = Imgcodecs.imread(imagePath2); +// image1 = CropUtil.crop(image1, FaceInfo.FaceBox.build(54,27,310,380)); +// image2 = CropUtil.crop(image2, FaceInfo.FaceBox.build(48,13,292,333)); +// image2 = CropUtil.crop(image2, FaceInfo.FaceBox.build(52,9,235,263)); + +// simple005pFaceAlignment.inference() + + FaceInfo.Embedding embedding1 = insightSeetaFaceRecognition.inference(ImageMat.fromCVMat(image1), null); + FaceInfo.Embedding embedding2 = insightSeetaFaceRecognition.inference(ImageMat.fromCVMat(image2), null); + float similarity = Similarity.cosineSimilarity(embedding1.embeds, embedding2.embeds); + System.out.println(similarity); +// System.out.println(Arrays.toString(embedding1.embeds)); +// System.out.println(Arrays.toString(embedding2.embeds)); + } +} diff --git a/face-search-core/src/test/resources/images/faces/compare/1682052661610.jpg b/face-search-core/src/test/resources/images/faces/compare/1682052661610.jpg new file mode 100644 index 0000000..e487826 Binary files /dev/null and b/face-search-core/src/test/resources/images/faces/compare/1682052661610.jpg differ diff --git a/face-search-core/src/test/resources/images/faces/compare/1682052669004.jpg b/face-search-core/src/test/resources/images/faces/compare/1682052669004.jpg new file mode 100644 index 0000000..4d4ffd7 Binary files /dev/null and b/face-search-core/src/test/resources/images/faces/compare/1682052669004.jpg differ diff --git a/face-search-core/src/test/resources/images/faces/compare/1682053163961.jpg b/face-search-core/src/test/resources/images/faces/compare/1682053163961.jpg new file mode 100644 index 0000000..380155e Binary files /dev/null and b/face-search-core/src/test/resources/images/faces/compare/1682053163961.jpg differ