add app files
This commit is contained in:
117
notebooks/app/PredictServer.py
Normal file
117
notebooks/app/PredictServer.py
Normal file
@@ -0,0 +1,117 @@
|
||||
import pickle
|
||||
import customtkinter as ctk
|
||||
import os
|
||||
import cv2
|
||||
from PIL import Image, ImageTk
|
||||
from deepface import DeepFace
|
||||
from mtcnn import MTCNN
|
||||
from catboost import CatBoostClassifier
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
|
||||
class Server(ctk.CTkFrame):
|
||||
def __init__(self, master):
|
||||
super().__init__(master)
|
||||
self.counter = 0
|
||||
self.storage_name: str
|
||||
self.grid_columnconfigure(0, weight=1)
|
||||
self.detector = MTCNN()
|
||||
import socket
|
||||
self.s = socket.socket()
|
||||
host = "192.168.120.240"
|
||||
port = 12345
|
||||
self.s.bind((host, port))
|
||||
self.s.listen(5)
|
||||
self.catboost_model_usa = CatBoostClassifier()
|
||||
self.catboost_model_usa.load_model("../catboost_usa.cbm")
|
||||
with open('../model/saved_dictionary.pkl', 'rb') as f:
|
||||
self.name_usa = pickle.load(f)
|
||||
# self.grid_rowconfigure(0, weight=1)
|
||||
self.label = ctk.CTkLabel(self, text="Server", fg_color="blue", text_color="white")
|
||||
self.label.grid(row=0, column=0, sticky="ew")
|
||||
self.button_start_predict = ctk.CTkButton(self, text="Get photo from server", command=self.__start_predict)
|
||||
self.button_start_predict.grid(row=1, column=0, pady=10, sticky="ew")
|
||||
|
||||
|
||||
def __open_file_dialog(self):
|
||||
root = ctk.CTk()
|
||||
root.withdraw()
|
||||
file_path = ctk.filedialog.askdirectory(title='Choose image dataset')
|
||||
if file_path != '':
|
||||
root.destroy()
|
||||
self.storage_name = file_path
|
||||
self.iterator = iter(os.listdir(self.storage_name))
|
||||
return file_path
|
||||
def __start_predict(self):
|
||||
while True:
|
||||
c = 0
|
||||
con, addr = self.s.accept()
|
||||
with open('FDJ.jpg', 'wb') as f:
|
||||
while True:
|
||||
c+=1
|
||||
print(1)
|
||||
data = con.recv(65536)
|
||||
if c >= 3:
|
||||
f.write(data)
|
||||
break
|
||||
if not data:
|
||||
f.write(data)
|
||||
break
|
||||
break
|
||||
#break
|
||||
|
||||
f.write(data)
|
||||
|
||||
break
|
||||
|
||||
#break
|
||||
|
||||
print("break")
|
||||
break
|
||||
if self.counter > 0:
|
||||
self.label.destroy()
|
||||
self.counter+=1
|
||||
filename = 'FDJ.jpg'
|
||||
dicter3 = {}
|
||||
if filename.endswith("png") or filename.endswith("jpg"):
|
||||
print(filename)
|
||||
img = cv2.cvtColor(cv2.imread(filename), cv2.COLOR_BGR2RGB)
|
||||
img = cv2.resize(img, (1080, 720))
|
||||
detections = self.detector.detect_faces(img)
|
||||
if len(detections) > 1:
|
||||
print("AAAAAAAAA")
|
||||
for detection in detections:
|
||||
confidence = detection["confidence"]#
|
||||
if confidence > 0.9:
|
||||
x, y, w, h = detection["box"]
|
||||
detected_face = img[int(y):int(y + h), int(x):int(x + w)]##
|
||||
image = cv2.rectangle(img, (int(x), int(y)), (int(x+w), int(y+h)), (255, 0, 0), 2)
|
||||
embedding = DeepFace.represent(detected_face, model_name='Facenet', enforce_detection=False)
|
||||
ebd = embedding[0]["embedding"]
|
||||
dicter3[1] = ebd
|
||||
data_usa = pd.DataFrame.from_dict(dicter3.items())
|
||||
data_usa.rename(columns={0: "id", 1: "embd"}, inplace=True, errors="ignore")
|
||||
new_cols = pd.DataFrame(data_usa['embd'].apply(pd.Series))
|
||||
df_usa = pd.concat([data_usa, new_cols], axis=1)
|
||||
df_usa.drop(["embd"], axis=1, inplace=True, errors="ignore")
|
||||
#df_usa["id"] = df_usa["id"].apply(lambda x: str(x)[:str(x).find("_")])
|
||||
y, X = df_usa["id"], df_usa.drop(["id"], axis=1)
|
||||
result = self.catboost_model_usa.predict(X)
|
||||
index_usa = result[0][0]
|
||||
print(result)
|
||||
string = self.name_usa[result[0][0]]
|
||||
encoded_string = string.encode('utf-8') # Кодируем строку в UTF-8
|
||||
binary_representation = ''.join(format(byte, '08b') for byte in encoded_string)
|
||||
con.send(binary_representation.encode('utf-8'))
|
||||
con.close()
|
||||
print(self.name_usa[result[0][0]])
|
||||
for images in os.listdir(f'C://Users//fatik//PycharmProjects//UfaHack2024//data//actors_usa//{index_usa}'):
|
||||
image_usa = cv2.imread(os.path.join(f'C://Users//fatik//PycharmProjects//UfaHack2024//data//actors_usa//{index_usa}', images))
|
||||
break
|
||||
image[0:128, 0:128] = cv2.resize(cv2.cvtColor(image_usa, cv2.COLOR_BGR2RGB), (128,128))
|
||||
#print(np.argmax(result[0], axis=0))
|
||||
#print(len(result[0]))
|
||||
self.image = Image.fromarray(image)
|
||||
self.image_tk = ctk.CTkImage(self.image, size=(self.image.width, self.image.height))
|
||||
self.label = ctk.CTkLabel(self, image=self.image_tk, text=self.name_usa[result[0][0]], text_color="red")
|
||||
self.label.grid(row=3, column=0, pady=10, sticky="ew")
|
||||
Reference in New Issue
Block a user