added to tuke git
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.git
|
||||||
|
src/dataset
|
||||||
|
src/encodings.pickle
|
15
services/face_rec.service
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Face Recognition Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User={{USER}}
|
||||||
|
WorkingDirectory=/home/valer/dp_prakticka/src
|
||||||
|
EnvironmentFile=/home/valer/dp_prakticka/src/.env
|
||||||
|
ExecStart=/home/valer/env_python_dp/bin/python3.10 /home/valer/dp_prakticka/src/face_rec_no_gui.py
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
15
services/face_rec_web.service
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Web Application Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User={{USER}}
|
||||||
|
WorkingDirectory=/home/valer/dp_prakticka/src
|
||||||
|
EnvironmentFile=/home/valer/dp_prakticka/src/.env
|
||||||
|
ExecStart=/home/valer/env_python_dp/bin/python3.10 /home/valer/dp_prakticka/src/app.py
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
1
src/.env.sample
Normal file
@ -0,0 +1 @@
|
|||||||
|
ENCODINGS_KEY='EEKH1w-VSoR-QJSHPVgkLprSqaeaKeUo2m02WhcK1MU='
|
BIN
src/Python-3.10.0.tgz
Normal file
150
src/app.py
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
import os
|
||||||
|
import cv2
|
||||||
|
import time
|
||||||
|
import subprocess
|
||||||
|
import pickle
|
||||||
|
import dlib
|
||||||
|
import face_recognition
|
||||||
|
import numpy as np
|
||||||
|
from flask import Flask, render_template, Response, request, redirect, url_for, session, flash
|
||||||
|
from functools import wraps
|
||||||
|
from db_connector import log_recognition, get_recognition_logs
|
||||||
|
from config import FLASK_SECRET_KEY
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
app.secret_key = FLASK_SECRET_KEY
|
||||||
|
|
||||||
|
def login_required(f):
|
||||||
|
@wraps(f)
|
||||||
|
def decorated_function(*args, **kwargs):
|
||||||
|
if not session.get("logged_in"):
|
||||||
|
flash("You need to be logged in to access that page.", "warning")
|
||||||
|
return redirect(url_for("login", next=request.url))
|
||||||
|
return f(*args, **kwargs)
|
||||||
|
return decorated_function
|
||||||
|
|
||||||
|
@app.route("/login", methods=["GET", "POST"])
|
||||||
|
def login():
|
||||||
|
error = None
|
||||||
|
if request.method == "POST":
|
||||||
|
username = request.form.get("username")
|
||||||
|
password = request.form.get("password")
|
||||||
|
if username == "admin" and password == "secret":
|
||||||
|
session["logged_in"] = True
|
||||||
|
session["username"] = username
|
||||||
|
flash("You were successfully logged in.", "success")
|
||||||
|
return redirect(url_for("index"))
|
||||||
|
else:
|
||||||
|
error = "Invalid credentials. Please try again."
|
||||||
|
return render_template("login.html", error=error)
|
||||||
|
|
||||||
|
@app.route("/logout")
|
||||||
|
def logout():
|
||||||
|
session.clear()
|
||||||
|
flash("You have been logged out.", "info")
|
||||||
|
return redirect(url_for("login"))
|
||||||
|
|
||||||
|
@app.route("/add_face")
|
||||||
|
@login_required
|
||||||
|
def add_face():
|
||||||
|
return render_template("add_face.html")
|
||||||
|
|
||||||
|
@app.route("/run_face", methods=["POST"])
|
||||||
|
@login_required
|
||||||
|
def run_face():
|
||||||
|
face_name = request.form.get("face_name")
|
||||||
|
if not face_name:
|
||||||
|
flash("Please provide a name.", "danger")
|
||||||
|
return redirect(url_for("add_face"))
|
||||||
|
script = "enroll_no_gui.py"
|
||||||
|
try:
|
||||||
|
result = subprocess.run(["python3", script, face_name, "--auto"],
|
||||||
|
capture_output=True, text=True, timeout=300)
|
||||||
|
output = result.stdout if result.stdout else result.stderr
|
||||||
|
except Exception as e:
|
||||||
|
output = str(e)
|
||||||
|
return render_template("result.html", output=output)
|
||||||
|
|
||||||
|
@app.route("/delete_person")
|
||||||
|
@login_required
|
||||||
|
def delete_person():
|
||||||
|
return render_template("delete_person.html")
|
||||||
|
|
||||||
|
@app.route("/run_delete_person", methods=["POST"])
|
||||||
|
@login_required
|
||||||
|
def run_delete_person():
|
||||||
|
person_name = request.form.get("person_name")
|
||||||
|
if not person_name:
|
||||||
|
flash("Please provide a name.", "danger")
|
||||||
|
return redirect(url_for("delete_person"))
|
||||||
|
script = "remove_face.py"
|
||||||
|
try:
|
||||||
|
result = subprocess.run(["python3", script, person_name],
|
||||||
|
capture_output=True, text=True, timeout=60)
|
||||||
|
output = result.stdout if result.stdout else result.stderr
|
||||||
|
except Exception as e:
|
||||||
|
output = str(e)
|
||||||
|
return render_template("result.html", output=output)
|
||||||
|
|
||||||
|
@app.route("/list_people")
|
||||||
|
@login_required
|
||||||
|
def list_people():
|
||||||
|
try:
|
||||||
|
with open("encodings.pickle", "rb") as f:
|
||||||
|
data = pickle.load(f)
|
||||||
|
names = data.get("names", [])
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[ERROR] {e}")
|
||||||
|
names = []
|
||||||
|
unique_names = sorted(set(names))
|
||||||
|
return render_template("list_people.html", people=unique_names)
|
||||||
|
|
||||||
|
@app.route("/logs")
|
||||||
|
@login_required
|
||||||
|
def logs():
|
||||||
|
recognition_logs = get_recognition_logs()
|
||||||
|
return render_template("logs.html", logs=recognition_logs)
|
||||||
|
|
||||||
|
def gen_frames_raw():
|
||||||
|
cap = cv2.VideoCapture(4)
|
||||||
|
if not cap.isOpened():
|
||||||
|
print("Error: Could not open camera.")
|
||||||
|
return
|
||||||
|
while True:
|
||||||
|
ret, frame = cap.read()
|
||||||
|
if not ret:
|
||||||
|
continue
|
||||||
|
ret, buffer = cv2.imencode('.jpg', frame)
|
||||||
|
if not ret:
|
||||||
|
continue
|
||||||
|
frame_bytes = buffer.tobytes()
|
||||||
|
yield (b'--frame\r\n'
|
||||||
|
b'Content-Type: image/jpeg\r\n\r\n' + frame_bytes + b'\r\n')
|
||||||
|
time.sleep(0.1)
|
||||||
|
cap.release()
|
||||||
|
|
||||||
|
@app.route("/")
|
||||||
|
@login_required
|
||||||
|
def index():
|
||||||
|
logs = get_recognition_logs()
|
||||||
|
return render_template("index.html", logs=logs)
|
||||||
|
|
||||||
|
@app.route("/video_feed")
|
||||||
|
@login_required
|
||||||
|
def video_feed():
|
||||||
|
return Response(gen_frames_raw(), mimetype="multipart/x-mixed-replace; boundary=frame")
|
||||||
|
|
||||||
|
@app.route("/open_door", methods=["GET", "POST"])
|
||||||
|
@login_required
|
||||||
|
def open_door():
|
||||||
|
try:
|
||||||
|
result = subprocess.run(["python3", "open_door.py"], capture_output=True, text=True, timeout=60, check=True)
|
||||||
|
output = result.stdout if result.stdout else result.stderr
|
||||||
|
flash("Door opened successfully!", "success")
|
||||||
|
except Exception as e:
|
||||||
|
output = str(e)
|
||||||
|
flash("Door open failed!", "danger")
|
||||||
|
return render_template("result.html", output=output)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.run(host="0.0.0.0", port=5000, debug=False)
|
81
src/camera_manager.py
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
import cv2
|
||||||
|
import time
|
||||||
|
import subprocess
|
||||||
|
import numpy as np
|
||||||
|
import face_recognition
|
||||||
|
import dlib
|
||||||
|
from imutils import face_utils
|
||||||
|
from config import THRESHOLD, COOLDOWN, CV_SCALER, LANDMARKS_PATH
|
||||||
|
from db_connector import log_recognition
|
||||||
|
|
||||||
|
|
||||||
|
latest_frame = None
|
||||||
|
last_trigger_time = 0
|
||||||
|
|
||||||
|
|
||||||
|
cap = cv2.VideoCapture(2)
|
||||||
|
if not cap.isOpened():
|
||||||
|
raise Exception("Error: Could not open camera.")
|
||||||
|
|
||||||
|
|
||||||
|
detector = dlib.get_frontal_face_detector()
|
||||||
|
predictor = dlib.shape_predictor(LANDMARKS_PATH)
|
||||||
|
|
||||||
|
def is_blinking(landmarks):
|
||||||
|
left_eye = landmarks[36:42]
|
||||||
|
right_eye = landmarks[42:48]
|
||||||
|
def eye_aspect_ratio(eye):
|
||||||
|
A = cv2.norm(eye[1] - eye[5])
|
||||||
|
B = cv2.norm(eye[2] - eye[4])
|
||||||
|
C = cv2.norm(eye[0] - eye[3])
|
||||||
|
return (A + B) / (2.0 * C)
|
||||||
|
left_eye_ratio = eye_aspect_ratio(left_eye)
|
||||||
|
right_eye_ratio = eye_aspect_ratio(right_eye)
|
||||||
|
ear = (left_eye_ratio + right_eye_ratio) / 2.0
|
||||||
|
return ear < 0.5
|
||||||
|
|
||||||
|
def camera_loop(known_face_encodings, known_face_names):
|
||||||
|
global latest_frame, last_trigger_time, cap
|
||||||
|
while True:
|
||||||
|
ret, frame = cap.read()
|
||||||
|
if not ret:
|
||||||
|
time.sleep(0.1)
|
||||||
|
continue
|
||||||
|
|
||||||
|
latest_frame = frame.copy()
|
||||||
|
|
||||||
|
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
||||||
|
faces = detector(gray_frame)
|
||||||
|
for face in faces:
|
||||||
|
landmarks = predictor(gray_frame, face)
|
||||||
|
landmarks = face_utils.shape_to_np(landmarks)
|
||||||
|
if is_blinking(landmarks):
|
||||||
|
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
||||||
|
face_encodings_found = face_recognition.face_encodings(
|
||||||
|
rgb_frame,
|
||||||
|
[(face.top(), face.right(), face.bottom(), face.left())],
|
||||||
|
model='large'
|
||||||
|
)
|
||||||
|
if face_encodings_found and known_face_encodings:
|
||||||
|
face_encoding = face_encodings_found[0]
|
||||||
|
matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
|
||||||
|
face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
|
||||||
|
if len(face_distances) > 0:
|
||||||
|
best_match_index = np.argmin(face_distances)
|
||||||
|
if face_distances[best_match_index] < THRESHOLD and matches[best_match_index]:
|
||||||
|
name = known_face_names[best_match_index]
|
||||||
|
current_time = time.time()
|
||||||
|
if current_time - last_trigger_time >= COOLDOWN:
|
||||||
|
print(f"[CAMERA] Detected: {name}")
|
||||||
|
log_recognition(name)
|
||||||
|
subprocess.run(["python3", "open_door.py"], check=True)
|
||||||
|
last_trigger_time = current_time
|
||||||
|
flush_camera(cap, flush_time=2.0)
|
||||||
|
break
|
||||||
|
time.sleep(0.1)
|
||||||
|
|
||||||
|
def flush_camera(cap, flush_time=2.0):
|
||||||
|
start = time.time()
|
||||||
|
while time.time() - start < flush_time:
|
||||||
|
cap.grab()
|
||||||
|
time.sleep(0.05)
|
17
src/config.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import os
|
||||||
|
from cryptography.fernet import Fernet
|
||||||
|
|
||||||
|
FLASK_SECRET_KEY = "your_secret_key_here"
|
||||||
|
|
||||||
|
if "ENCODINGS_KEY" not in os.environ:
|
||||||
|
raise Exception("Please set the ENCODINGS_KEY environment variable with your encryption key.")
|
||||||
|
ENCODINGS_KEY = os.environ["ENCODINGS_KEY"].encode()
|
||||||
|
fernet = Fernet(ENCODINGS_KEY)
|
||||||
|
|
||||||
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
ENCODINGS_PATH = os.path.join(SCRIPT_DIR, "encodings.pickle")
|
||||||
|
LANDMARKS_PATH = os.path.join(SCRIPT_DIR, "shape_predictor_68_face_landmarks.dat")
|
||||||
|
|
||||||
|
THRESHOLD = 0.4
|
||||||
|
COOLDOWN = 15
|
||||||
|
CV_SCALER = 4
|
BIN
src/datasets_web/dataset/dark_testing/Person_1/1-14.jpg
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_10/18-14.jpg
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_11/19-14.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_12/2-14.jpg
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_13/20-14.jpg
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_14/21-14.jpg
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_15/22-14.jpg
Normal file
After Width: | Height: | Size: 145 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_2/10-14.jpg
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_3/11-14.jpg
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_4/12-14.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_5/13-14.jpg
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_6/14-14.jpg
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_7/15-14.jpg
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_8/16-14.jpg
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
src/datasets_web/dataset/dark_testing/Person_9/17-14.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/learning/Person_1/1-01.jpg
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
src/datasets_web/dataset/learning/Person_1/1-02.jpg
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
src/datasets_web/dataset/learning/Person_1/1-03.jpg
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
src/datasets_web/dataset/learning/Person_1/1-04.jpg
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
src/datasets_web/dataset/learning/Person_1/1-05.jpg
Normal file
After Width: | Height: | Size: 127 KiB |
BIN
src/datasets_web/dataset/learning/Person_1/1-06.jpg
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
src/datasets_web/dataset/learning/Person_1/1-07.jpg
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
src/datasets_web/dataset/learning/Person_1/1-08.jpg
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
src/datasets_web/dataset/learning/Person_1/1-09.jpg
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
src/datasets_web/dataset/learning/Person_1/1-10.jpg
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
src/datasets_web/dataset/learning/Person_10/18-01.jpg
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
src/datasets_web/dataset/learning/Person_10/18-02.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/learning/Person_10/18-03.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/learning/Person_10/18-04.jpg
Normal file
After Width: | Height: | Size: 113 KiB |
BIN
src/datasets_web/dataset/learning/Person_10/18-05.jpg
Normal file
After Width: | Height: | Size: 113 KiB |
BIN
src/datasets_web/dataset/learning/Person_10/18-06.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/learning/Person_10/18-07.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/learning/Person_10/18-08.jpg
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
src/datasets_web/dataset/learning/Person_10/18-09.jpg
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
src/datasets_web/dataset/learning/Person_10/18-10.jpg
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
src/datasets_web/dataset/learning/Person_11/19-01.jpg
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
src/datasets_web/dataset/learning/Person_11/19-02.jpg
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
src/datasets_web/dataset/learning/Person_11/19-03.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/learning/Person_11/19-04.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/learning/Person_11/19-05.jpg
Normal file
After Width: | Height: | Size: 113 KiB |
BIN
src/datasets_web/dataset/learning/Person_11/19-06.jpg
Normal file
After Width: | Height: | Size: 157 KiB |
BIN
src/datasets_web/dataset/learning/Person_11/19-07.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/learning/Person_11/19-08.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
src/datasets_web/dataset/learning/Person_11/19-09.jpg
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
src/datasets_web/dataset/learning/Person_11/19-10.jpg
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
src/datasets_web/dataset/learning/Person_12/2-01.jpg
Normal file
After Width: | Height: | Size: 139 KiB |
BIN
src/datasets_web/dataset/learning/Person_12/2-02.jpg
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
src/datasets_web/dataset/learning/Person_12/2-03.jpg
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
src/datasets_web/dataset/learning/Person_12/2-04.jpg
Normal file
After Width: | Height: | Size: 139 KiB |
BIN
src/datasets_web/dataset/learning/Person_12/2-05.jpg
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
src/datasets_web/dataset/learning/Person_12/2-06.jpg
Normal file
After Width: | Height: | Size: 139 KiB |
BIN
src/datasets_web/dataset/learning/Person_12/2-07.jpg
Normal file
After Width: | Height: | Size: 137 KiB |
BIN
src/datasets_web/dataset/learning/Person_12/2-08.jpg
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
src/datasets_web/dataset/learning/Person_12/2-09.jpg
Normal file
After Width: | Height: | Size: 139 KiB |
BIN
src/datasets_web/dataset/learning/Person_12/2-10.jpg
Normal file
After Width: | Height: | Size: 142 KiB |
BIN
src/datasets_web/dataset/learning/Person_13/20-01.jpg
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
src/datasets_web/dataset/learning/Person_13/20-02.jpg
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
src/datasets_web/dataset/learning/Person_13/20-03.jpg
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
src/datasets_web/dataset/learning/Person_13/20-04.jpg
Normal file
After Width: | Height: | Size: 107 KiB |
BIN
src/datasets_web/dataset/learning/Person_13/20-05.jpg
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
src/datasets_web/dataset/learning/Person_13/20-06.jpg
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
src/datasets_web/dataset/learning/Person_13/20-07.jpg
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
src/datasets_web/dataset/learning/Person_13/20-08.jpg
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
src/datasets_web/dataset/learning/Person_13/20-09.jpg
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
src/datasets_web/dataset/learning/Person_13/20-10.jpg
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
src/datasets_web/dataset/learning/Person_14/21-01.jpg
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
src/datasets_web/dataset/learning/Person_14/21-02.jpg
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
src/datasets_web/dataset/learning/Person_14/21-03.jpg
Normal file
After Width: | Height: | Size: 137 KiB |
BIN
src/datasets_web/dataset/learning/Person_14/21-04.jpg
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
src/datasets_web/dataset/learning/Person_14/21-05.jpg
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
src/datasets_web/dataset/learning/Person_14/21-06.jpg
Normal file
After Width: | Height: | Size: 135 KiB |
BIN
src/datasets_web/dataset/learning/Person_14/21-07.jpg
Normal file
After Width: | Height: | Size: 135 KiB |
BIN
src/datasets_web/dataset/learning/Person_14/21-08.jpg
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
src/datasets_web/dataset/learning/Person_14/21-09.jpg
Normal file
After Width: | Height: | Size: 127 KiB |
BIN
src/datasets_web/dataset/learning/Person_14/21-10.jpg
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
src/datasets_web/dataset/learning/Person_15/22-01.jpg
Normal file
After Width: | Height: | Size: 121 KiB |
BIN
src/datasets_web/dataset/learning/Person_15/22-02.jpg
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
src/datasets_web/dataset/learning/Person_15/22-03.jpg
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
src/datasets_web/dataset/learning/Person_15/22-04.jpg
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
src/datasets_web/dataset/learning/Person_15/22-05.jpg
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
src/datasets_web/dataset/learning/Person_15/22-06.jpg
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
src/datasets_web/dataset/learning/Person_15/22-07.jpg
Normal file
After Width: | Height: | Size: 133 KiB |
BIN
src/datasets_web/dataset/learning/Person_15/22-08.jpg
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
src/datasets_web/dataset/learning/Person_15/22-09.jpg
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
src/datasets_web/dataset/learning/Person_15/22-10.jpg
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
src/datasets_web/dataset/learning/Person_2/10-01.jpg
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
src/datasets_web/dataset/learning/Person_2/10-02.jpg
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
src/datasets_web/dataset/learning/Person_2/10-03.jpg
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
src/datasets_web/dataset/learning/Person_2/10-04.jpg
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
src/datasets_web/dataset/learning/Person_2/10-05.jpg
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
src/datasets_web/dataset/learning/Person_2/10-06.jpg
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
src/datasets_web/dataset/learning/Person_2/10-07.jpg
Normal file
After Width: | Height: | Size: 119 KiB |