人脸检测算法

public unsafe static void GenerateProposal(int inpHeight, int inpWidth, int reg_max, int num_class, float score_threshold, int feat_h, int feat_w, Mat output, List<Rect> position_boxes, List<float> confidences, List<List<Point>> landmarks, int imgh, int imgw, float ratioh, float ratiow, int padh, int padw)
{
    int num = (int)Math.Ceiling((double)(inpHeight / feat_h));
    int num2 = feat_h * feat_w;
    float* ptr = (float*)(void*)output.DataStart;
    float* ptr2 = ptr + num2 * reg_max * 4;
    float* ptr3 = ptr + num2 * (reg_max * 4 + num_class);
    for (int i = 0; i < feat_h; i++)
    {
        for (int j = 0; j < feat_w; j++)
        {
            int num3 = -1;
            float num4 = -10000f;
            int num5 = i * feat_w + j;
            for (int k = 0; k < num_class; k++)
            {
                float num6 = ptr2[k * num2 + num5];
                if (num6 > num4)
                {
                    num4 = num6;
                    num3 = k;
                }
            }
            float num7 = sigmoid_x(num4);
            if (!(num7 > score_threshold))
            {
                continue;
            }
            float[] array = new float[4];
            float[] x = new float[reg_max];
            float[] y = new float[reg_max];
            for (int l = 0; l < 4; l++)
            {
                for (int m = 0; m < reg_max; m++)
                {
                    x[m] = ptr[(l * reg_max + m) * num2 + num5];
                }
                softmax_(ref x, ref y, reg_max);
                float num8 = 0f;
                for (int n = 0; n < reg_max; n++)
                {
                    num8 += (float)n * y[n];
                }
                array[l] = num8 * (float)num;
            }
            float num9 = ((float)j + 0.5f) * (float)num;
            float num10 = ((float)i + 0.5f) * (float)num;
            float num11 = Math.Max((num9 - array[0] - (float)padw) * ratiow, 0f);
            float num12 = Math.Max((num10 - array[1] - (float)padh) * ratioh, 0f);
            float num13 = Math.Min((num9 + array[2] - (float)padw) * ratiow, imgw - 1);
            float num14 = Math.Min((num10 + array[3] - (float)padh) * ratioh, imgh - 1);
            Rect item = new Rect((int)num11, (int)num12, (int)(num13 - num11), (int)(num14 - num12));
            position_boxes.Add(item);
            confidences.Add(num7);
            List<Point> list = new List<Point>();
            for (int num15 = 0; num15 < 5; num15++)
            {
                float num16 = ((ptr3[num15 * 3 * num2 + num5] * 2f + (float)j) * (float)num - (float)padw) * ratiow;
                float num17 = ((ptr3[(num15 * 3 + 1) * num2 + num5] * 2f + (float)i) * (float)num - (float)padh) * ratioh;
                list.Add(new Point((int)num16, (int)num17));
            }
            landmarks.Add(list);
        }
    }
}

相关推荐

  1. 人脸检测算法

    2023-12-15 05:26:07       31 阅读
  2. 编写人脸检测程序

    2023-12-15 05:26:07       16 阅读
  3. python 人脸检测人脸识别

    2023-12-15 05:26:07       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-15 05:26:07       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-15 05:26:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-15 05:26:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-15 05:26:07       18 阅读

热门阅读

  1. 第一次使用ThreadPoolExecutor处理业务

    2023-12-15 05:26:07       30 阅读
  2. MATLAB 2018一本通 学习笔记一

    2023-12-15 05:26:07       38 阅读
  3. 数据处理架构

    2023-12-15 05:26:07       36 阅读
  4. 【MySQL】基础(一)

    2023-12-15 05:26:07       35 阅读
  5. 不安全的裸指针

    2023-12-15 05:26:07       33 阅读
  6. kafka rebalance(再均衡)导致的消息积压分析

    2023-12-15 05:26:07       32 阅读