AttributeError: у объекта '_thread._local' нет атрибута 'значение' - PullRequest
1 голос
/ 10 апреля 2020

Абсолютно новый для глубокого обучения не может понять, что происходит. Я внедряю приложение django для распознавания лица в режиме реального времени. Установленные пакеты с использованием pip и conda в двух разных средах, но не имели успеха. Здесь я использую MTCNN для обнаружения лиц, после чего у меня есть модель для распознавания лиц. Пока все работает без django, они не работают с django. Обновление - обнаружил еще одну вещь - этот скрипт даже не запускается во время индивидуального тестирования (без django) и с Keras == 2.2.5. Я считаю, что это имеет некоторые проблемы с MTCNN. введите описание изображения здесь

import cv2

Импортируйте импорт из PIL Импортируйте изображение из numpy Импортируйте загрузку из numpy Импортируйте expand_dims из numpy Импортируйте asarray из mtcnn.mtcnn Импортируйте MTCNN из tenorflow.keras.models import load_model

из sklearn.preprocessing import LabelEncoder

класс RealTimeFaceDetection:

def __init__(self):
    self.stroke = 1
    self.detector = MTCNN()
    self.video_cap = cv2.VideoCapture(0)
    self.color = (255, 0, 0)
    print("Loading pre-trained Keras model for face recognition")
    self.keras_model = load_model('facenet_keras.h5', compile=False)
    print("Face recognition model loaded successfully...")
    print("Loading pre-trained SVC model")
    self.svc_model = pickle.load(open('FACENET_MODEL.sav', 'rb'))
    print("Loading successful...")
    self.emb_data = load('5-celebrity-faces-embeddings.npz')

def img_to_array(self, face_img_pixels, required_size=(160, 160)):
    image = Image.fromarray(face_img_pixels)
    image = image.resize(required_size)
    return asarray(image)

# Get the face embedding for one face
def get_embedding(self, model, face_pixels):
    face_pixels = face_pixels.astype('float32')
    mean, std = face_pixels.mean(), face_pixels.std()
    face_pixels = (face_pixels - mean) / std
    samples = expand_dims(face_pixels, axis=0)
    yhat = model.predict(samples)
    return yhat[0]

def get_encoder(self):
    trainy = self.emb_data['arr_1']
    # Label encode targets
    out_encoder = LabelEncoder()
    out_encoder.fit(trainy)
    return out_encoder

def find_faces(self):
    out_encoder = self.get_encoder()
    while(self.video_cap.isOpened()):
        ret, frame = self.video_cap.read()
        rgb_image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        pixels = asarray(rgb_image)
        all_faces = self.detector.detect_faces(pixels)
        for face in all_faces:
            x1, y1, width, height = face['box']
            x1, y1 = abs(x1), abs(y1)
            x2, y2 = x1 + width, y1 + height
            face_arr = self.img_to_array(pixels[y1:y2, x1:x2])
            face_emb = self.get_embedding(self.keras_model, face_arr)
            samples = expand_dims(face_emb, axis=0)
            yhat_class = self.svc_model.predict(samples)
            yhat_prob = self.svc_model.predict_proba(samples)
            class_index = yhat_class[0]
            class_probability = yhat_prob[0, class_index] * 100
            class_probability = round(class_probability)
            if class_probability > 95.0:
                predict_names = out_encoder.inverse_transform(yhat_class)
                print('Predicted: %s (%f)' % (predict_names[0], class_probability))
            else:
                print("Low accuracy, probability = %f" % (class_probability))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...