EasyCVR人脸识别框在播放器上显示及消失的机制设定

2021-11-30 17:14:24 浏览数 (1)

随着人脸识别技术的成熟,“刷脸”逐渐成为新时期生物识别技术应用的主要领域,为了迎合和满足现代化的市场需求,EasyCVR的人脸识别也在不断优化中,目前可通过对视频监控场景中的人、车、物等进行AI检测与抓拍识别。

在EasyCVR人脸识别中,如果识别区出现人脸即可直接识别,如果下一帧没有人脸,那么EasyCVR播放器屏幕则会显示人脸识别框,如下:

但是这个框在没有识别内容的时候出现其实是不合理的,因此我们需要把这个框去掉,且设置为只有人脸时才会出现框,没有人脸则不显示框。

在使用EasyStreamClient拉RTSP流,先初始化解码器,在获取到的I帧解码成yuv(下图操作)

下图是人脸识别和特征提取:

下图是特征提取,把特征提取到的X轴、Y轴、宽度和高度都保存在Rect的变量中。把Rect里面的值转换为SEI帧,传给前端用于绘制人脸的红色的框。

分析代码,里面有个人脸识别“int(ret.size)>0”,所以只有检测到人脸才回传给前端绘制,如果没有人脸就传递空数据给前端,才会导致只有绘制框没有取消框的操作。

此处我们需要在程序“int(ret.size)>0”加一个else操作,把一帧每有识别到的人脸给取消,再给前端,这样播放器的框会消失。

代码语言:javascript复制
else {
   if client.Flag {
      client.Flag = false
      s := PacketSei{}
      s.Rect = make([]RectSei, int(ret.size))
      s.Rect = append(s.Rect, RectSei{
         X: 0,
         Y: 0,
         W: 0,
         H: 0,
      })
      extJson, _ := json.Marshal(s)
      base64Str := base64.StdEncoding.EncodeToString(extJson)
      //FIXME:debug code
      base64Str = string(extJson)
      GenSei(uintptr(unsafe.Pointer(&result.sei[0])), &result.seiLen, base64Str)

      v := cvrdo.Face{
         AiBase: cvrdo.AiBase{
            ID:         0,
            Name:       "",
            ParentID:   int(client.ChannelId),
            CreateTime: time.Now(),
            UpdateTime: time.Now(),
         },
      }
      v.AiBase.Name = ""
      v.Timestamp = 0
      v.ConfidenceLevel = 0
      result.face = append(result.face, v)
   }
}

0 人点赞