Настройка механизма отображения и исчезновения рамки распознавания лиц на плеере

монитор
Настройка механизма отображения и исчезновения рамки распознавания лиц на плеере

Благодаря зрелости технологии распознавания лиц «чистка лица» постепенно стала основной областью применения технологии биометрической идентификации в новую эру.Чтобы удовлетворить потребности современного рынка, распознавание лица EasyCVR также постоянно оптимизируется. Обнаружение ИИ и распознавание снимков людей, транспортных средств, объектов и т. д. в сцене наблюдения.

В распознавании лиц EasyCVR, если в области распознавания есть лицо, его можно распознать напрямую.Если в следующем кадре нет лица, на экране проигрывателя EasyCVR отобразится окно распознавания лиц, как показано ниже:

Однако нецелесообразно, чтобы это поле отображалось, когда нет распознанного контента, поэтому нам нужно удалить это поле и настроить его так, чтобы оно появлялось только при наличии лица, и никакое поле не будет отображаться, если лица нет.

При использовании EasyStreamClient для извлечения потока RTSP сначала инициализируйте декодер и декодируйте полученный I-кадр в yuv (операция на следующем рисунке).

На следующем рисунке показано распознавание лиц и извлечение признаков:

На следующем рисунке показано извлечение признаков Ось X, ось Y, ширина и высота, извлеченные из признака, сохраняются в переменной Rect. Преобразуйте значение в Rect в кадр SEI и передайте его во внешний интерфейс для рисования красной рамки лица.

Код анализа содержит распознавание лица "int(ret.size)>0", поэтому только при обнаружении лица оно будет отправлено обратно во внешний интерфейс для рисования. Если лица нет, пустые данные будут переданы в интерфейс, что приведет только к рамке рисования без отмены действия поля.

Здесь нам нужно добавить в программу операцию else "int(ret.size)>0" для отмены каждого распознанного лица в кадре, а затем отдать его во фронтенд, чтобы кадр плеера исчез.

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)
   }
}