Невозможно загрузить модель с помощью load_model ()

Все указанные ниже операции импорта выполняются без ошибок.

import cv2
import numpy as np
import dlib
import glob
from scipy.spatial import distance
from imutils import face_utils
from keras.models import load_model
from fr_utils import *
from inception_blocks_v2 import *

Когда я пытаюсь импортировать предварительно обученную модель «face-rec_Google.h5», которая была обучена с использованием facenet. Файл ('face-rec_Google.h5') находится в папке моего проекта.

x = load_model('face-rec_Google.h5')

Я получаю следующую ошибку

ValueError: Initializer for variable conv1_4/kernel/ is from inside a 
control-flow construct, such as a loop or conditional. When creating a   
variable inside a loop or conditional,
use a lambda as the initializer.

вот весь код распознавания лиц:

import cv2
import numpy as np
import dlib
import glob
from scipy.spatial import distance
from imutils import face_utils
from keras.models import load_model
from fr_utils import *
from inception_blocks_v2 import *

detector = dlib.get_frontal_face_detector()

x = load_model('face-rec_Google.h5')
print("Total Params:", x.count_params())
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
thresh = 0.25


def eye_aspect_ratio(eye):
    A = distance.euclidean(eye[1], eye[5])
    B = distance.euclidean(eye[2], eye[4])
    C = distance.euclidean(eye[0], eye[3])
    ear = (A + B) / (2.0 * C)
    return ear

def recognize_face(face_descriptor, database):
    encoding = img_to_encoding(face_descriptor, FRmodel)
    min_dist = 100
    identity = None

    # Loop over the database dictionary's names and encodings.
    for (name, db_enc) in database.items():

        # Compute L2 distance between the target "encoding" and the current "emb" from the database.
        dist = np.linalg.norm(db_enc - encoding)

        print('distance for %s is %s' % (name, dist))

        # If this distance is less than the min_dist, then set min_dist to dist, and identity to name
        if dist < min_dist:
            min_dist = dist
            identity = name

    if int(identity) <=4:
        return str('Akshay'), min_dist
    if int(identity) <=8:
        return str('Apoorva'), min_dist



def extract_face_info(img, img_rgb, database,ear):
    faces = detector(img_rgb)
    x, y, w, h = 0, 0, 0, 0
    if len(faces) > 0:
        for face in faces:
            (x, y, w, h) = face_utils.rect_to_bb(face)
            cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 2)
            image = img[y:y + h, x:x + w]
            name, min_dist = recognize_face(image, database)
            if ear > thresh:
                if min_dist < 0.1:
                    cv2.putText(img, "Face : " + name, (x, y - 50), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 255, 0), 2)
                    cv2.putText(img, "Dist : " + str(min_dist), (x, y - 20), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 255, 0), 2)
                else:
                    cv2.putText(img, 'No matching faces', (x, y - 20), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 0, 255), 2)
            else:
                cv2.putText(img, 'Eyes Closed', (x, y - 20), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 0, 255), 2)

def initialize():
    #load_weights_from_FaceNet(FRmodel)
    #we are loading model from keras hence we won't use the above method
    database = {}

    # load all the images of individuals to recognize into the database
    for file in glob.glob("images//"):
        identity = os.path.splitext(os.path.basename(file))[0]
        database[identity] = fr_utils.img_path_to_encoding(file, FRmodel)
    return database


def recognize():
    database = initialize()
    cap = cv2.VideoCapture(0)
    (lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"]
    (rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"]
    while True:
        ret, img = cap.read()
        img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        subjects = detector(gray, 0)
        for subject in subjects:
            shape = predictor(gray, subject)
            shape = face_utils.shape_to_np(shape)  # converting to NumPy Array
            leftEye = shape[lStart:lEnd]
            rightEye = shape[rStart:rEnd]
            leftEAR = eye_aspect_ratio(leftEye)
            rightEAR = eye_aspect_ratio(rightEye)
            ear = (leftEAR + rightEAR) / 2.0
            leftEyeHull = cv2.convexHull(leftEye)
            rightEyeHull = cv2.convexHull(rightEye)
            cv2.drawContours(img, [leftEyeHull], -1, (0, 255, 0), 1)
            cv2.drawContours(img, [rightEyeHull], -1, (0, 255, 0), 1)
            extract_face_info(img, img_rgb, database,ear)
        cv2.imshow('Recognizing faces', img)
        if cv2.waitKey(1) == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()


recognize()

Можете ли вы включить полную трассировку ошибки?

Dr. Snoopy 03.01.2019 14:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
4 025
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Какую версию Keras вы используете?

Одно из предложений, которое я хотел бы сделать, - это попробовать обновить Keras до последней версии (2.2.4 на момент написания этого комментария).

Убедитесь, что вы также обновили keras.applications и keras.preprocessing до их последней версии.

Если это не сработает, вы можете попробовать следующий вариант:

Сначала удалите Keras и его приложения + предварительная обработка (я забыл добавить это, извините)

Затем обновите версию своего TensorFlow. После этого шага следуйте предложению ниже.

Попробуйте воспользоваться методом load_model через tensorflow. Пример: из tensorflow.keras.models import load_model

Вот мои зависимости Keras -2.2.4, Keras-Applications -1.0.6 Keras-Preprocessing -1.0.5 tensorflow-1.8 из tensorflow.keras.models импорт load_model результаты в ModuleNotFoundError

abhinay oja 03.01.2019 12:03

Попробуйте удалить Keras. Поскольку Keras теперь является частью серверной части tenorflow, вам не нужно устанавливать Keras отдельно. Обновите TensorFlow и удалите Keras.

Timbus Calin 03.01.2019 13:46

Кроме того, убедитесь, что вы импортируете все таким же образом; пример: вместо keras.x используйте tenorflow.keras.x

Timbus Calin 03.01.2019 16:11

Спасибо, человек, это сработало, я забыл переименовать tenorflow.keras в другие мои файлы, поэтому ошибка сохранялась некоторое время

abhinay oja 03.01.2019 18:45

Нет проблем, я очень рад, что он решил вашу проблему! : D

Timbus Calin 03.01.2019 20:47

Другие вопросы по теме

Почему блоки изображений становятся пиксельными при извлечении, но становятся нормальными при объединении?
Ошибка открытия CV: несколько ограничивающих рамок создаются вокруг одного объекта во время попытки автоматического добавления аннотаций
Аномальное отображение цвета после масштабирования серого с использованием opencv в Python
В результате сборки выпуска Visual Studio создается исполняемый файл, которому требуется Microsoft.VC80.DebugCRT
Получить изображение (прямоугольник на плоскости) с коррекцией перспективы с камеры (2d изображение)
Двусторонний фильтр с цветом
Загрузчик данных pytorch зависает при использовании метода изменения размера opencv
Ошибка атрибута: MultiTracker_create () не найден в cv2 на Raspberry Pi
Python OpenCV - как найти ТОЛЬКО вращение и перевод, необходимые для выравнивания двух изображений с двумя наборами точек? (без аффинности, без деформации)
PyCharm не ладит с imshow () OpenCV