Вот как я импортирую в свой файл train.py:
Код: Выделить всё
import os
import numpy as np
import cv2
import tensorflow as tf
from keras.models import Model
from keras.layers import Input, Conv2D, MaxPooling2D, Flatten, Dense, Lambda
from keras import backend as K
from keras.optimizers import Adam
from sklearn.model_selection import train_test_split
from utils import create_pairs, load_images_and_labels, save_embeddings
Но когда я запускаю файл распознавания.py.
Код: Выделить всё
import cv2
import numpy as np
from keras.models import load_model
from utils import load_embeddings
# Load the trained model and embeddings
siamese_model = load_model('models/siamese_model.h5', compile=False)
registered_embeddings = load_embeddings('models/embeddings.pkl')
base_network = siamese_model.layers[2] # Extract the base network
# Initialize the face detector
facedetect = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# Function to recognize faces in real time
def recognize_face(frame, base_network, registered_embeddings, threshold=0.5):
faces = facedetect.detectMultiScale(frame, 1.3, 5)
for x, y, w, h in faces:
face = frame[y:y+h, x:x+w]
face = cv2.resize(face, (100, 100))
face = face.astype('float32') / 255.0
face = np.expand_dims(face, axis=0)
# Generate embedding for the detected face
face_embedding = base_network.predict(face)
# Compare with registered embeddings
min_dist = float('inf')
person_name = "Unknown"
for name, embedding in registered_embeddings.items():
dist = np.linalg.norm(face_embedding - embedding)
if dist < min_dist and dist < threshold:
min_dist = dist
person_name = name
# Draw bounding box and name
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(frame, person_name, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX,
0.9, (255, 255, 255), 2)
cv2.imshow("Face Recognition", frame)
# Real-time webcam feed
video = cv2.VideoCapture(0)
while True:
ret, frame = video.read()
recognize_face(frame, base_network, registered_embeddings)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video.release()
cv2.destroyAllWindows()
Traceback (последний вызов):
Файл «/Users/mac/face_recognition_system/Face Recognition System/recouncee.py», строка 7, в
siamese_model = load_model('models/siamese_model.h5', compile=False)
File "/Users/mac/face_recognition_system/Face Recognition System/face_recognition/lib/python3.9/site -packages/keras/utils/traceback_utils.py", строка 70, в error_handler
поднимите e.with_traceback(filtered_tb) из None
Файл "/Users/mac/face_recognition_system/Face Recognition System/train.py ", строка 31, в euclidean_distance
sumSquared = K.sum(K.square(featsA - featsB), axis=1, Keepdims=True)
NameError: Исключение возникло при вызове слоя «лямбда» (тип Lambda).
имя «K» не определено
Вызов аргументов, полученных слоем «лямбда» (тип Lambda) ):
• inputs=['tf.Tensor(shape=(None, 4096), dtype=float32)', 'tf.Tensor(shape=(None, 4096), dtype=float32)']
• Mask=None
• Training=None
*Примечание. Даже если tensorflow уже установлен, я не могу использовать tensorflow.keras.X (X — это что угодно), потому что там написано не могу решить.
Я использую код VS, если это имеет значение.
Подробнее здесь: https://stackoverflow.com/questions/790 ... d-and-used