add:添加SeetaFace6Open的人脸特征模型测试用例

This commit is contained in:
divenswu 2023-04-24 17:57:13 +08:00
parent 4eca8aa2cf
commit 2ce99a7b4e
5 changed files with 125 additions and 0 deletions

View File

@ -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<String, String> 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<FaceInfo> 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<FaceInfo> 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);
}
}

View File

@ -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));
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB