manual reidentification

This commit is contained in:
Lincoln-LM 2021-12-27 02:43:40 -07:00
parent 9142643dbf
commit 780a41364b
2 changed files with 55 additions and 23 deletions

View File

@ -102,39 +102,43 @@ def tracking_blink(img, roi_x, roi_y, roi_w, roi_h, th = 0.9, size = 40, sysdvr
cv2.destroyAllWindows()
return (blinks, intervals, offset_time)
def tracking_blink_manual(size = 40)->Tuple[List[int],List[int],float]:
def tracking_blink_manual(size = 40, reidentify = False)->Tuple[List[int],List[int],float]:
"""measuring the type and interval of player's blinks
Returns:
blinks:List[int],intervals:list[int],offset_time:float: [description]
"""
state = IDLE
blinks = []
intervals = []
prev_time = 0
offset_time = 0
while len(blinks)<size:
if not reidentify:
input()
time_counter = time.perf_counter()
print(f"Adv Since Last: {round((time_counter - prev_time)/1.018)} {(time_counter - prev_time)}")
while len(blinks)<size or state!=IDLE:
input()
time_counter = time.perf_counter()
print(f"Adv Since Last: {round((time_counter - prev_time)/1.018)} {(time_counter - prev_time)}")
if prev_time != 0 and time_counter - prev_time<0.7:
blinks[-1] = 1
print("double blink logged")
else:
blinks.append(0)
interval = (time_counter - prev_time)/1.018
interval_round = round(interval)
intervals.append(interval_round)
print("blink logged")
print(f"Intervals {len(intervals)}/{size}")
if prev_time != 0 and time_counter - prev_time<0.7:
blinks[-1] = 1
print("double blink logged")
if len(intervals)==size:
offset_time = time_counter
prev_time = time_counter
else:
blinks.append(0)
interval = (time_counter - prev_time)/1.018
interval_round = round(interval)
intervals.append(interval_round)
print("blink logged")
print(f"Intervals {len(intervals)}/{size}")
blinks.append(int(input("Blink Type (0 = single, 1 = double): ")))
print(f"Blinks {len(blinks)}/{size}")
time_counter = time.perf_counter()
if len(intervals)==size:
offset_time = time_counter
prev_time = time_counter

View File

@ -2,14 +2,39 @@ import rngtool
import cv2
import time
import json
from xorshift import Xorshift
config = json.load(open("config.json"))
def reidentify():
t0 = int(input("input state[0] (state 0/1): 0x"),16)
t1 = int(input("input state[1] (state 0/1): 0x"),16)
state = [t0 >> 64, t0 & 0xFFFFFFFF, t1 >> 64, t1 & 0xFFFFFFFF]
observed_blinks, _, offset_time = rngtool.tracking_blink_manual(size = 20, reidentify=True)
reidentified_rng = rngtool.reidentifyByBlinks(Xorshift(*state), observed_blinks)
waituntil = time.perf_counter()
diff = round(waituntil-offset_time)+1
reidentified_rng.getNextRandSequence(diff)
state = reidentified_rng.getState()
print(hex(state[0]<<32|state[1]), hex(state[2]<<32|state[3]))
advances = 0
while True:
advances += 1
r = reidentified_rng.next()
waituntil += 1.018
print(f"advances:{advances}, blinks:{hex(r&0xF)}")
next_time = waituntil - time.perf_counter() or 0
time.sleep(next_time)
def expr():
player_eye = cv2.imread(config["image"], cv2.IMREAD_GRAYSCALE)
if player_eye is None:
print("path is wrong")
return
blinks, intervals, offset_time = rngtool.tracking_blink_manual()
prng = rngtool.recov(blinks, intervals)
@ -34,4 +59,7 @@ def expr():
if __name__ == "__main__":
expr()
if input("Find State or Reidentify? (S/R): ") == "R":
reidentify()
else:
expr()