Skip to content

Создаем сенсор, который показывает свой или чужой

DivanX10 edited this page Sep 3, 2022 · 6 revisions

Сенсор DeepStack image_processing.detect_face_..... выводит имена. DeepStack может распознать несколько лиц, но также может вывести в сенсоре опознанные имена и неопознанные. К примеру сделали автоматизацию, которая срабатывает на конкретные лица, но что будет, если конкретных лиц окажется неизвестное лицо? Как сделать так, чтобы автоматизация правильно работала и система понимала, что это свой человек или среди своих есть чужой? Ниже сенсор позволит определить "Все свои" или "Есть чужое лицо". Если в списке имен не будет unknown, значит "Все свои", если в списке имен среди опознанных имен будет присутствовать unknown, значит есть "Есть чужое лицо".

Первый сенсор, который выводит имена

Пояснение

  • image_processing.detect_face_eufy_camera - это ваш сенсор, который вы создали для интеграции VISION-FACE
  • input_number.deepstack_confidence_face - вспомогательный элемент число. Вы можете назвать его как угодно, это служит для указания уверенности
sensor:
  - platform: template
    sensors:
      persons_names_hall:
        friendly_name: 'Коридор: Имена идентифицированных лиц'
        icon_template: mdi:face-recognition
        value_template: >
          {% set detect_face = state_attr('image_processing.detect_face_eufy_camera','faces') | selectattr('faces','!=','name')| map(attribute='name') | join(', ') %}
          {% set confidence_face = state_attr('image_processing.detect_face_eufy_camera','faces') | selectattr('faces','!=','confidence')| map(attribute='confidence') | join(', ') %}
          {% set set_confidence = states('input_number.deepstack_confidence_face')%}
          {% if detect_face and confidence_face >= set_confidence %}
          {{ state_attr('image_processing.detect_face_eufy_camera','faces') | selectattr('faces','!=','name')| map(attribute='name') | join(', ') }}
          {% elif detect_face and confidence_face <= set_confidence %} unknown
          {% endif %}
        attribute_templates:
          faces: "{{ state_attr('image_processing.detect_face_eufy_camera','faces') }}"
          total_faces: "{{ state_attr('image_processing.detect_face_eufy_camera','total_faces') }}"
          total_matched_faces: "{{ state_attr('image_processing.detect_face_eufy_camera','total_matched_faces') }}"
          matched_faces: "{{ state_attr('image_processing.detect_face_eufy_camera','matched_faces') }}"
          last_detection: "{{ state_attr('image_processing.detect_face_eufy_camera','last_detection') }}"
          friendly_name: "{{ state_attr('image_processing.detect_face_eufy_camera','friendly_name') }}"
          device_class: "{{ state_attr('image_processing.detect_face_eufy_camera','device_class') }}"

Второй сенсор, который использует первый сенсор sensor.persons_names_hall и использует сенсор распознавания лиц image_processing.detect_face_eufy_camera

Важно! Ваши сенсоры могут называться по другому

sensor:
  - platform: template
    sensors:
      identified_person_owner_of_the_house_hall:
        friendly_name: 'Коридор: Опознанное лицо является ли хозяином дома?'
        icon_template: mdi:face-recognition
        value_template: >
            {% set persons = "sensor.persons_names_hall" %} #указываем свой сенсор
            {% set detect_face = states("image_processing.detect_face_eufy_camera") %} #указываем свой сенсор
            {% set whitelist = ["Ольга", "Петр", "Борис", "Маша"]|join('|') %} #указываем имена своих домочадцев
            {% set blacklist = ['unknown']|join('|') %} #оставляем как есть
            {% set authorized_persons = states("sensor.persons_names_hall")|string is search(find=whitelist, ignorecase=True) %} #указываем свой сенсор
            {% set unauthorized_persons = states("sensor.persons_names_hall")|string is search(find=blacklist, ignorecase=True) %} #указываем свой сенсор
            {% if detect_face != "unknown" and authorized_persons == True and unauthorized_persons == False %} Все свои
            {% elif detect_face != "unknown" and authorized_persons == True and unauthorized_persons == True %} Есть чужое лицо
            {% elif detect_face == "unknown" %} off
            {% endif %}