新增Dockerfile及代码示例

This commit is contained in:
dengwenjie
2025-12-24 11:23:04 +08:00
parent a707e41d9d
commit 7b3426f231
7 changed files with 249 additions and 1 deletions

View File

@@ -0,0 +1,35 @@
# 使用官方 Ubuntu 22.04 作为基础
FROM ubuntu:22.04
# 设置工作目录(可选,但推荐)
WORKDIR /app
# 更新 apt 仓库并安装 OpenJDK 11
RUN apt-get update && \
apt-get install -y --no-install-recommends openjdk-11-jdk && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# (可选) 验证 Java 安装 (可以选择添加你的应用程序,并编译运行,或者只是执行 java -version)
RUN java -version
# 设置默认的模型路径环境变量
ENV SMART_MODEL_PATH=/app/models
# 创建该目录
RUN mkdir -p /app/models
# 挂载
VOLUME ["/app/models"]
# UTF-8
ENV LANG=zh_CN.UTF-8
ENV LC_ALL=zh_CN.UTF-8
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-Dfile.encoding=UTF-8", "-jar", "app.jar"]

View File

@@ -14,7 +14,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<smartjavaai.version>1.1.0</smartjavaai.version>
<!--如果打包运行需要替换成你的main-->
<exec.mainClass>smartai.examples.face.facedet.FaceDetDemo</exec.mainClass>
<exec.mainClass>smartai.examples.face.FaceDemo</exec.mainClass>
<javacv.version>1.5.10</javacv.version>

View File

@@ -0,0 +1,73 @@
package smartai.examples.face;
import ai.djl.modality.cv.Image;
import cn.smartjavaai.common.config.Config;
import cn.smartjavaai.common.cv.SmartImageFactory;
import cn.smartjavaai.common.entity.DetectionInfo;
import cn.smartjavaai.common.entity.DetectionResponse;
import cn.smartjavaai.common.entity.R;
import cn.smartjavaai.common.utils.ImageUtils;
import cn.smartjavaai.face.config.FaceDetConfig;
import cn.smartjavaai.face.constant.FaceDetectConstant;
import cn.smartjavaai.face.enums.FaceDetModelEnum;
import cn.smartjavaai.face.factory.FaceDetModelFactory;
import cn.smartjavaai.face.model.facedect.FaceDetModel;
import cn.smartjavaai.face.utils.FaceUtils;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import java.io.InputStream;
/**
* @author dwj
* @date 2025/12/23
*/
@Slf4j
public class FaceDemo {
public static String MODEL_PATH = "";
/**
* 获取人脸检测模型
* 注意事项:极速模型,识别准确度低,速度快
* @return
*/
public static FaceDetModel getFaceDetModel(){
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(MODEL_PATH + "/face_model/yolo-face/yolov5face-n-0.5-320x320.onnx");
//只返回相似度大于该值的人脸,需要根据实际情况调整,分值越大越严格容易漏检,分值越小越宽松容易误识别
config.setConfidenceThreshold(0.5f);
//用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个
config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD);
return FaceDetModelFactory.getInstance().getModel(config);
}
public static void main(String[] args) {
try {
MODEL_PATH = System.getenv("SMART_MODEL_PATH");
log.info("MODEL_PATH:" + MODEL_PATH);
Config.setCachePath("/app/smartjavaai_cache");
FaceDetModel faceModel = getFaceDetModel();
InputStream is = FaceDemo.class
.getClassLoader()
.getResourceAsStream("iu_1.jpg");
//创建Image对象可以从文件、url、InputStream创建、BufferedImage、Base64创建具体使用方法可以查看文档
Image image = SmartImageFactory.getInstance().fromInputStream(is);
R<DetectionResponse> detectedResult = faceModel.detect(image);
if(detectedResult.isSuccess()){
log.info("人脸检测结果:{}", JSONObject.toJSONString(detectedResult.getData()));
}else{
log.info("人脸检测失败:{}", detectedResult.getMessage());
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}