diff --git a/attendence.py b/attendence.py deleted file mode 100644 index 97d3c2c..0000000 --- a/attendence.py +++ /dev/null @@ -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)