from tkinter import messagebox
from tkinter import *
from tkinter import simpledialog
import tkinter
import [Link] as plt
import numpy as np
from tkinter import simpledialog
from tkinter import filedialog
import os
import cv2
from sklearn.model_selection import train_test_split
from [Link] import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from [Link] import accuracy_score
from [Link] import StandardScaler
from sklearn.naive_bayes import GaussianNB
from [Link] import confusion_matrix
from [Link] import precision_score
from [Link] import recall_score
from [Link] import f1_score
import seaborn as sns
import pandas as pd
main = [Link]()
[Link]("Prediction of Identical Twins using ML") #designing main screen
[Link]("1300x1200")
global filename
global X, Y
global X_train, X_test, y_train, y_test
global accuracy, precision, recall, fscore, labels, rf
global scaler
labels = ['Real', 'Twins']
def getID(name):
index = 0
for i in range(len(labels)):
if labels[i] == name:
index = i
break
return index
def uploadDataset():
global filename
global X, Y
filename = [Link](initialdir=".")
[Link]('1.0', END)
[Link](END,filename+" loaded\n")
if [Link]("model/[Link]"):
X = [Link]('model/[Link]')
Y = [Link]('model/[Link]')
else:
for root, dirs, directory in [Link](filename):
for j in range(len(directory)):
name = [Link](root)
if '[Link]' not in directory[j]:
img = [Link](root+"/"+directory[j])
bilateral_filter = [Link](img,15,80,80)
bilateral_filter = [Link](bilateral_filter,
cv2.COLOR_BGR2GRAY)
clahe = [Link](clipLimit = 2, tileGridSize = (8, 8))
bilateral_filter = [Link](bilateral_filter)
detected_image = [Link](bilateral_filter,50,150)
img = [Link](detected_image, (32, 32))
[Link]([Link]())
label = getID(name)
[Link](label)
X = [Link](X)
Y = [Link](Y)
[Link]('model/[Link]',X)
[Link]('model/[Link]',Y)
[Link](END,"Labels in Dataset : "+str(labels)+"\n")
[Link](END,"Total Real & Twins Images found in dataset :
"+str([Link][0]))
def DatasetPreprocessing():
[Link]('1.0', END)
global X, Y
global X_train, X_test, y_train, y_test, scaler
X = [Link]('float32')
scaler = StandardScaler()
X = scaler.fit_transform(X)
indices = [Link]([Link][0])
[Link](indices)
X = X[indices]
Y = Y[indices]
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.5) #split
dataset into train and test
[Link](END,"Dataset Normalization & Preprocessing Task Completed\n\n")
[Link](END,"Dataset Train & Test Splits\n")
[Link](END,"Total images found in dataset : "+str([Link][0])+"\n")
[Link](END,"80% dataset used for training : "+str(X_train.shape[0])+"\n")
[Link](END,"20% dataset user for testing : "+str(X_test.shape[0])+"\n")
def calculateMetrics(algorithm, testY, predict):
global labels
p = precision_score(testY, predict,average='macro') * 100
r = recall_score(testY, predict,average='macro') * 100
f = f1_score(testY, predict,average='macro') * 100
a = accuracy_score(testY,predict)*100
[Link](a)
[Link](p)
[Link](r)
[Link](f)
[Link](END,algorithm+" Accuracy : "+str(a)+"\n")
[Link](END,algorithm+" Precision : "+str(p)+"\n")
[Link](END,algorithm+" Recall : "+str(r)+"\n")
[Link](END,algorithm+" FSCORE : "+str(f)+"\n\n")
conf_matrix = confusion_matrix(testY, predict)
ax = [Link](conf_matrix, xticklabels = labels, yticklabels = labels, annot
= True, cmap="viridis" ,fmt ="g");
ax.set_ylim([0,len(labels)])
[Link](algorithm+" Confusion matrix")
[Link]('True class')
[Link]('Predicted class')
[Link]()
def runNaiveBayes():
[Link]('1.0', END)
global accuracy, precision, recall, fscore, cnn_model
global X_train, y_train, X_test, y_test
accuracy = []
precision = []
recall = []
fscore = []
nb = GaussianNB()
[Link](X_train, y_train)
predict = [Link](X_test)
calculateMetrics("Naive Bayes", y_test, predict)
def runRandomForest():
global rf
global X_train, y_train, X_test, y_test
rf = RandomForestClassifier()
[Link](X_train, y_train)
predict = [Link](X_test)
calculateMetrics("Random Forest", y_test, predict)
def graph():
df = [Link]([['Naive Bayes','Accuracy',accuracy[0]],['Naive
Bayes','Precision',precision[0]],['Naive Bayes','Recall',recall[0]],['Naive
Bayes','FSCORE',fscore[0]],
['Random Forest','Accuracy',accuracy[1]],['Random
Forest','Precision',precision[1]],['Random Forest','Recall',recall[1]],['Random
Forest','FSCORE',fscore[1]],
],columns=['Algorithms','Accuracy','Value'])
[Link]("Algorithms", "Accuracy", "Value").plot(kind='bar')
[Link]("All Algorithm Comparison Graph")
[Link]()
def predict():
global rf, scaler
filename = [Link](initialdir="testImages")
img = [Link](filename)
bilateral_filter = [Link](img,15,80,80)
bilateral_filter = [Link](bilateral_filter, cv2.COLOR_BGR2GRAY)
clahe = [Link](clipLimit = 2, tileGridSize = (8, 8))
bilateral_filter = [Link](bilateral_filter)
detected_image = [Link](bilateral_filter,50,150)
image = [Link](detected_image, (32, 32))
X = []
[Link]([Link]())
X = [Link](X)
X = [Link]('float32')
X = [Link](X)
predict = [Link](X)[0]
img = [Link](filename)
img = [Link](img, (700,400))
[Link](img, 'Predicted As : '+labels[predict], (10, 25),
cv2.FONT_HERSHEY_SIMPLEX,0.7, (0, 0, 255), 2)
[Link]('Predicted As : '+labels[predict], img)
[Link]("Detected Object", detected_image)
[Link](0)
font = ('times', 16, 'bold')
title = Label(main, text='Prediction of Identical Twins using ML')
[Link](bg='LightGoldenrod1', fg='medium orchid')
[Link](font=font)
[Link](height=3, width=120)
[Link](x=0,y=5)
font1 = ('times', 12, 'bold')
text=Text(main,height=22,width=140)
scroll=Scrollbar(text)
[Link](yscrollcommand=[Link])
[Link](x=10,y=200)
[Link](font=font1)
font1 = ('times', 12, 'bold')
uploadButton = Button(main, text="Upload Twins Dataset", command=uploadDataset)
[Link](x=50,y=100)
[Link](font=font1)
preButton = Button(main, text="Dataset Preprocessing",
command=DatasetPreprocessing)
[Link](x=300,y=100)
[Link](font=font1)
nbButton = Button(main, text="Run Naive Bayes Algorithm", command=runNaiveBayes)
[Link](x=510,y=100)
[Link](font=font1)
rfButton = Button(main, text="Run Random Forest Algorithm",
command=runRandomForest)
[Link](x=740,y=100)
[Link](font=font1)
graphButton = Button(main, text="Comparison Graph", command=graph)
[Link](x=50,y=150)
[Link](font=font1)
predictButton = Button(main, text="Twins or Real Face Prediction", command=predict)
[Link](x=300,y=150)
[Link](font=font1)
#[Link](bg='OliveDrab2')
[Link]()