class ORBDetector(Detector): def __init__(self): Detector.__init__(self) self.ORB = ORB_create() def __repr__(self): return "ORBDetector(ORB={ORB})".format(ORB=self.ORB) def detect(self, image): keypoints = self.ORB.detect(image.cv_image, None) keypoints, descriptors = self.ORB.compute(image.cv_image, keypoints) return keypoints, descriptors
class OrbFeature2D: def __init__(self, num_features=2000, scale_factor=1.2, num_levels=8): print('Using Orb Feature 2D') self.orb_extractor = ORB_create(num_features, scale_factor, num_levels) # extract keypoints def detect(self, img): # detect kps_tuples = self.orb_extractor.detect(img) # convert keypoints kps = [cv2.KeyPoint(*kp) for kp in kps_tuples] return kps def detectAndCompute(self, img): #detect and compute kps, des = self.orb_extractor.detectAndCompute(img, None) return kps, des
#frame = cv.resize(frame, (320, 480)) features = fast.detect(frame, None) #split channels Ch0 = frame[:,:, 0] Ch1 = frame[:,:, 1] Ch2 = frame[:,:, 2] if len(features) < 1: #average frames intCh0 = np.mean(Ch0) intCh1 = np.mean(Ch1) intCh2 = np.mean(Ch2) else: intCh0 = len(fast.detect(Ch0, None)) intCh1 = len(orb.detect(Ch1, None)) intCh2 = len(blob.detect(Ch2, None)) #initialise seed # R G B intSeed = int(intCh0) << 32 | int(intCh1) << 16 | int(intCh2) << 0 letter = 32 + ((intSeed%126) - 32) #print(letter) #add letter to array strPassword += str(chr(letter)) waitKey(1) arryPlotX[letter] += 1 arryFastStdDev[intCount] = intCh0
def FeatureCrypt(intLength=32, intCamLoc=0): #imports try: import numpy as np from datetime import datetime from cv2 import (FastFeatureDetector_create, ORB_create, SimpleBlobDetector_create, VideoCapture, waitKey, destroyAllWindows, CAP_DSHOW) except: print("Imports failed") #camera setup try: cam = VideoCapture(intCamLoc, CAP_DSHOW) except: cam = "Camera setup failed" intCount = 0 intPwdLength = intLength strPassword = "" fast = FastFeatureDetector_create() orb = ORB_create() blob = SimpleBlobDetector_create() print(datetime.now()) for intCount in range(0, intPwdLength): #collect frame ret, frame = cam.read() #frame = cv.resize(frame, (320, 480)) features = fast.detect(frame, None) #split channels Ch0 = frame[:, :, 0] Ch1 = frame[:, :, 1] Ch2 = frame[:, :, 2] #ensure not null or empty if len(features) < 1: #average frames intCh0 = np.mean(Ch0) intCh1 = np.mean(Ch1) intCh2 = np.mean(Ch2) else: intCh0 = len(fast.detect(Ch0, None)) intCh1 = len(orb.detect(Ch1, None)) intCh2 = len(blob.detect(Ch2, None)) #initialise seed # R G B intSeed = int(intCh0) << 32 | int(intCh1) << 16 | int(intCh2) << 0 letter = 32 + ((intSeed % 126) - 32) #add letter to array strPassword += str(chr(letter)) waitKey(1) cam.release() destroyAllWindows() return strPassword