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
И файл train.py запускается, как и ожидалось.
Но когда я запускаю файл распознавания.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
*Примечание. Даже если tensorflow уже установлен, я не могу использовать tensorflow.keras.X (X — это что угодно), потому что он говорит, что невозможно разрешить.
Я использую код VS, если это имеет значение.
Я изучаю ML/DL и хочу создать сиамскую нейронную сеть (SNN) для распознавания лиц. Вот как я импортирую в свой файл train.py: [code]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 [/code] И файл train.py запускается, как и ожидалось. Но когда я запускаю файл распознавания.py. [code]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
# 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()
[/code] Появляется эта ошибка: [code]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 [/code] *Примечание. Даже если tensorflow уже установлен, я не могу использовать tensorflow.keras.X (X — это что угодно), потому что он говорит, что невозможно разрешить. Я использую код VS, если это имеет значение.
Я изучаю ML/DL и хочу создать сиамскую нейронную сеть (SNN) для распознавания лиц.
Вот как я импортирую в свой файл train.py:
import os
import numpy as np
import cv2
import tensorflow as tf
from keras.models import Model
from keras.layers import...
Я хочу создать сиамскую нейронную сеть (SNN) для распознавания лиц.
Вот как я импортирую в свой файл 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,...