Найти - Пользователи
Полная версия: Помогите отправлять просто имя без изображения. Телеграм бот с распознаванием лиц по веб камере
Начало » Центр помощи » Помогите отправлять просто имя без изображения. Телеграм бот с распознаванием лиц по веб камере
1
AlexandrSakhno
Всем здравствуйте. Я в новичок в питоне, поэтому не особо ориентируюсь в коде. Написал на днях код, просто соединив код от камеры и код с face_recognition с ролика на ютубе. Работает это так: камера сохраняет снимок в папку, а потом по этой фотке уже идет распознание лица, в папке faces лежат картинки с лицами, которые он может распознавать. Но после выполнение кода идет вывод изображения с подписью чье это лицо( как на картинке). Я бы хотел отправлять ботом просто имя без картинки(тип так: Adam Sandler)( на сайт или просто ботом), но что то не могу разобраться как это сделать. Помогите пожалуйста. Скриншот и сам код прикреплены
 import face_recognition as fr
import os
import cv2
import face_recognition
import numpy as np
from time import sleep
import telepot
TOKEN = '1057979295:AAGT6Apoxplmj_Dwr0LOmp9Dt0Rw9HdA6fc'
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cv2.imwrite('test.jpg', frame)
cap.release()
def get_encoded_faces():
    """
    looks through the faces folder and encodes all
    the faces
    :return: dict of (name, image encoded)
    """
    encoded = {}
    for dirpath, dnames, fnames in os.walk("./faces"):
        for f in fnames:
            if f.endswith(".jpg") or f.endswith(".png"):
                face = fr.load_image_file("faces/" + f)
                encoding = fr.face_encodings(face)[0]
                encoded[f.split(".")[0]] = encoding
    return encoded
def unknown_image_encoded(img):
    """
    encode a face given the file name
    """
    face = fr.load_image_file("faces/" + img)
    encoding = fr.face_encodings(face)[0]
    return encoding
def classify_face(im):
    """
    will find all of the faces in a given image and label
    them if it knows what they are
    :param im: str of file path
    :return: list of face names
    """
    faces = get_encoded_faces()
    faces_encoded = list(faces.values())
    known_face_names = list(faces.keys())
    img = cv2.imread(im, 1)
    #img = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)
    #img = img[:,:,::-1]
    face_locations = face_recognition.face_locations(img)
    unknown_face_encodings = face_recognition.face_encodings(img, face_locations)
    face_names = []
    for face_encoding in unknown_face_encodings:
        # See if the face is a match for the known face(s)
        matches = face_recognition.compare_faces(faces_encoded, face_encoding)
        name = "Unknown"
        # use the known face with the smallest distance to the new face
        face_distances = face_recognition.face_distance(faces_encoded, face_encoding)
        best_match_index = np.argmin(face_distances)
        if matches[best_match_index]:
            name = known_face_names[best_match_index]
        face_names.append(name)
        for (top, right, bottom, left), name in zip(face_locations, face_names):
            # Draw a label with a name below the face
            font = cv2.FONT_HERSHEY_DUPLEX
            cv2.putText(img, name, (left -20, bottom + 15), font, 1.0, (255, 255, 255), 2)
    # Display the resulting image
    while True:
        cv2.imshow('Video', img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            return face_names
print(classify_face("test.jpg"))[url=][/url]
py.user.next
AlexandrSakhno
Я в новичок в питоне, поэтому не особо ориентируюсь в коде.
Тут нужно спроектировать программу сначала. То есть из-за отсутствия проекта программы ты и пытаешься взять готовые тапочки и сделать из них перчатки. Ну, у них же типа примерно одинаковый размер.

Нужно спроектировать программу сначала, а потом при её реализации использовать готовые исходные коды, которые у тебя есть. Причём использование идёт не напрямую, а просто этот имеющийся исходный код используется для построения нового исходного кода, предоставляя лишь свои фрагменты. Это связано с тем, что автор исходного кода, который у тебя есть, тоже не особо шарит в программировании, поэтому и не смог написать переиспользуемый модульный код, который прямо напрямую можно брать и использовать, просто перенастроив его под свою программу.

Так что начни сначала. Не ведись на похожесть программ. Тапочки похожи на перчатки по размеру и там тоже входное отверстие есть, но ты из них перчатки не сделаешь, максимум материал возьмёшь только и всё.

AlexandrSakhno
но что то не могу разобраться как это сделать
Начинай проектировать со словесного описания.

Представим, что у тебя есть программа уже готовая, которую ты написал уже. И мы начинаем следить за этой программой, чтобы выяснить, как она работает.
Ты запускаешь эту программу и происходит что? Она скачивает изображение и сохраняет его в директорию.
Когда она сохранила изображение в директорию происходит что? Она идёт в другую директорию и сопоставляет скачанное изображение с изображениями, которые в той другой директории лежат.
Когда они сопоставила изображение с известными изображениями и обнаружила совпадение происходит что? Она берёт имя откуда-то.
Откуда она берёт имя? Она берёт имя из какой-то структуры данных, в которой хранятся пары <известное имя, известное изображение>.
А где эта структура данных находится? Эта структура данных находится в каком-то файле, который загружается в программу предварительно.
А где находится этот файл при запуске программы? Этот файл лежит в директории с известными изображениями рядом. Значит, при запуске программы она сначала должна загрузить себе в память этот файл.
Когда программа определила имя распознанного изображения, что она дальше делает? Она сохраняет это имя в файл вывода с распознанным именем.
Когда имя распознано и лежит в своём файле, что происходит дальше? Дальше это имя берётся из файла и отправляется куда-то.
А кто берёт это имя из файла и отправляет его куда-то? Какая-то программа, которая даже не знает, откуда там это имя появилось. Ей и не нужно это знать, так как она только отправкой данных занимается.

В итоге у тебя вырисовывается два скрипта: один распознаванием занимается; второй занимается передачей данных. И эти скрипты не знают про деятельность друг друга. Ты можешь их, конечно, в один скрипт объединить, но лучше разделить их, потому что распознавание не всегда приводит к передаче данных куда-то в определённое место, а передача данных происходит далеко не всегда только для распознанных изображений. Вот тогда у тебя появляется модульность - то, чего нет у этого автора, чей исходный код ты взял, который даже использовать больше нигде нельзя без глубокой переработки.

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


tags: project analysis
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB