diff --git a/examples/face-example/pom.xml b/examples/face-example/pom.xml index cd2e3c945139ce28458173aed41e9b43957511c3..5562054489da7412912e4022f4fdb9acebe310ff 100644 --- a/examples/face-example/pom.xml +++ b/examples/face-example/pom.xml @@ -12,7 +12,7 @@ 11 11 UTF-8 - 1.0.23 + 1.0.24 smartai.examples.face.facedet.FaceDetDemo @@ -34,7 +34,7 @@ cn.smartjavaai - smartjavaai-bom + bom ${smartjavaai.version} pom @@ -94,14 +94,14 @@ cn.smartjavaai - smartjavaai-face + face ai.djl.pytorch pytorch-jni - 2.5.1-0.32.0 + 2.7.1-0.34.0 runtime @@ -138,7 +138,7 @@ ai.djl.pytorch pytorch-native-cpu ${djl.platform.windows-x86_64} - 2.5.1 + 2.7.1 runtime @@ -176,7 +176,7 @@ ai.djl.pytorch pytorch-native-cpu ${djl.platform.linux-x86_64} - 2.5.1 + 2.7.1 runtime @@ -213,7 +213,7 @@ ai.djl.pytorch pytorch-native-cpu ${djl.platform.osx-aarch64} - 2.5.1 + 2.7.1 runtime @@ -255,6 +255,14 @@ runtime + + ai.djl.pytorch + pytorch-native-cpu + linux-aarch64 + runtime + 2.7.1 + + diff --git a/examples/face-example/src/main/java/smartai/examples/face/expression/ExpressionRecDemo.java b/examples/face-example/src/main/java/smartai/examples/face/expression/ExpressionRecDemo.java index 8e351db066b2506225b459d7f67ee087c30219a4..b37e62ea5f3a2f7d2f9415ff75aca8eca3c5c5f3 100644 --- a/examples/face-example/src/main/java/smartai/examples/face/expression/ExpressionRecDemo.java +++ b/examples/face-example/src/main/java/smartai/examples/face/expression/ExpressionRecDemo.java @@ -63,15 +63,21 @@ public class ExpressionRecDemo { } /** - * 获取人脸检测模型 + * 获取人脸检测模型(均衡模型) + * 均衡模型:兼顾速度和精度 + * 注意事项:SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath * @return */ public FaceDetModel getFaceDetModel(){ FaceDetConfig config = new FaceDetConfig(); - config.setModelEnum(FaceDetModelEnum.RETINA_FACE);//人脸检测模型 - config.setConfidenceThreshold(FaceDetectConstant.DEFAULT_CONFIDENCE_THRESHOLD);//只返回相似度大于该值的人脸 - config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD);//用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 - config.setDevice(device); + //人脸检测模型,SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath + config.setModelEnum(FaceDetModelEnum.MTCNN); + //下载模型并替换本地路径,下载地址:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234 + config.setModelPath("/Users/wenjie/Documents/develop/face_model"); + //只返回相似度大于该值的人脸,需要根据实际情况调整,分值越大越严格容易漏检,分值越小越宽松容易误识别 + config.setConfidenceThreshold(0.5f); + //用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 + config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD); return FaceDetModelFactory.getInstance().getModel(config); } @@ -83,7 +89,7 @@ public class ExpressionRecDemo { public ExpressionModel getExpressionModel(){ FaceExpressionConfig config = new FaceExpressionConfig(); config.setModelEnum(ExpressionModelEnum.FrEmotion); - config.setModelPath("/Users/xxx/Documents/develop/model/emotion/fr_expression.onnx"); + config.setModelPath("/Users/wenjie/Documents/develop/model/emotion/fr_expression.onnx"); config.setDevice(device); config.setAlign(true); config.setDetectModel(getFaceDetModel()); diff --git a/examples/face-example/src/main/java/smartai/examples/face/facedet/FaceDetDemo.java b/examples/face-example/src/main/java/smartai/examples/face/facedet/FaceDetDemo.java index e084c20c92cd01c269e22dd70d0321e2456fcac4..99f7192e93b6db85ee4d92e66c8cd7f1d09c37b3 100644 --- a/examples/face-example/src/main/java/smartai/examples/face/facedet/FaceDetDemo.java +++ b/examples/face-example/src/main/java/smartai/examples/face/facedet/FaceDetDemo.java @@ -58,18 +58,58 @@ public class FaceDetDemo { /** - * 获取人脸检测模型 - * 注意事项:高精度模型,速度较慢 + * 获取人脸检测模型(均衡模型) + * 均衡模型:兼顾速度和精度 + * 注意事项:SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath * @return */ public FaceDetModel getFaceDetModel(){ FaceDetConfig config = new FaceDetConfig(); - //高精度模型,速度慢 - config.setModelEnum(FaceDetModelEnum.RETINA_FACE);//人脸检测模型 + //人脸检测模型,SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath + config.setModelEnum(FaceDetModelEnum.MTCNN); //下载模型并替换本地路径,下载地址:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234 - config.setModelPath("/Users/xxx/Documents/develop/model/retinaface.pt"); - config.setConfidenceThreshold(FaceDetectConstant.DEFAULT_CONFIDENCE_THRESHOLD);//只返回相似度大于该值的人脸 - config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD);//用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 + config.setModelPath("/Users/wenjie/Documents/develop/face_model"); + //只返回相似度大于该值的人脸,需要根据实际情况调整,分值越大越严格容易漏检,分值越小越宽松容易误识别 + config.setConfidenceThreshold(0.5f); + //用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 + config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD); + return FaceDetModelFactory.getInstance().getModel(config); + } + + + /** + * 获取人脸检测模型(高精度模型) + * 注意事项:高精度模型,识别准确度高,速度慢 + * @return + */ + public FaceDetModel getProFaceDetModel(){ + FaceDetConfig config = new FaceDetConfig(); + //人脸检测模型,SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath + config.setModelEnum(FaceDetModelEnum.RETINA_FACE); + //下载模型并替换本地路径,下载地址:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234 + config.setModelPath("/Users/wenjie/Documents/develop/face_model/retinaface.pt"); + //只返回相似度大于该值的人脸,需要根据实际情况调整,分值越大越严格容易漏检,分值越小越宽松容易误识别 + config.setConfidenceThreshold(0.5f); + //用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 + config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD); + return FaceDetModelFactory.getInstance().getModel(config); + } + + /** + * 获取人脸检测模型(极速模型) + * 注意事项:极速模型,识别准确度低,速度快 + * @return + */ + public FaceDetModel getFastFaceDetModel(){ + FaceDetConfig config = new FaceDetConfig(); + //人脸检测模型,SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath + config.setModelEnum(FaceDetModelEnum.YOLOV5_FACE_320); + //下载模型并替换本地路径,下载地址:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234 + config.setModelPath("/Users/wenjie/Documents/develop/face_model/yolo-face/yolov5face-n-0.5-320x320.onnx"); + //只返回相似度大于该值的人脸,需要根据实际情况调整,分值越大越严格容易漏检,分值越小越宽松容易误识别 + config.setConfidenceThreshold(0.5f); + //用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 + config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD); return FaceDetModelFactory.getInstance().getModel(config); } @@ -84,35 +124,18 @@ public class FaceDetDemo { config.setModelEnum(FaceDetModelEnum.SEETA_FACE6_MODEL); //指定模型路径:请根据实际情况替换为本地模型文件的绝对路径(下载地址:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234) config.setModelPath("C:/Users/Administrator/Downloads/sf3.0_models/sf3.0_models"); + config.setConfidenceThreshold(0.9); return FaceDetModelFactory.getInstance().getModel(config); } - /** - * 人脸检测(默认配置) - * 使用默认模型参数检测,默认模型:retinaface,需联网,会自动下载模型 - * 图片参数:图片路径 - */ - @Test - public void testFaceDetect(){ - try { - FaceDetModel faceModel = FaceDetModelFactory.getInstance().getModel(); - R detectedResult = faceModel.detect(imgPath); - if(detectedResult.isSuccess()){ - log.info("人脸检测结果:{}", JSONObject.toJSONString(detectedResult.getData())); - }else{ - log.info("人脸检测失败:{}", detectedResult.getMessage()); - } - } catch (Exception e) { - e.printStackTrace(); - } - } /** - * 人脸检测(自定义模型参数) - * 图片参数:图片路径 + * 人脸检测 + * 注意事项: + * 1、此用例使用均衡模型,可以切换高精度模型或极速模型 */ @Test - public void testFaceDetectCustomConfig(){ + public void testFaceDetect(){ try { FaceDetModel faceModel = getFaceDetModel(); R detectedResult = faceModel.detect(imgPath); @@ -172,10 +195,12 @@ public class FaceDetDemo { public void testDetectFaceGPU(){ try { FaceDetConfig config = new FaceDetConfig(); - //高精度模型,速度慢 - config.setModelEnum(FaceDetModelEnum.RETINA_FACE);//人脸检测模型 + //人脸检测模型,SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath + config.setModelEnum(FaceDetModelEnum.MTCNN); //下载模型并替换本地路径,下载地址:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234 - config.setModelPath("/Users/xxx/Documents/develop/model/retinaface.pt"); + config.setModelPath("/Users/wenjie/Documents/develop/face_model"); + //只返回相似度大于该值的人脸,需要根据实际情况调整,分值越大越严格容易漏检,分值越小越宽松容易误识别 + config.setConfidenceThreshold(0.5f); config.setDevice(DeviceEnum.GPU); FaceDetModel faceModel = FaceDetModelFactory.getInstance().getModel(config); R detectedResult = faceModel.detect(imgPath); @@ -191,7 +216,7 @@ public class FaceDetDemo { /** * 人脸检测(Seetaface6) - * 图片参数:图片路径 + * 注意事项:不支持macos */ @Test public void testFaceDetectSeetaface6(){ @@ -211,12 +236,12 @@ public class FaceDetDemo { /** * 摄像头人脸检测 - * 注意事项:如果视频比较卡,可以使用轻量的人脸检测模型 + * 注意事项:实时检测,需要使用极速模型 */ @Test public void testDetectCamera(){ try { - FaceDetModel faceModel = getSeetaface6DetModel(); + FaceDetModel faceModel = getFastFaceDetModel(); OpenCV.loadShared(); VideoCapture capture = new VideoCapture(0); if (!capture.isOpened()) { diff --git a/examples/face-example/src/main/java/smartai/examples/face/facerec/FaceRecDemo.java b/examples/face-example/src/main/java/smartai/examples/face/facerec/FaceRecDemo.java index 1ed3740a0a3c43c9f4c5e03f86c2131ddb403a9a..cc9d3d2d384d9840bb32b2a0916dc068cd4c0138 100644 --- a/examples/face-example/src/main/java/smartai/examples/face/facerec/FaceRecDemo.java +++ b/examples/face-example/src/main/java/smartai/examples/face/facerec/FaceRecDemo.java @@ -53,39 +53,65 @@ public class FaceRecDemo { /** - * 获取人脸检测模型(高精度,速度慢) - * 追求准确度可以使用 - * 也可以使用其他模型,具体其他模型参数可以查看文档:http://doc.smartjavaai.cn/face.html + * 获取人脸检测模型(均衡模型) + * 均衡模型:兼顾速度和精度 + * 注意事项:SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath * @return */ - public FaceDetModel getHighAccuracyDetModel(){ + public FaceDetModel getFaceDetModel(){ FaceDetConfig config = new FaceDetConfig(); - //高精度模型,速度慢 - config.setModelEnum(FaceDetModelEnum.RETINA_FACE);//人脸检测模型 + //人脸检测模型,SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath + config.setModelEnum(FaceDetModelEnum.MTCNN); //下载模型并替换本地路径,下载地址:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234 - config.setModelPath("/Users/xxx/Documents/develop/model/retinaface.pt"); - config.setConfidenceThreshold(FaceDetectConstant.DEFAULT_CONFIDENCE_THRESHOLD);//只返回相似度大于该值的人脸 - config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD);//用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 - config.setDevice(device); + config.setModelPath("/Users/wenjie/Documents/develop/face_model"); + //只返回相似度大于该值的人脸,需要根据实际情况调整,分值越大越严格容易漏检,分值越小越宽松容易误识别 + config.setConfidenceThreshold(0.5f); + //用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 + config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD); return FaceDetModelFactory.getInstance().getModel(config); } /** - * 获取人脸检测模型(高速模型,精度一般) - * 追求速度可以使用 - * 也可以使用其他模型,具体其他模型参数可以查看文档:http://doc.smartjavaai.cn/face.html + * 获取人脸检测模型(高精度模型) + * 注意事项: + * 1、高精度模型,识别准确度高,速度慢 + * 2、具体其他模型参数可以查看文档:http://doc.smartjavaai.cn/face.html * @return */ - public FaceDetModel getHighSpeedDetModel(){ + public FaceDetModel getProFaceDetModel(){ FaceDetConfig config = new FaceDetConfig(); - //高速模型,速度快,精度一般 - config.setModelEnum(FaceDetModelEnum.SEETA_FACE6_MODEL); + //人脸检测模型,SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath + config.setModelEnum(FaceDetModelEnum.RETINA_FACE); //下载模型并替换本地路径,下载地址:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234 - config.setModelPath("/Users/xxx/Documents/develop/model/sf3.0_models"); - config.setDevice(device); + config.setModelPath("/Users/wenjie/Documents/develop/face_model/retinaface.pt"); + //只返回相似度大于该值的人脸,需要根据实际情况调整,分值越大越严格容易漏检,分值越小越宽松容易误识别 + config.setConfidenceThreshold(0.5f); + //用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 + config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD); + return FaceDetModelFactory.getInstance().getModel(config); + } + + /** + * 获取人脸检测模型(极速模型) + * 注意事项: + * 1、极速模型,识别准确度低,速度快 + * 2、具体其他模型参数可以查看文档:http://doc.smartjavaai.cn/face.html + * @return + */ + public FaceDetModel getFastFaceDetModel(){ + FaceDetConfig config = new FaceDetConfig(); + //人脸检测模型,SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath + config.setModelEnum(FaceDetModelEnum.YOLOV5_FACE_320); + //下载模型并替换本地路径,下载地址:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234 + config.setModelPath("/Users/wenjie/Documents/develop/face_model/yolo-face/yolov5face-n-0.5-320x320.onnx"); + //只返回相似度大于该值的人脸,需要根据实际情况调整,分值越大越严格容易漏检,分值越小越宽松容易误识别 + config.setConfidenceThreshold(0.5f); + //用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 + config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD); return FaceDetModelFactory.getInstance().getModel(config); } + /** * 获取人脸识别模型(高精度,速度慢) * 追求准确度可以使用 @@ -97,14 +123,14 @@ public class FaceRecDemo { //高精度模型,速度慢 config.setModelEnum(FaceRecModelEnum.ELASTIC_FACE_MODEL); //模型路径,请下载模型并替换为本地路径:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234 - config.setModelPath("/Users/xxx/Documents/develop/model/elasticface.pt"); + config.setModelPath("/Users/wenjie/Documents/develop/model/elasticface.pt"); //裁剪人脸:如果图片已经是裁剪过的,则请将此参数设置为false config.setCropFace(true); //开启人脸对齐:适用于人脸不正的场景,开启将提升人脸特征准确度,关闭可以提升性能 config.setAlign(true); config.setDevice(device); //指定人脸检测模型 - config.setDetectModel(getHighAccuracyDetModel()); + config.setDetectModel(getProFaceDetModel()); return FaceRecModelFactory.getInstance().getModel(config); } @@ -126,7 +152,7 @@ public class FaceRecDemo { config.setAlign(false); config.setDevice(device); //指定人脸检测模型 - config.setDetectModel(getHighSpeedDetModel()); + config.setDetectModel(getFastFaceDetModel()); return FaceRecModelFactory.getInstance().getModel(config); } @@ -137,14 +163,14 @@ public class FaceRecDemo { public FaceRecModel getFaceRecModelWithDbConfig(){ FaceRecConfig config = new FaceRecConfig(); //高精度模型,速度慢,追求速度请更换高速模型,具体其他模型参数可以查看文档:http://doc.smartjavaai.cn/face.html - config.setModelEnum(FaceRecModelEnum.ELASTIC_FACE_MODEL);//人脸检测模型 + config.setModelEnum(FaceRecModelEnum.ELASTIC_FACE_MODEL);//人脸识别模型 config.setModelPath("/Users/xxx/Documents/develop/model/elasticface.pt"); //裁剪人脸:如果图片已经是裁剪过的,则请将此参数设置为false config.setCropFace(true); //开启人脸对齐:适用于人脸不正的场景,开启将提升人脸特征准确度,关闭可以提升性能 config.setAlign(true); - //指定人脸检测模型,高精度模型,速度慢,追求速度请更换高速模型getHighSpeedDetModel - config.setDetectModel(getHighAccuracyDetModel()); + //指定人脸检测模型,可切换人脸检测模型(极速:getFastFaceDetModel,高精度:getProFaceDetModel),具体其他模型参数可以查看文档:http://doc.smartjavaai.cn/face.html + config.setDetectModel(getFaceDetModel()); config.setDevice(device); //初始化向量数据库:Milvus数据库配置 @@ -170,13 +196,13 @@ public class FaceRecDemo { FaceRecConfig config = new FaceRecConfig(); //高精度模型,速度慢, 追求速度请更换高速模型,具体其他模型参数可以查看文档:http://doc.smartjavaai.cn/face.html config.setModelEnum(FaceRecModelEnum.ELASTIC_FACE_MODEL);//人脸检测模型 - config.setModelPath("/Users/xxx/Documents/develop/model/elasticface.pt"); + config.setModelPath("/Users/wenjie/Documents/develop/model/elasticface.pt"); //裁剪人脸:如果图片已经是裁剪过的,则请将此参数设置为false config.setCropFace(true); //开启人脸对齐:适用于人脸不正的场景,开启将提升人脸特征准确度,关闭可以提升性能 config.setAlign(true); - //指定人脸检测模型,高精度模型,速度慢,追求速度请更换高速模型getHighSpeedDetModel - config.setDetectModel(getHighAccuracyDetModel()); + //指定人脸检测模型,可切换人脸检测模型(极速:getFastFaceDetModel,高精度:getProFaceDetModel),具体其他模型参数可以查看文档:http://doc.smartjavaai.cn/face.html + config.setDetectModel(getFaceDetModel()); config.setDevice(device); //初始化SQLite数据库 diff --git a/examples/face-example/src/main/java/smartai/examples/face/liveness/LivenessDetDemo.java b/examples/face-example/src/main/java/smartai/examples/face/liveness/LivenessDetDemo.java index 6f3dfb8283cd6af9f48b4da299bddfb0b92ddfed..b1dedd882401aad5395080f1cca6d27e1dc347b9 100644 --- a/examples/face-example/src/main/java/smartai/examples/face/liveness/LivenessDetDemo.java +++ b/examples/face-example/src/main/java/smartai/examples/face/liveness/LivenessDetDemo.java @@ -80,7 +80,7 @@ public class LivenessDetDemo { config.setModelEnum(LivenessModelEnum.IIC_FL_MODEL); config.setDevice(device); //需替换为实际模型存储路径 - config.setModelPath("/Users/xxx/Documents/develop/model/anti/IIC_Fl.onnx"); + config.setModelPath("/Users/wenjie/Documents/develop/model/anti/IIC_Fl.onnx"); //人脸活体阈值,可选,默认0.8,超过阈值则认为是真人,低于阈值是非活体 config.setRealityThreshold(LivenessConstant.DEFAULT_REALITY_THRESHOLD); /*视频检测帧数,可选,默认10,输出帧数超过这个number之后,就可以输出识别结果。 @@ -122,15 +122,21 @@ public class LivenessDetDemo { /** - * 获取人脸检测模型 + * 获取人脸检测模型(均衡模型) + * 均衡模型:兼顾速度和精度 + * 注意事项:SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath * @return */ public FaceDetModel getFaceDetModel(){ FaceDetConfig config = new FaceDetConfig(); - config.setModelEnum(FaceDetModelEnum.RETINA_FACE);//人脸检测模型 - config.setConfidenceThreshold(FaceDetectConstant.DEFAULT_CONFIDENCE_THRESHOLD);//只返回相似度大于该值的人脸 - config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD);//用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 - config.setDevice(device); + //人脸检测模型,SmartJavaAI提供了多种模型选择(更多模型,请查看文档),切换模型需要同时修改modelEnum及modelPath + config.setModelEnum(FaceDetModelEnum.MTCNN); + //下载模型并替换本地路径,下载地址:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234 提取码: 1234 + config.setModelPath("/Users/wenjie/Documents/develop/face_model"); + //只返回相似度大于该值的人脸,需要根据实际情况调整,分值越大越严格容易漏检,分值越小越宽松容易误识别 + config.setConfidenceThreshold(0.5f); + //用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个 + config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD); return FaceDetModelFactory.getInstance().getModel(config); }