intensity dual eye & bug hunting

This commit is contained in:
Prohurtz 2023-01-31 16:05:47 -06:00
parent ba7ada67cc
commit 6e2f8b0847
3 changed files with 45 additions and 30 deletions

View File

@ -242,7 +242,7 @@ class EyeProcessor:
pass pass
def BLINKM(self): def BLINKM(self):
self.blinkvalue = BLINK(self) self.eyeoffx = BLINK(self)
def HSRACM(self): def HSRACM(self):
@ -256,43 +256,43 @@ class EyeProcessor:
# if (cx - self.prev_x) <= 45 and (cy - self.prev_y) <= 45 : # if (cx - self.prev_x) <= 45 and (cy - self.prev_y) <= 45 :
# self.prev_x = cx # self.prev_x = cx
# self.prev_y = cy # self.prev_y = cy
eyeopen = intense(cx, cy, uncropframe) self.eyeopen = intense(cx, cy, uncropframe)
out_x, out_y = cal_osc(self, cx, cy) out_x, out_y = cal_osc(self, cx, cy)
if cx == 0: if cx == 0:
self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, eyeopen)) #update app self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, self.eyeopen)) #update app
else: else:
self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, eyeopen)) self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, self.eyeopen))
# else: # else:
# print("EYE MOVED TOO FAST") # print("EYE MOVED TOO FAST")
# self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, 0, 0, 0, False)) # self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, 0, 0, 0, False))
def HSFM(self): def HSFM(self):
cx, cy, frame = External_Run_HSF.HSFS(self) cx, cy, frame = External_Run_HSF.HSFS(self)
eyeopen = intense(cx, cy, self.current_image_gray) self.eyeopen = intense(cx, cy, self.current_image_gray)
out_x, out_y = cal_osc(self, cx, cy) out_x, out_y = cal_osc(self, cx, cy)
if cx == 0: if cx == 0:
self.output_images_and_update(frame, EyeInformation(InformationOrigin.HSF, out_x, out_y, 0, eyeopen)) #update app self.output_images_and_update(frame, EyeInformation(InformationOrigin.HSF, out_x, out_y, 0, self.eyeopen)) #update app
else: else:
self.output_images_and_update(frame, EyeInformation(InformationOrigin.HSF, out_x, out_y, 0, eyeopen)) self.output_images_and_update(frame, EyeInformation(InformationOrigin.HSF, out_x, out_y, 0, self.eyeopen))
def RANSAC3DM(self): def RANSAC3DM(self):
cx, cy, thresh = RANSAC3D(self) cx, cy, thresh = RANSAC3D(self)
eyeopen = intense(cx, cy, self.current_image_gray) self.eyeopen = intense(cx, cy, self.current_image_gray)
out_x, out_y = cal_osc(self, cx, cy) out_x, out_y = cal_osc(self, cx, cy)
if cx == 0: if cx == 0:
self.output_images_and_update(thresh, EyeInformation(InformationOrigin.RANSAC, out_x, out_y, 0, eyeopen)) #update app self.output_images_and_update(thresh, EyeInformation(InformationOrigin.RANSAC, out_x, out_y, 0, self.eyeopen)) #update app
else: else:
self.output_images_and_update(thresh, EyeInformation(InformationOrigin.RANSAC, out_x, out_y, 0, eyeopen)) self.output_images_and_update(thresh, EyeInformation(InformationOrigin.RANSAC, out_x, out_y, 0, self.eyeopen))
def BLOBM(self): def BLOBM(self):
cx, cy, thresh = BLOB(self) cx, cy, thresh = BLOB(self)
eyeopen = intense(cx, cy, self.current_image_gray) self.eyeopen = intense(cx, cy, self.current_image_gray)
out_x, out_y = cal_osc(self, cx, cy) out_x, out_y = cal_osc(self, cx, cy)
if cx == 0: if cx == 0:
self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, eyeopen)) #update app self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, self.eyeopen)) #update app
else: else:
self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, eyeopen)) self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, self.eyeopen))

View File

@ -983,7 +983,7 @@ class HSRAC_cls(object):
## default_radius = 14 ## default_radius = 14
frame = self.current_image_gray frame = self.current_image_gray
frame = cv2.copyMakeBorder(frame, 21, 21, 21, 21, cv2.BORDER_CONSTANT, value=[255, 255, 255]) # add a border to prevent overcropping the image. # frame = cv2.copyMakeBorder(frame, 21, 21, 21, 21, cv2.BORDER_CONSTANT, value=[255, 255, 255]) # add a border to prevent overcropping the image.
if self.now_modeo == self.cv_modeo[1]: if self.now_modeo == self.cv_modeo[1]:
# adjustment of radius # adjustment of radius
@ -1091,17 +1091,17 @@ class HSRAC_cls(object):
# print('Pixel position:', center_xy) # print('Pixel position:', center_xy)
if imshow_enable: # if imshow_enable:
if self.now_modeo != self.cv_modeo[0] and self.now_modeo != self.cv_modeo[1]: # if self.now_modeo != self.cv_modeo[0] and self.now_modeo != self.cv_modeo[1]:
if 0 in cropped_image.shape: # if 0 in cropped_image.shape:
# If shape contains 0, it is not detected well. # If shape contains 0, it is not detected well.
pass # pass
else: # else:
cv2.imshow("crop", cropped_image) # cv2.imshow("crop", cropped_image)
cv2.imshow("frame", frame) # cv2.imshow("frame", frame)
if cv2.waitKey(1) & 0xFF == ord("q"): # if cv2.waitKey(1) & 0xFF == ord("q"):
pass # pass
if self.now_modeo == self.cv_modeo[0]: if self.now_modeo == self.cv_modeo[0]:
# Moving from first_frame to the next mode # Moving from first_frame to the next mode
@ -1129,7 +1129,6 @@ class HSRAC_cls(object):
lower_y = center_y - 20 lower_y = center_y - 20
# Crop the image using the calculated bounds # Crop the image using the calculated bounds
frame_gray = frame_gray[lower_y:upper_y, lower_x:upper_x] frame_gray = frame_gray[lower_y:upper_y, lower_x:upper_x]
frame = frame_gray frame = frame_gray
# this will need to be adjusted everytime hardware is changed (brightness of IR, Camera postion, etc)m # this will need to be adjusted everytime hardware is changed (brightness of IR, Camera postion, etc)m
@ -1176,7 +1175,7 @@ class HSRAC_cls(object):
crop_start_time = timeit.default_timer() crop_start_time = timeit.default_timer()
cx, cy, w, h, theta = ransac_data cx, cy, w, h, theta = ransac_data
print(cx, cy) # print(cx, cy)
if w >= 2.1 * h: #new blink detection algo lmao this works pretty good actually if w >= 2.1 * h: #new blink detection algo lmao this works pretty good actually
print("RAN BLINK") print("RAN BLINK")
#return center_x, center_y, frame, frame, True #return center_x, center_y, frame, frame, True

View File

@ -1,11 +1,17 @@
import pandas as pd import pandas as pd
import numpy as np import numpy as np
import time import time
from enum import IntEnum
#higher intensity means more closed/ more white/less pupil #higher intensity means more closed/ more white/less pupil
#Hm I need an acronym for this, any ideas? #Hm I need an acronym for this, any ideas?
#IBO Intensity Based Openess #IBO Intensity Based Openess
class EyeId(IntEnum):
RIGHT = 0
LEFT = 1
BOTH = 2
SETTINGS = 3
# HOW THIS WORKS: # HOW THIS WORKS:
# we get the intensity of pupil area from HSF crop, When the eyelid starts to close, the pupil starts being obstructed by skin which is generally lighter than the pupil. # we get the intensity of pupil area from HSF crop, When the eyelid starts to close, the pupil starts being obstructed by skin which is generally lighter than the pupil.
@ -13,8 +19,14 @@ import time
# ex. when you look up there is less pupil visible, which results in an uncalculated change in intensity even though the eyelid has not moved in a meaningful way. # ex. when you look up there is less pupil visible, which results in an uncalculated change in intensity even though the eyelid has not moved in a meaningful way.
# We compare the darkest intensity of that area, to the lightest (global) intensity to find the appropriate openness state via a float. # We compare the darkest intensity of that area, to the lightest (global) intensity to find the appropriate openness state via a float.
fname = "IBO.csv" #TODO Expose as setting
if EyeId.RIGHT:
fname = "IBO_RIGHT.csv"
if EyeId.LEFT:
fname = "IBO_LEFT.csv"
lct = time.time() lct = time.time()
try: try:
data = pd.read_csv(fname, sep=",") data = pd.read_csv(fname, sep=",")
except: except:
@ -27,15 +39,18 @@ except:
def intense(x, y, frame): def intense(x, y, frame):
global lct global lct
upper_x = int(x) + 25 #TODO make this a setting upper_x = int(x) + 25 #TODO make this a setting
lower_x = int(x) - 25 lower_x = int(x) - 25
upper_y = int(y) + 25 upper_y = int(y) + 25
lower_y = int(y) - 25 lower_y = int(y) - 25
frame = frame[lower_y:upper_y, lower_x:upper_x] frame = frame[lower_y:upper_y, lower_x:upper_x]
print(x, y, int(x), int(y), upper_x, upper_y, lower_x, lower_y)
try: try:
xy = int(str(int(x)) + str(int(y)) + str(int(x)+int(y))) xy = int(str(int(x)) + str(int(y)) + str(int(x)+int(y)))
intensity = np.sum(frame) intensity = np.sum(frame) #why is this outputting 0s?
# print(intensity, upper_x, upper_y, lower_x, lower_y)
except: except:
return 0.0 #TODO find how on earth a hyphen gets thrown into this return 0.0 #TODO find how on earth a hyphen gets thrown into this
@ -78,9 +93,10 @@ def intense(x, y, frame):
#eyeopen = (intensity - minp) / (maxp - minp) #eyeopen = (intensity - minp) / (maxp - minp)
eyeopen = (intensity - maxp) / (minp - maxp) eyeopen = (intensity - maxp) / (minp - maxp)
eyeopen = 1 - eyeopen eyeopen = 1 - eyeopen
eyeopen = eyeopen - 0.2
# print(intensity, maxp, minp, x, y) # print(intensity, maxp, minp, x, y)
print(f"EYEOPEN: {eyeopen}") # print(f"EYEOPEN: {eyeopen}")
# print(int(x), int(y), eyeopen, maxp, minp)
except: except:
print('[INFO] Something went wrong, assuming blink.') print('[INFO] Something went wrong, assuming blink.')