diff --git a/configs/config_camera.json b/configs/config_camera.json index 44dda1b..c90adb9 100644 --- a/configs/config_camera.json +++ b/configs/config_camera.json @@ -16,5 +16,6 @@ 0, 0, 0 - ] + ], + "camera": 0 } \ No newline at end of file diff --git a/configs/config_cave.json b/configs/config_cave.json index 29cdddf..a83be6d 100644 --- a/configs/config_cave.json +++ b/configs/config_cave.json @@ -11,5 +11,6 @@ "thresh": 0.9, "white_delay": 0, "advance_delay": 0, - "crop": [0,0,0,0] + "crop": [0,0,0,0], + "camera": 0 } \ No newline at end of file diff --git a/configs/config_mt_coronet.json b/configs/config_mt_coronet.json index db6cb01..e0f2cee 100644 --- a/configs/config_mt_coronet.json +++ b/configs/config_mt_coronet.json @@ -11,5 +11,6 @@ "thresh": 0.75, "white_delay": 2, "advance_delay": 0, - "crop": [0,0,0,0] + "crop": [0,0,0,0], + "camera": 0 } \ No newline at end of file diff --git a/configs/config_munchlax.json b/configs/config_munchlax.json index f8212b2..b9f7aa2 100644 --- a/configs/config_munchlax.json +++ b/configs/config_munchlax.json @@ -11,5 +11,6 @@ "thresh": 0.9, "white_delay": 0, "advance_delay": 0, - "crop": [0,0,0,0] + "crop": [0,0,0,0], + "camera": 0 } \ No newline at end of file diff --git a/configs/config_phone_regi.json b/configs/config_phone_regi.json index f7c48e5..95e0e57 100644 --- a/configs/config_phone_regi.json +++ b/configs/config_phone_regi.json @@ -16,5 +16,6 @@ 91, 530, 300 - ] + ], + "camera": 0 } \ No newline at end of file diff --git a/configs/config_phone_unown.json b/configs/config_phone_unown.json index fa2d320..50e12f3 100644 --- a/configs/config_phone_unown.json +++ b/configs/config_phone_unown.json @@ -16,5 +16,6 @@ 91, 530, 300 - ] + ], + "camera": 0 } \ No newline at end of file diff --git a/configs/config_regi.json b/configs/config_regi.json index d3260f7..6572cf7 100644 --- a/configs/config_regi.json +++ b/configs/config_regi.json @@ -11,5 +11,6 @@ "thresh": 0.75, "white_delay": 3.0, "advance_delay": 3, - "crop": [0,0,0,0] + "crop": [0,0,0,0], + "camera": 0 } \ No newline at end of file diff --git a/configs/config_room.json b/configs/config_room.json index 6286617..8a35bd1 100644 --- a/configs/config_room.json +++ b/configs/config_room.json @@ -11,5 +11,6 @@ "thresh": 0.9, "white_delay": 0, "advance_delay": 0, - "crop": [0,0,0,0] + "crop": [0,0,0,0], + "camera": 0 } \ No newline at end of file diff --git a/configs/config_unown.json b/configs/config_unown.json index 3fe990f..8a0b95b 100644 --- a/configs/config_unown.json +++ b/configs/config_unown.json @@ -6,5 +6,6 @@ "thresh": 0.9, "white_delay": 0, "advance_delay": 0, - "crop": [0,0,0,0] + "crop": [0,0,0,0], + "camera": 0 } \ No newline at end of file diff --git a/src/player_blink_gui.py b/src/player_blink_gui.py index 3a26c8c..ac5d021 100644 --- a/src/player_blink_gui.py +++ b/src/player_blink_gui.py @@ -34,7 +34,8 @@ class Application(tk.Frame): "thresh": 0.9, "white_delay": 0.0, "advance_delay": 0, - "crop": [0,0,0,0] + "crop": [0,0,0,0], + "camera": 0 } self.pack() self.create_widgets() @@ -65,6 +66,9 @@ class Application(tk.Frame): self.prefix_input = ttk.Entry(self) self.prefix_input.grid(column=1,row=2) + self.camera_index = tk.Spinbox(self, from_= 0, to = 99, width = 5) + self.camera_index.grid(column=2,row=1) + self.monitor_window_var = tk.IntVar() self.monitor_window = ttk.Checkbutton(self,text="Monitor Window",variable=self.monitor_window_var) self.monitor_window.grid(column=2,row=2) @@ -149,6 +153,8 @@ class Application(tk.Frame): self.whi_del.insert(0, 0.0) self.adv_del.delete(0, tk.END) self.adv_del.insert(0, 0) + self.camera_index.delete(0, tk.END) + self.camera_index.insert(0, 0) self.after_task() @@ -192,6 +198,8 @@ class Application(tk.Frame): self.whi_del.insert(0, self.config_json["white_delay"]) self.adv_del.delete(0, tk.END) self.adv_del.insert(0, self.config_json["advance_delay"]) + self.camera_index.delete(0, tk.END) + self.camera_index.insert(0, self.config_json["camera"]) self.player_eye = cv2.imread(self.config_json["image"], cv2.IMREAD_GRAYSCALE) self.player_eye_tk = self.cv_image_to_tk(self.player_eye) self.eye_display['image'] = self.player_eye_tk @@ -229,7 +237,7 @@ class Application(tk.Frame): def monitoring_work(self): self.tracking = False - blinks, intervals, offset_time = rngtool.tracking_blink(self.player_eye, *self.config_json["view"], MonitorWindow=self.config_json["MonitorWindow"], WindowPrefix=self.config_json["WindowPrefix"], crop=self.config_json["crop"], tk_window=self, th=self.config_json["thresh"]) + blinks, intervals, offset_time = rngtool.tracking_blink(self.player_eye, *self.config_json["view"], MonitorWindow=self.config_json["MonitorWindow"], WindowPrefix=self.config_json["WindowPrefix"], crop=self.config_json["crop"], camera=self.config_json["camera"], tk_window=self, th=self.config_json["thresh"]) prng = rngtool.recov(blinks, intervals) self.monitor_blink_button['text'] = "Monitor Blinks" @@ -331,7 +339,7 @@ class Application(tk.Frame): self.s01_23.insert(1.0,s01+"\n"+s23) print([hex(x) for x in state]) - observed_blinks, _, offset_time = rngtool.tracking_blink(self.player_eye, *self.config_json["view"], MonitorWindow=self.config_json["MonitorWindow"], WindowPrefix=self.config_json["WindowPrefix"], crop=self.config_json["crop"], tk_window=self, th=self.config_json["thresh"], size=20) + observed_blinks, _, offset_time = rngtool.tracking_blink(self.player_eye, *self.config_json["view"], MonitorWindow=self.config_json["MonitorWindow"], WindowPrefix=self.config_json["WindowPrefix"], crop=self.config_json["crop"], camera=self.config_json["camera"], tk_window=self, th=self.config_json["thresh"], size=20) reidentified_rng, adv = rngtool.reidentifyByBlinks(Xorshift(*state), observed_blinks, return_advance=True) @@ -415,10 +423,11 @@ class Application(tk.Frame): from windowcapture import WindowCapture video = WindowCapture(self.config_json["WindowPrefix"],self.config_json["crop"]) else: - video = cv2.VideoCapture(0,cv2.CAP_DSHOW) + video = cv2.VideoCapture(self.config_json["camera"],cv2.CAP_DSHOW) video.set(cv2.CAP_PROP_FRAME_WIDTH,1920) video.set(cv2.CAP_PROP_FRAME_HEIGHT,1080) video.set(cv2.CAP_PROP_BUFFERSIZE,1) + print(f"camera {self.config_json['camera']}") while self.previewing: @@ -455,6 +464,7 @@ class Application(tk.Frame): self.config_json["white_delay"] = float(self.whi_del.get()) self.config_json["advance_delay"] = int(self.adv_del.get()) self.config_json["MonitorWindow"] = self.monitor_window_var.get() + self.config_json["camera"] = int(self.camera_index.get()) self.adv['text'] = self.advances self.cd['text'] = self.count_down self.after(100,self.after_task) diff --git a/src/rngtool.py b/src/rngtool.py index 015aeba..13cfef0 100644 --- a/src/rngtool.py +++ b/src/rngtool.py @@ -16,7 +16,7 @@ def randrange(r,mi,ma): t = (r & 0x7fffff) / 8388607.0 return t * mi + (1.0 - t) * ma -def tracking_blink(img, roi_x, roi_y, roi_w, roi_h, th = 0.9, size = 40, MonitorWindow = False, WindowPrefix = "SysDVR-Client [PID ", crop = None, tk_window = None)->Tuple[List[int],List[int],float]: +def tracking_blink(img, roi_x, roi_y, roi_w, roi_h, th = 0.9, size = 40, MonitorWindow = False, WindowPrefix = "SysDVR-Client [PID ", crop = None, camera = 0, tk_window = None)->Tuple[List[int],List[int],float]: """measuring the type and interval of player's blinks Returns: @@ -30,7 +30,7 @@ def tracking_blink(img, roi_x, roi_y, roi_w, roi_h, th = 0.9, size = 40, Monitor from windowcapture import WindowCapture video = WindowCapture(WindowPrefix,crop) else: - video = cv2.VideoCapture(0,cv2.CAP_DSHOW) + video = cv2.VideoCapture(camera,cv2.CAP_DSHOW) video.set(cv2.CAP_PROP_FRAME_WIDTH,1920) video.set(cv2.CAP_PROP_FRAME_HEIGHT,1080) video.set(cv2.CAP_PROP_BUFFERSIZE,1) @@ -167,7 +167,7 @@ def tracking_blink_manual(size = 40, reidentify = False)->Tuple[List[int],List[i return (blinks, intervals, offset_time) -def tracking_poke_blink(img, roi_x, roi_y, roi_w, roi_h, size = 60, MonitorWindow = False, WindowPrefix = "SysDVR-Client [PID ", crop = None)->Tuple[List[int],List[int],float]: +def tracking_poke_blink(img, roi_x, roi_y, roi_w, roi_h, size = 60, MonitorWindow = False, WindowPrefix = "SysDVR-Client [PID ", crop = None, camera = 0)->Tuple[List[int],List[int],float]: """measuring the type and interval of pokemon's blinks Returns: @@ -180,7 +180,7 @@ def tracking_poke_blink(img, roi_x, roi_y, roi_w, roi_h, size = 60, MonitorWindo from windowcapture import WindowCapture video = WindowCapture(WindowPrefix, crop) else: - video = cv2.VideoCapture(0,cv2.CAP_DSHOW) + video = cv2.VideoCapture(camera,cv2.CAP_DSHOW) video.set(cv2.CAP_PROP_FRAME_WIDTH,1920) video.set(cv2.CAP_PROP_FRAME_HEIGHT,1080) video.set(cv2.CAP_PROP_BUFFERSIZE,1) diff --git a/src/stationary.py b/src/stationary.py index 7bc36a6..95cefac 100644 --- a/src/stationary.py +++ b/src/stationary.py @@ -12,7 +12,7 @@ def firstspecify(): if player_eye is None: print("path is wrong") return - blinks, intervals, offset_time = rngtool.tracking_blink(player_eye, *config["view"], MonitorWindow=config["MonitorWindow"], WindowPrefix=config["WindowPrefix"]) + blinks, intervals, offset_time = rngtool.tracking_blink(player_eye, *config["view"], MonitorWindow=config["MonitorWindow"], WindowPrefix=config["WindowPrefix"],camera=config["camera"]) prng = rngtool.recov(blinks, intervals) waituntil = time.perf_counter() @@ -33,7 +33,7 @@ def reidentify(): print("path is wrong") return - observed_blinks, _, offset_time = rngtool.tracking_blink(player_eye, *config["view"], MonitorWindow=config["MonitorWindow"], WindowPrefix=config["WindowPrefix"], crop=config["crop"], size=20) + observed_blinks, _, offset_time = rngtool.tracking_blink(player_eye, *config["view"], MonitorWindow=config["MonitorWindow"], WindowPrefix=config["WindowPrefix"], crop=config["crop"],camera=config["camera"], size=20) reidentified_rng = rngtool.reidentifyByBlinks(Xorshift(*state), observed_blinks) if reidentified_rng is None: print("couldn't reidentify state.") @@ -80,7 +80,7 @@ def stationary_timeline(): print("path is wrong") return - observed_blinks, _, offset_time = rngtool.tracking_blink(player_eye, *config["view"], MonitorWindow=config["MonitorWindow"], WindowPrefix=config["WindowPrefix"], crop=config["crop"], th=config["thresh"],size=20) + observed_blinks, _, offset_time = rngtool.tracking_blink(player_eye, *config["view"], MonitorWindow=config["MonitorWindow"], WindowPrefix=config["WindowPrefix"], crop=config["crop"], th=config["thresh"],camera=config["camera"],size=20) reidentified_rng = rngtool.reidentifyByBlinks(Xorshift(*state), observed_blinks) if reidentified_rng is None: print("couldn't reidentify state.") diff --git a/src/wild.py b/src/wild.py index ef3fc48..ac2ed87 100644 --- a/src/wild.py +++ b/src/wild.py @@ -11,7 +11,7 @@ def expr(): if player_eye is None: print("path is wrong") return - blinks, intervals, offset_time = rngtool.tracking_blink(player_eye, *config["view"], MonitorWindow=config["MonitorWindow"], WindowPrefix=config["WindowPrefix"], crop=config["crop"]) + blinks, intervals, offset_time = rngtool.tracking_blink(player_eye, *config["view"], MonitorWindow=config["MonitorWindow"], WindowPrefix=config["WindowPrefix"], crop=config["crop"],camera=config["camera"]) prng = rngtool.recov(blinks, intervals) waituntil = time.perf_counter() @@ -44,7 +44,7 @@ def reidentify(): print("path is wrong") return - observed_blinks, _, offset_time = rngtool.tracking_blink(player_eye, *config["view"], MonitorWindow=config["MonitorWindow"], WindowPrefix=config["WindowPrefix"], crop=config["crop"], size=20) + observed_blinks, _, offset_time = rngtool.tracking_blink(player_eye, *config["view"], MonitorWindow=config["MonitorWindow"], WindowPrefix=config["WindowPrefix"], crop=config["crop"],camera=config["camera"], size=20) reidentified_rng = rngtool.reidentifyByBlinks(Xorshift(*state), observed_blinks) waituntil = time.perf_counter()