mirror of
https://github.com/geekwenjie/SmartJavaAI.git
synced 2026-09-09 19:18:52 +00:00
【人脸识别】 新增多种人脸识别模型
【底层优化】 支持自由选择 OpenCV 或 BufferedImage 作为图像引擎 【通用图像】 全部模型启用 Image 输入,支持各类图片格式与 Image 的互转 【模型管理】 优化模型生命周期,关闭后可重新创建 【人脸识别】 支持在人脸查询结果中绘制姓名标注 【人脸检测】 新增人脸裁剪功能 【修复】 修复若干已知问题,提升系统稳定性
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 674 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 143 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.2 MiB |
@@ -1,5 +0,0 @@
|
||||
<style>
|
||||
table { border-collapse: collapse; }
|
||||
td, th, table { border: 1px solid black; padding: 5px; }
|
||||
</style>
|
||||
<html><body><table><thead><tr><td>主要财务比率</td><td>2020</td><td>2021</td><td>2022E</td><td>2023E</td><td>2024E</td></tr></thead><tbody><tr><td>成长能力</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>营业收入</td><td>97.08%</td><td>33.28%</td><td>65.00%</td><td>42.10%</td><td>21.00%</td></tr><tr><td>营业利润</td><td>165.21%</td><td>22.38%</td><td>31.65%</td><td>64.55%</td><td>36.68%</td></tr><tr><td>归属於母公司净利润</td><td>164.75%</td><td>24.17%</td><td>39.44%</td><td>64.13%</td><td>38.63%</td></tr><tr><td>获利能力</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>毛利率</td><td>25.45%</td><td>23.01%</td><td>16.80%</td><td>17.00%</td><td>18.00%</td></tr><tr><td>净利率</td><td>13.98%</td><td>13.03%</td><td>11.01%</td><td>12.72%</td><td>14.57%</td></tr><tr><td>ROE</td><td>19.29%</td><td>19.25%</td><td>20.77%</td><td>47.11%</td><td>35.24%</td></tr><tr><td>ROIC</td><td>44.53%</td><td>41.55%</td><td>44.21%</td><td>32.59%</td><td>62.14%</td></tr><tr><td>偿债能力</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>资产负债率</td><td>48.28%</td><td>54.90%</td><td>57.79%</td><td>65.62%</td><td>58.84%</td></tr><tr><td>净负债率</td><td>-39.12%</td><td>-36.03%</td><td>6.62%</td><td>8.70%</td><td>5.28%</td></tr><tr><td>流动比率</td><td>1.77</td><td>1.74</td><td>1.60</td><td>1.41</td><td>1.65</td></tr><tr><td>速动比率</td><td>1.26</td><td>1.07</td><td>0.85</td><td>0.62</td><td>0.81</td></tr><tr><td>营运能力</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>应收账款周转率</td><td>5.16</td><td>4.59</td><td>4.11</td><td>5.24</td><td>5.24</td></tr><tr><td>存货周转率</td><td>3.48</td><td>2.89</td><td>2.55</td><td>2.77</td><td>2.63</td></tr><tr><td>总资产周转率</td><td>0.80</td><td>0.78</td><td>0.93</td><td>1.21</td><td>1.22</td></tr><tr><td>每股指标(元)</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>每股收益</td><td>0.84</td><td>1.04</td><td>1.45</td><td>2.38</td><td>3.30</td></tr><tr><td>每股经营现金流</td><td>0.03</td><td>0.04</td><td>-2.54</td><td>4.28</td><td>-1.13</td></tr><tr><td>每股净资产</td><td>4.34</td><td>5.40</td><td>6.97</td><td>5.05</td><td>9.35</td></tr><tr><td>估值比率</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>市盈率</td><td>41.30</td><td>33.26</td><td>23.85</td><td>14.53</td><td>10.48</td></tr><tr><td>市净率</td><td>7.97</td><td>6.40</td><td>4.95</td><td>6.85</td><td>3.69</td></tr><tr><td>EV/EBITDA</td><td>5.08</td><td>22.72</td><td>23.65</td><td>14.40</td><td>10.60</td></tr><tr><td>EV/EBIT</td><td>5.33</td><td>24.19</td><td>25.45</td><td>15.05</td><td>10.95</td></tr></tbody></table></body></html>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 273 KiB |
Binary file not shown.
Binary file not shown.
@@ -1,108 +0,0 @@
|
||||
import ai.djl.Application;
|
||||
import ai.djl.modality.cv.Image;
|
||||
import ai.djl.modality.cv.ImageFactory;
|
||||
import ai.djl.repository.Artifact;
|
||||
import ai.djl.repository.MRL;
|
||||
import ai.djl.repository.zoo.ModelNotFoundException;
|
||||
import ai.djl.repository.zoo.ModelZoo;
|
||||
import ai.djl.util.JsonUtils;
|
||||
import cn.smartjavaai.common.cv.SmartImageFactory;
|
||||
import cn.smartjavaai.common.entity.DetectionResponse;
|
||||
import cn.smartjavaai.common.entity.R;
|
||||
import cn.smartjavaai.face.config.FaceDetConfig;
|
||||
import cn.smartjavaai.face.config.FaceRecConfig;
|
||||
import cn.smartjavaai.face.constant.FaceDetectConstant;
|
||||
import cn.smartjavaai.face.enums.FaceDetModelEnum;
|
||||
import cn.smartjavaai.face.enums.FaceRecModelEnum;
|
||||
import cn.smartjavaai.face.enums.SimilarityType;
|
||||
import cn.smartjavaai.face.factory.FaceDetModelFactory;
|
||||
import cn.smartjavaai.face.factory.FaceRecModelFactory;
|
||||
import cn.smartjavaai.face.model.facedect.FaceDetModel;
|
||||
import cn.smartjavaai.face.model.facerec.FaceRecModel;
|
||||
import cn.smartjavaai.face.utils.SimilarityUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author dwj
|
||||
* @date 2025/7/25
|
||||
*/
|
||||
@Slf4j
|
||||
public class Test {
|
||||
|
||||
/**
|
||||
* 获取人脸检测模型
|
||||
* @return
|
||||
*/
|
||||
public static FaceDetModel getFaceDetModel(){
|
||||
FaceDetConfig config = new FaceDetConfig();
|
||||
// config.setModelEnum(FaceDetModelEnum.YOLOV8_FACE);//人脸检测模型
|
||||
config.setModelPath("/Users/wenjie/Documents/develop/model/yolo-face/yolov8s-face-lindevs.onnx");
|
||||
// config.setModelPath("/Users/wenjie/Documents/develop/face_model");
|
||||
config.setConfidenceThreshold(0.2);//只返回相似度大于该值的人脸
|
||||
config.setNmsThresh(FaceDetectConstant.NMS_THRESHOLD);//用于去除重复的人脸框,当两个框的重叠度超过该值时,只保留一个
|
||||
return FaceDetModelFactory.getInstance().getModel(config);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取人脸识别模型
|
||||
* @return
|
||||
*/
|
||||
public static FaceRecModel getFaceRecModel(){
|
||||
FaceRecConfig config = new FaceRecConfig();
|
||||
config.setModelEnum(FaceRecModelEnum.ELASTIC_FACE_MODEL);
|
||||
config.setModelPath("/Users/wenjie/Documents/develop/model/arcfaceresnet100-11-int8.onnx");
|
||||
// config.setModelPath("/Users/xxx/Documents/develop/model/InsightFace/model_mobilefacenet.pt");
|
||||
//裁剪人脸:如果图片已经是裁剪过的,则请将此参数设置为false
|
||||
config.setCropFace(true);
|
||||
//开启人脸对齐:适用于人脸不正的场景,开启将提升人脸特征准确度,关闭可以提升性能
|
||||
config.setAlign(true);
|
||||
//指定人脸检测模型
|
||||
config.setDetectModel(getFaceDetModel());
|
||||
return FaceRecModelFactory.getInstance().getModel(config);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws ModelNotFoundException, IOException {
|
||||
// boolean withArtifacts =
|
||||
// args.length > 0 && ("--artifact".equals(args[0]) || "-a".equals(args[0]));
|
||||
// if (!withArtifacts) {
|
||||
// logger.info("============================================================");
|
||||
// logger.info("user ./gradlew listModel --args='-a' to show artifact detail");
|
||||
// logger.info("============================================================");
|
||||
// }
|
||||
// Map<Application, List<MRL>> models = ModelZoo.listModels();
|
||||
// for (Map.Entry<Application, List<MRL>> entry : models.entrySet()) {
|
||||
// String appName = entry.getKey().toString();
|
||||
// for (MRL mrl : entry.getValue()) {
|
||||
// if (withArtifacts) {
|
||||
// for (Artifact artifact : mrl.listArtifacts()) {
|
||||
// log.info("{} djl://{}", appName, artifact);
|
||||
// }
|
||||
// } else {
|
||||
// log.info("{} {}", appName, mrl);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// FaceDetModel faceDetModel = getFaceDetModel();
|
||||
// R<Void> result = faceDetModel.detectAndDraw("/Users/wenjie/Downloads/facetest/00974.png", "/Users/wenjie/Downloads/xx333.png");
|
||||
// log.info("result:{}", result.isSuccess() + " msg:" + result.getMessage());
|
||||
|
||||
Image ime = ImageFactory.getInstance().fromFile(Paths.get("/Users/wenjie/Downloads/facetest/00974.png"));
|
||||
// SmartImageFactory.setEngine(SmartImageFactory.Engine.OPENCV);
|
||||
Image image = SmartImageFactory.getInstance().fromFile(Paths.get("/Users/wenjie/Downloads/facetest/00974.png"));
|
||||
// image.save(Files.newOutputStream(Paths.get("/Users/wenjie/Downloads/xx333.png")), "png");
|
||||
//
|
||||
//
|
||||
Image ime2 = ImageFactory.getInstance().fromFile(Paths.get("/Users/wenjie/Downloads/facetest/00974.png"));
|
||||
image.getSubImage(0, 0, 100, 100);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user