Skip to content
This repository was archived by the owner on Mar 19, 2023. It is now read-only.
This repository was archived by the owner on Mar 19, 2023. It is now read-only.

FR: Add a list of names to the integration #46

@DivanX10

Description

@DivanX10

I made corrections to the code and got the output of names in one line. Please add this code to your integration and if you see that you need to fix it, fix it. I'm not a programmer, I just read python literature and tried to implement it, so I'm sorry for my mistakes.
Внес исправления в код и получил вывод имен в одну строку. Добавьте пожалуйста этот код в свою интеграцию и если увидите, что нужно исправить - исправьте. Я не программист, просто читал литературу питона и попробовал это реализовать, так что простите за мои ошибки.

image
image

image
image

def get_valid_filename(name: str) -> str:
    return re.sub(r"(?u)[^-\w.]", "", str(name).strip().replace(" ", "_"))


def get_faces(predictions: list, img_width: int, img_height: int):
    """Return faces with formatting for annotating images."""

    faces = []
    names_list = []
    decimal_places = 3
    for pred in predictions:
        if not "userid" in pred.keys():
            name = "unknown"
        else:
            name = pred["userid"]
        confidence = round(pred["confidence"] * 100, decimal_places)
        box_width = pred["x_max"] - pred["x_min"]
        box_height = pred["y_max"] - pred["y_min"]
        box = {
            "height": round(box_height / img_height, decimal_places),
            "width": round(box_width / img_width, decimal_places),
            "y_min": round(pred["y_min"] / img_height, decimal_places),
            "x_min": round(pred["x_min"] / img_width, decimal_places),
            "y_max": round(pred["y_max"] / img_height, decimal_places),
            "x_max": round(pred["x_max"] / img_width, decimal_places),
        }
        faces.append(
            {"name": name, "confidence": confidence, "bounding_box": box, "prediction": pred}
        )
        if name == 'Valentina' or name == 'valentina':
            name = 'Валентина'
        elif name == 'Svetlana' or name == 'svetlana':
            name = 'Светлана'
        elif name == 'Aleksandr' or name == 'aleksandr':
            name = 'Александр'
        elif name == 'Oleg' or name == 'oleg':
            name = 'Олег'
        elif name == 'Artem' or name == 'artem':
            name = 'Артем'
        elif name == 'Igor' or name == 'igor':
            name = 'Игорь'
        names_list.append(name)
    faces[0]['bounding_box']['names'] = ', '.join(names_list)
    return faces


def setup_platform(hass, config, add_devices, discovery_info=None):
    """Set up the classifier."""
    if DATA_DEEPSTACK not in hass.data:
        hass.data[DATA_DEEPSTACK] = []

Output the sensor
Выводим сенсор

# The sensor displays the name of the identified person
# Сенсор отображает имя опознанного лица
     identified_person:
        friendly_name: 'Name of the identified person'
        value_template: >
            {{ states.image_processing.detect_face_smartphone_camera.attributes.faces[0].bounding_box.names }}

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions