Вот как я импортирую в свой файл 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 (most recent call last):
File "/Users/mac/face_recognition_system/Face Recognition System/recognize.py", line 7, in
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", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File "/Users/mac/face_recognition_system/Face Recognition System/train.py", line 31, in euclidean_distance
sumSquared = K.sum(K.square(featsA - featsB), axis=1, keepdims=True)
**NameError: Exception encountered when calling layer "lambda" (type Lambda).
name 'K' is not defined**
Call arguments received by layer "lambda" (type Lambda):
• inputs=['tf.Tensor(shape=(None, 4096), dtype=float32)', 'tf.Tensor(shape=(None, 4096), dtype=float32)']
• mask=None
• training=None
Я использую код VS, если это имеет значение.
Подробнее здесь: https://stackoverflow.com/questions/790 ... d-and-used