AIAS/1_image_sdks/crowd_sdk
2024-11-13 10:21:20 +08:00
..
models update readme. 2024-11-07 16:40:05 +08:00
src no message 2024-07-17 14:03:23 +08:00
crowd_sdk.iml no message 2023-11-05 05:00:51 +08:00
density_plot.jpg no message 2024-07-17 14:03:23 +08:00
pom.xml no message 2023-11-05 05:00:51 +08:00
README_cn.md 更新模型加载说明 2024-11-13 10:21:20 +08:00
README.md 更新模型加载说明 2024-11-13 10:21:20 +08:00

官网:

官网链接

下载模型

模型使用方法:

    1. 用模型的名字搜索代码,找到模型的加载位置
    1. 然后更新模型路径(代码里默认加载路径是:项目/models 文件夹)
    1. 具体模型加载方法
  • http://aias.top/AIAS/guides/load_model.html

人群密度检测 SDK

CrowdNet模型是2016年提出的人流密度估计模型论文为《CrowdNet: A Deep Convolutional Network for DenseCrowd Counting》 CrowdNet模型主要有深层卷积神经网络和浅层卷积神经组成通过输入原始图像和高斯滤波器得到的密度图进行训练最终得到的模型估计图像中的行人的数量。 当然这不仅仅可以用于人流密度估计,理论上其他的动物等等的密度估计应该也可以。

以下是CrowdNet模型的结构图从结构图中可以看出CrowdNet模型是深层卷积网络Deep Network和浅层卷积网络Shallow Network组成 两组网络通过拼接成一个网络接着输入到一个卷积核数量和大小都是1的卷积层最后通过插值方式得到一个密度图数据通过统计这个密度就可以得到估计人数。 model

sdk功能

  • 统计人数
  • 计算密度图

运行例子 - CrowdDetectExample

  • 测试图片 crowd

  • 例子代码:

    Path imageFile = Paths.get("src/test/resources/crowd1.jpg");
    Image image = ImageFactory.getInstance().fromFile(imageFile);

    Criteria<Image, NDList> criteria = new CrowdDetect().criteria();

    try (ZooModel model = ModelZoo.loadModel(criteria);
        Predictor<Image, NDList> predictor = model.newPredictor()) {
      NDList list = predictor.predict(image);

      //quantity为人数
      float q = list.get(1).toFloatArray()[0];
      int quantity = (int)(Math.abs(q) + 0.5);
      logger.info("人数 quantity: {}", quantity);
      
      // density为密度图
      NDArray densityArray = list.get(0);
      logger.info("密度图 density: {}", densityArray.toDebugString(1000000000, 1000, 1000, 1000));
  • 运行成功后,命令行应该看到下面的信息:
[INFO ] - 人数 quantity: 11

[INFO ] - 密度图 density: ND: (1, 1, 80, 60) cpu() float32
[  
   [ 4.56512964e-04,  2.19504116e-04,  3.44428350e-04,  ..., -1.44560239e-04,  1.58709008e-04],
   [ 9.59073077e-05,  2.53924576e-04,  2.51444580e-04,  ..., -1.64886122e-04,  1.14555296e-04],
   [ 6.42040512e-04,  5.44962648e-04,  4.95903892e-04,  ..., -1.15299714e-04,  3.01052118e-04],
   [ 1.58930803e-03,  1.43694575e-03,  7.95312808e-04,  ...,  1.44582940e-04,  4.20258410e-04],
    ....
   [ 2.21548311e-04,  2.92199198e-04,  3.05847381e-04,  ...,  6.77200791e-04,  2.88001203e-04],
   [ 5.04880096e-04,  2.36357562e-04,  1.90203893e-04,  ...,  8.42695648e-04,  2.92608514e-04],
   [ 1.45231024e-04,  1.56763941e-04,  2.12623156e-04,  ...,  4.69507067e-04,  1.36347953e-04],
   [ 5.02332812e-04,  2.98928004e-04,  3.34762561e-04,  ...,  4.80025599e-04,  2.72601028e-04],
]

密度图

density

开源算法

1. sdk使用的开源算法

2. 模型如何导出 ?

import paddle
import paddle.fluid as fluid

INFER_MODEL = 'infer_model/'

def save_pretrained(dirname='infer/', model_filename=None, params_filename=None, combined=True):
if combined:
model_filename = "__model__" if not model_filename else model_filename
params_filename = "__params__" if not params_filename else params_filename
place = fluid.CPUPlace()
exe = fluid.Executor(place)

    program, feeded_var_names, target_vars = fluid.io.load_inference_model(INFER_MODEL, executor=exe)

    fluid.io.save_inference_model(
        dirname=dirname,
        main_program=program,
        executor=exe,
        feeded_var_names=feeded_var_names,
        target_vars=target_vars,
        model_filename=model_filename,
        params_filename=params_filename)


if __name__ == '__main__':
paddle.enable_static()
save_pretrained()

Git地址

Github链接
Gitee链接

帮助文档: