Delete 'attendence.py'
This commit is contained in:
-547
@@ -1,547 +0,0 @@
|
|||||||
from flask import Flask, render_template, request, redirect, Response, send_file
|
|
||||||
import multiprocessing
|
|
||||||
import face_recognition
|
|
||||||
#from numba import jit
|
|
||||||
import numpy as np
|
|
||||||
import os
|
|
||||||
#from flask_cors import CORS
|
|
||||||
app = Flask(__name__)
|
|
||||||
#CORS(app)
|
|
||||||
lst = []
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/', methods=['GET'])
|
|
||||||
def resume():
|
|
||||||
#return render_template('index.html')
|
|
||||||
return 'Attendence app running'
|
|
||||||
|
|
||||||
def createEncodings(image):
|
|
||||||
print("Encoding")
|
|
||||||
"""
|
|
||||||
Create face encodings for a given image and also return face locations in the given image.
|
|
||||||
Parameters
|
|
||||||
-------
|
|
||||||
image : cv2 mat
|
|
||||||
Image you want to detect faces from.
|
|
||||||
Returns
|
|
||||||
-------
|
|
||||||
known_encodings : list of np array
|
|
||||||
List of face encodings in a given image
|
|
||||||
face_locations : list of tuples
|
|
||||||
list of tuples for face locations in a given image
|
|
||||||
"""
|
|
||||||
# Find face locations for all faces in an image
|
|
||||||
face_locations = face_recognition.face_locations(image)
|
|
||||||
# Create encodings for all faces in an image
|
|
||||||
known_encodings = face_recognition.face_encodings(image, known_face_locations=face_locations)
|
|
||||||
return known_encodings, face_locations
|
|
||||||
#@app.route('/registered', methods=["POST","GET"])
|
|
||||||
def registered(url_list):
|
|
||||||
input=url_list
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
Path("ppeople").mkdir(exist_ok=True)
|
|
||||||
Path("ppeople/" + input["FileName"]).mkdir(exist_ok=True)
|
|
||||||
|
|
||||||
a = input
|
|
||||||
# print(a)
|
|
||||||
x = a['FileData']
|
|
||||||
# print(x)
|
|
||||||
y = a['FileName']
|
|
||||||
#z = a['FileType']
|
|
||||||
z='jpg'
|
|
||||||
# CreatedBy=a['CreatedBy']
|
|
||||||
|
|
||||||
name = y+ '.'+ z
|
|
||||||
print(name)
|
|
||||||
# print(y)
|
|
||||||
# image = y.split("/")
|
|
||||||
# filename=image[-1]
|
|
||||||
|
|
||||||
# print(x)
|
|
||||||
img_data = x.encode()
|
|
||||||
|
|
||||||
import base64
|
|
||||||
|
|
||||||
with open("ppeople/" + input["FileName"] + "/" + name, "wb") as fh:
|
|
||||||
fh.write(base64.decodebytes(img_data))
|
|
||||||
|
|
||||||
img = "ppeople/" + y + "/" + name
|
|
||||||
saveLocation = "ppeople/" + y + "/" + y + ".pickle"
|
|
||||||
|
|
||||||
############ detecting no of faceses #######################
|
|
||||||
|
|
||||||
|
|
||||||
# import cv2
|
|
||||||
# import numpy as np
|
|
||||||
# import dlib
|
|
||||||
|
|
||||||
|
|
||||||
# # Connects to your computer's default camera
|
|
||||||
# cap = cv2.imread(img)
|
|
||||||
|
|
||||||
# # Detect the coordinates
|
|
||||||
# detector = dlib.get_frontal_face_detector()
|
|
||||||
|
|
||||||
# number_of_faces=[]
|
|
||||||
# # Capture frames continuously
|
|
||||||
# # while True:
|
|
||||||
|
|
||||||
# # Capture frame-by-frame
|
|
||||||
# # ret, frame = cap
|
|
||||||
# frame = cap
|
|
||||||
|
|
||||||
# # RGB to grayscale
|
|
||||||
# gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
|
||||||
# faces = detector(gray)
|
|
||||||
|
|
||||||
# # Iterator to count faces
|
|
||||||
# i = 0
|
|
||||||
# for face in faces:
|
|
||||||
|
|
||||||
# # Get the coordinates of faces
|
|
||||||
# x, y = face.left(), face.top()
|
|
||||||
# x1, y1 = face.right(), face.bottom()
|
|
||||||
# cv2.rectangle(frame, (x, y), (x1, y1), (0, 255, 0), 2)
|
|
||||||
# # Increment iterator for each face in faces
|
|
||||||
# i = i+1
|
|
||||||
|
|
||||||
# # Display the box and faces
|
|
||||||
# cv2.putText(frame, 'face num'+str(i), (x-10, y-10),
|
|
||||||
# cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
|
|
||||||
|
|
||||||
# # if len(i)>1:
|
|
||||||
# # print(i)
|
|
||||||
# number_of_faces.append(i)
|
|
||||||
|
|
||||||
|
|
||||||
# if (len(number_of_faces))>1:
|
|
||||||
# print("Group Photo")
|
|
||||||
# return "Group Photo"
|
|
||||||
# elif (len(number_of_faces))==1:
|
|
||||||
# print("Single Photo")
|
|
||||||
# pass
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def saveEncodings(encs, names, fname='encodings.pickle'):
|
|
||||||
"""
|
|
||||||
Save encodings in a pickle file to be used in future.
|
|
||||||
|
|
||||||
Parameters
|
|
||||||
----------
|
|
||||||
encs : List of np arrays
|
|
||||||
List of face encodings.
|
|
||||||
names : List of strings
|
|
||||||
List of names for each face encoding.
|
|
||||||
fname : String, optional
|
|
||||||
Name/Location for pickle file. The default is "encodings.pickle".
|
|
||||||
|
|
||||||
Returns
|
|
||||||
-------
|
|
||||||
None.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
data = []
|
|
||||||
d = [{"name": nm, "encoding": enc} for (nm, enc) in zip(names, encs)]
|
|
||||||
data.extend(d)
|
|
||||||
|
|
||||||
encodingsFile = fname
|
|
||||||
|
|
||||||
# dump the facial encodings data to disk
|
|
||||||
print("[INFO] serializing encodings...")
|
|
||||||
print("[INFO] Encodings Created sucessfully")
|
|
||||||
f = open(encodingsFile, "wb")
|
|
||||||
f.write(pickle.dumps(data))
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
# Function to create encodings and get face locations
|
|
||||||
|
|
||||||
|
|
||||||
def processKnownPeopleImages(img=img, saveLocation=saveLocation):
|
|
||||||
"""
|
|
||||||
Process images of known people and create face encodings to compare in future.
|
|
||||||
Eaach image should have just 1 face in it.
|
|
||||||
Parameters
|
|
||||||
----------
|
|
||||||
path : STRING, optional
|
|
||||||
Path for known people dataset. The default is "C:/inetpub/vhosts/port82/wwwroot/_files/People".
|
|
||||||
It should be noted that each image in this dataset should contain only 1 face.
|
|
||||||
saveLocation : STRING, optional
|
|
||||||
Path for storing encodings for known people dataset. The default is "./known_encodings.pickle in current directory".
|
|
||||||
Returns
|
|
||||||
-------
|
|
||||||
None.
|
|
||||||
"""
|
|
||||||
known_encodings = []
|
|
||||||
known_names = []
|
|
||||||
# for img in os.listdir(path):
|
|
||||||
|
|
||||||
imgPath = img
|
|
||||||
# Read image
|
|
||||||
image = cv2.imread(imgPath)
|
|
||||||
name = img.rsplit('.')[0]
|
|
||||||
# Resize
|
|
||||||
try:
|
|
||||||
print(image.shape)
|
|
||||||
except AttributeError:
|
|
||||||
return "Successfully saved encoding........."
|
|
||||||
image = cv2.resize(image, (0, 0), fx=0.9, fy=0.9, interpolation=cv2.INTER_LINEAR)
|
|
||||||
# Get locations and encodings
|
|
||||||
encs, locs = createEncodings(image)
|
|
||||||
try:
|
|
||||||
known_encodings.append(encs[0])
|
|
||||||
except IndexError:
|
|
||||||
os.remove(saveLocation)
|
|
||||||
print('------------------------------------- save location --------------------------------')
|
|
||||||
print(saveLocation)
|
|
||||||
return "hello world!"
|
|
||||||
|
|
||||||
|
|
||||||
# known_encodings.append(encs[0])
|
|
||||||
known_names.append(name)
|
|
||||||
for loc in locs:
|
|
||||||
top, right, bottom, left = loc
|
|
||||||
# Show Image
|
|
||||||
# cv2.rectangle(image, (left, top), (right, bottom), color=(255, 0, 0), thickness=2)
|
|
||||||
# cv2.imshow("Image", image)
|
|
||||||
# cv2.waitKey(1)
|
|
||||||
# cv2.destroyAllWindows()
|
|
||||||
saveEncodings(known_encodings, known_names, saveLocation)
|
|
||||||
|
|
||||||
import cv2
|
|
||||||
#import face_recognition
|
|
||||||
import pickle
|
|
||||||
|
|
||||||
processKnownPeopleImages(img, saveLocation)
|
|
||||||
return 'Successfully saved encoding.........'
|
|
||||||
|
|
||||||
|
|
||||||
# ******************************** COMPARUISION *********************************************************
|
|
||||||
#@app.route('/submit', methods=["POST","GET"])
|
|
||||||
def submit(url_list):
|
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
import pytz
|
|
||||||
tz_NY = pytz.timezone('Asia/Kolkata')
|
|
||||||
datetime_NY = datetime.now(tz_NY)
|
|
||||||
India_Date = (datetime_NY.strftime("%Y-%m-%d"))
|
|
||||||
India_Date = str(India_Date)
|
|
||||||
# India_Time = (datetime_NY.strftime("%I:%M:%S %p"))
|
|
||||||
# India_Time = str(India_Time)
|
|
||||||
input=url_list
|
|
||||||
import pickle
|
|
||||||
import cv2
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
Path("GGallery/"+ India_Date).mkdir(exist_ok=True)
|
|
||||||
Path("GGallery/"+ India_Date +'/'+ input["FileName"]).mkdir(exist_ok=True)
|
|
||||||
|
|
||||||
a = input
|
|
||||||
# print(a)
|
|
||||||
x = a['FileData']
|
|
||||||
# print(x)
|
|
||||||
y = a['FileName']
|
|
||||||
# z = a['FileType']
|
|
||||||
z='jpg'
|
|
||||||
# CreatedBy=a['CreatedBy']
|
|
||||||
|
|
||||||
name = y + '.' + z
|
|
||||||
# print(name)
|
|
||||||
# print(y)
|
|
||||||
# image = y.split("/")
|
|
||||||
# filename=image[-1]
|
|
||||||
|
|
||||||
# print(x)
|
|
||||||
img_data = x.encode()
|
|
||||||
|
|
||||||
import base64
|
|
||||||
|
|
||||||
|
|
||||||
with open("GGallery/"+India_Date+'/' + input["FileName"] + "/" + name, "wb") as fh:
|
|
||||||
fh.write(base64.decodebytes(img_data))
|
|
||||||
|
|
||||||
path = "GGallery/" +India_Date+'/'+ y + "/" + name
|
|
||||||
pickle_location = "ppeople/" + y + "/" + y + ".pickle"
|
|
||||||
import pathlib
|
|
||||||
file = pathlib.Path(pickle_location)
|
|
||||||
if file.exists ():
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
print ("pickle File not exist")
|
|
||||||
print(name)
|
|
||||||
return "Face not found in profile (please change your profile)"
|
|
||||||
|
|
||||||
check_faces="ppeople/" + y + "/" + y + ".jpg"
|
|
||||||
print(check_faces)
|
|
||||||
|
|
||||||
|
|
||||||
############ detecting no of faceses #######################
|
|
||||||
|
|
||||||
|
|
||||||
import cv2
|
|
||||||
import numpy as np
|
|
||||||
import dlib
|
|
||||||
|
|
||||||
|
|
||||||
# Connects to your computer's default camera
|
|
||||||
cap = cv2.imread(check_faces)
|
|
||||||
|
|
||||||
# Detect the coordinates
|
|
||||||
detector = dlib.get_frontal_face_detector()
|
|
||||||
|
|
||||||
number_of_faces=[]
|
|
||||||
# Capture frames continuously
|
|
||||||
# while True:
|
|
||||||
|
|
||||||
# Capture frame-by-frame
|
|
||||||
# ret, frame = cap
|
|
||||||
frame = cap
|
|
||||||
|
|
||||||
# RGB to grayscale
|
|
||||||
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
|
||||||
faces = detector(gray)
|
|
||||||
|
|
||||||
# Iterator to count faces
|
|
||||||
i = 0
|
|
||||||
for face in faces:
|
|
||||||
|
|
||||||
# Get the coordinates of faces
|
|
||||||
x, y = face.left(), face.top()
|
|
||||||
x1, y1 = face.right(), face.bottom()
|
|
||||||
cv2.rectangle(frame, (x, y), (x1, y1), (0, 255, 0), 2)
|
|
||||||
# Increment iterator for each face in faces
|
|
||||||
i = i+1
|
|
||||||
|
|
||||||
# Display the box and faces
|
|
||||||
cv2.putText(frame, 'face num'+str(i), (x-10, y-10),
|
|
||||||
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
|
|
||||||
|
|
||||||
# if len(i)>1:
|
|
||||||
# print(i)
|
|
||||||
number_of_faces.append(i)
|
|
||||||
|
|
||||||
|
|
||||||
if (len(number_of_faces))>1:
|
|
||||||
print("Group Photo")
|
|
||||||
return "Group Photo"
|
|
||||||
elif (len(number_of_faces))==1:
|
|
||||||
print("Single Photo")
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def readEncodingsPickle(fname):
|
|
||||||
"""
|
|
||||||
Read Pickle file.
|
|
||||||
|
|
||||||
Parameters
|
|
||||||
----------
|
|
||||||
fname : String
|
|
||||||
Name of pickle file.(Full location)
|
|
||||||
|
|
||||||
Returns
|
|
||||||
-------
|
|
||||||
encodings : list of np arrays
|
|
||||||
list of all saved encodings
|
|
||||||
names : List of Strings
|
|
||||||
List of all saved names
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
data = pickle.loads(open(fname, "rb").read())
|
|
||||||
|
|
||||||
|
|
||||||
data = np.array(data)
|
|
||||||
encodings = [d["encoding"] for d in data]
|
|
||||||
names = [d["name"] for d in data]
|
|
||||||
return encodings, names
|
|
||||||
|
|
||||||
|
|
||||||
def compareFaceEncodings(unknown_encoding, known_encodings, known_names):
|
|
||||||
"""
|
|
||||||
Compares face encodings to check if 2 faces are same or not.
|
|
||||||
|
|
||||||
Parameters
|
|
||||||
----------
|
|
||||||
unknown_encoding : np array
|
|
||||||
Face encoding of unknown people.
|
|
||||||
known_encodings : np array
|
|
||||||
Face encodings of known people.
|
|
||||||
known_names : list of strings
|
|
||||||
Names of known people
|
|
||||||
|
|
||||||
Returns
|
|
||||||
-------
|
|
||||||
acceptBool : Bool
|
|
||||||
face matched or not
|
|
||||||
duplicateName : String
|
|
||||||
Name of matched face
|
|
||||||
distance : Float
|
|
||||||
Distance between 2 faces
|
|
||||||
|
|
||||||
"""
|
|
||||||
duplicateName = ""
|
|
||||||
distance = 0.0
|
|
||||||
matches = face_recognition.compare_faces(known_encodings, unknown_encoding, tolerance=0.54)
|
|
||||||
face_distances = face_recognition.face_distance(known_encodings, unknown_encoding)
|
|
||||||
|
|
||||||
best_match_index = np.argmin(face_distances)
|
|
||||||
|
|
||||||
distance = face_distances[best_match_index]
|
|
||||||
if matches[best_match_index]:
|
|
||||||
acceptBool = True
|
|
||||||
duplicateName = known_names[best_match_index]
|
|
||||||
else:
|
|
||||||
acceptBool = False
|
|
||||||
duplicateName = ""
|
|
||||||
return acceptBool, duplicateName, distance
|
|
||||||
|
|
||||||
#p = []
|
|
||||||
|
|
||||||
|
|
||||||
def processDatasetImages(path=path, pickle_location=pickle_location):
|
|
||||||
"""
|
|
||||||
Process image in dataset from where you want to separate images.
|
|
||||||
It separates the images into directories of known people, groups and any unknown people images.
|
|
||||||
Parameters
|
|
||||||
----------
|
|
||||||
path : STRING, optional
|
|
||||||
Path for known people dataset. The default is "D:/port1004/port1004/wwwroot/_files/People".
|
|
||||||
It should be noted that each image in this dataset should contain only 1 face.
|
|
||||||
saveLocation : STRING, optional
|
|
||||||
Path for storing encodings for known people dataset. The default is "./known_encodings.pickle in current directory".
|
|
||||||
|
|
||||||
Returns
|
|
||||||
-------
|
|
||||||
None.
|
|
||||||
|
|
||||||
"""
|
|
||||||
# Read pickle file for known people to compare faces from
|
|
||||||
|
|
||||||
people_encodings, names = readEncodingsPickle(pickle_location)
|
|
||||||
# print(p)
|
|
||||||
# imgPath = path + img
|
|
||||||
|
|
||||||
# Read image
|
|
||||||
# path=r"C:\Users\katku\Pictures\final\100011460000611.jpg"
|
|
||||||
image = cv2.imread(path)
|
|
||||||
#orig = image.copy()
|
|
||||||
|
|
||||||
# Resize
|
|
||||||
image = cv2.resize(image, (0, 0), fx=0.9, fy=0.9, interpolation=cv2.INTER_LINEAR)
|
|
||||||
|
|
||||||
# Get locations and encodings
|
|
||||||
encs, locs = createEncodings(image)
|
|
||||||
|
|
||||||
# Save image to a group image folder if more than one face is in image
|
|
||||||
# if len(locs) > 1:
|
|
||||||
# saveImageToDirectory(orig, "Group", img)
|
|
||||||
|
|
||||||
# Processing image for each face
|
|
||||||
i = 0
|
|
||||||
knownFlag = 0
|
|
||||||
for loc in locs:
|
|
||||||
top, right, bottom, left = loc
|
|
||||||
unknown_encoding = encs[i]
|
|
||||||
i += 1
|
|
||||||
acceptBool, duplicateName, distance = compareFaceEncodings(unknown_encoding, people_encodings, names)
|
|
||||||
if acceptBool:
|
|
||||||
# saveImageToDirectory(orig, duplicateName,name)
|
|
||||||
knownFlag = 1
|
|
||||||
if knownFlag == 1:
|
|
||||||
print("Match Found")
|
|
||||||
|
|
||||||
|
|
||||||
#print(path)
|
|
||||||
with_extension = path.split("/")[-1]
|
|
||||||
without_extension = with_extension.split(".")[0]
|
|
||||||
|
|
||||||
# output_s = {"FileID": without_extension,
|
|
||||||
# "Date": India_Date,
|
|
||||||
# "Time": India_Time}
|
|
||||||
# output_json = json.dumps(output_s)
|
|
||||||
output_json='Matched successfully'
|
|
||||||
print(loc)
|
|
||||||
lst.append(output_json)
|
|
||||||
|
|
||||||
print(output_json)
|
|
||||||
# exit()
|
|
||||||
|
|
||||||
else:
|
|
||||||
print('Not Matched')
|
|
||||||
pass
|
|
||||||
# saveImageToDirectory(orig, "0",name)
|
|
||||||
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
import json
|
|
||||||
|
|
||||||
processDatasetImages(path, pickle_location)
|
|
||||||
return lst[0]
|
|
||||||
#return 'matched successfully'
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/detect', methods=["POST"])
|
|
||||||
def detect():
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
|
||||||
url_list=[]
|
|
||||||
Dataset= request.get_json()
|
|
||||||
# id = "100013660000125"
|
|
||||||
url_list.append(Dataset)
|
|
||||||
# multiprocessing
|
|
||||||
pool_size = multiprocessing.cpu_count() * 2
|
|
||||||
with multiprocessing.Pool(pool_size) as pool:
|
|
||||||
try:
|
|
||||||
results = pool.map(submit, url_list)
|
|
||||||
except FileNotFoundError:
|
|
||||||
return 'plese get registered with your PhotoID'
|
|
||||||
except IndexError:
|
|
||||||
#return 'unable to recognize face'
|
|
||||||
return 'failed'
|
|
||||||
|
|
||||||
pool.close()
|
|
||||||
|
|
||||||
return results[0]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/register', methods=["POST"])
|
|
||||||
def register():
|
|
||||||
print("hello start..........")
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
|
||||||
url_list=[]
|
|
||||||
Dataset= request.get_json()
|
|
||||||
# id = "100013660000125"
|
|
||||||
url_list.append(Dataset)
|
|
||||||
# multiprocessing
|
|
||||||
pool_size = multiprocessing.cpu_count() * 2
|
|
||||||
with multiprocessing.Pool(pool_size) as pool:
|
|
||||||
try:
|
|
||||||
results = pool.map(registered, url_list)
|
|
||||||
except IndexError:
|
|
||||||
pass
|
|
||||||
print('face not found')
|
|
||||||
except FileNotFoundError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
#os.remove(img)
|
|
||||||
# return 'unable to recognize face'
|
|
||||||
|
|
||||||
pool.close()
|
|
||||||
#return results[0]
|
|
||||||
return 'Successfully saved encoding.........'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
app.run(host='0.0.0.0',port =5003,debug=False)
|
|
||||||
Reference in New Issue
Block a user