From ebb5f1cbc5f7fb3afba506276da17fece9e4f964 Mon Sep 17 00:00:00 2001 From: Jing Hua Date: Thu, 30 Nov 2023 17:31:46 +0800 Subject: [PATCH] add mouse cursor to screenshot --- desktop_env/assets/cursor.png | Bin 0 -> 4796 bytes desktop_env/controllers/mouse.py | 17 ++++++++++++++++- desktop_env/controllers/python.py | 1 + desktop_env/envs/desktop_env.py | 22 +++++++++++++++++----- desktop_env/windows_server/main.py | 4 +++- 5 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 desktop_env/assets/cursor.png diff --git a/desktop_env/assets/cursor.png b/desktop_env/assets/cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..8d9182a99ddafecce0ecac943a7fb5901ca6545b GIT binary patch literal 4796 zcmeHKc~lff8lT}1P&^O}c*IObBr5crJxou_h{%jEkwI<&iPF>41Fds8-N1m0Njwlt zz%xh?uVBS@BlBoV?tIX&vPG0*cTObbr%r~Tix8dd2gTZZT@5C74=os@B3BN zufF=2Du{{<8##Q!a1MtvQWLI<0rdn>{9T8EzXoH;1yKD+Bx(#A%?yq!XaFSFiNggJ zgX8wt{=jzNI&vIAod?QTU^5sN$8~1w&p~@)kG%!h(|RzBkC^Mg842n#P$a@92M&wqt;00hD4s+h773&<@E1v>s920jMLe+_mB>&T0_NxL>R%DV zwED=)F?9v73> z@Z($$&-r$g-_{i&oAdV6)kRw&$L&en|D!FWrh)7GQJGkH_=C1UaqcRkWKhU_@iw-S+^(x2vm!$hG zzfF3xzJkzi_Quw1$V_TJS(oG=pY&o!=bBFs)Kp!|C@s&&J?3rT%?TN& z-Vzm3lCa%tgy#18>{nrvYE^x@hJL< zLt&}u^?7USzwZC0{OjYVF4s5OuHrt6 zl^_P~WLzShsEt5zi%Ed#EjmJAH(8kj;{*lUtr)(Ppm{nXjWjFyPfyhHd8A&+Um(+p zwAN4}oea;h5wSUuad^&BT%qR&&l(_efT(OUjoBeHHHD$*=1>t7ZX>NUX)*H{PE2RXpp|?+80Yn_&t%nV`{>P7 zj|xB!p&hdd#R8GgWD*YaplEd_An94q?|M*i*;YarLr|6s8&0S*2{S!qAcY?9^S5T$ zjO=#wxR5XsCIF?ttl~jaGB>WzgOMPOG+9|MAod_6O&a>e8niZMgx$`-g#h1a{f|GibHKkI75Q_-}k{j?q2*wZ*q>$k-gun`^PNC3A zBvR=BDvg<3=kG$;uH|D{a`O>sExpAi!IJ#F)I0eS+{Rk3$BwM zqcIgm6M(cY56AW9VSf>Vin^E2&}l7t(vbbX(9GrG1pz!b@^F#@^JlYN-8U+hSk~R@ zZW>AUD)D&ir9d&fdkYknN$A;i0c?gllg<`8%P2$wUYN6ADNt$7K*~ zz%dAf7Y->Tff9opMqs@}Hkh5V80aj_MuemR9f4LLJlX$HylLz~O&^TTN++080D?hc zF(eiJr(nXK4GWo^(Yxay;eTlo!~zB+8Q|C52a*@ag~GmM*rOSfcK*Om&sqF|GXUzL zN#07|A-RU+dMgFq3Op2DLvp>90&fK#imv~gT*LdHQ-m4(3d#bHrM!gdTJX>srkfY0 zVxL@`_Rtd_1Ix`Co8BfKC@$qgA`KjF{{;9*tRa2fWE0k~FH2xWsec zH)!*VqP<+6J-GT1|4A>Nwdt!b)8A3SQ{NxKFWz+EPk8|WUa^5=o2l|?7$%;0ex-Aj zk2+wlW>a*2OikV#_qoy+x66*2CrF#Nw_W*eUt4w8^49j?mfY6%oiAojY{kF2R_@af z8}Y_lr9OG#+FeycQ=4)EHMa0{`?0QdUsva+B9Rw6T@sr4D;{wyn>;q4J{wx#0K%6i}}K+o1V%c}EtafSGN z|0R^i8Lyy%+$SYvpSk*}vZpsX?*+`2$2>b8=n@3{{TB{Dd+zaq@^EXe-7u}IDn&K5 zIoPx2cm?Vmt!ZEHccoV09liKU?Y!#Jn?LL>8M9!f8OLrMsbAw;dY1QYM{IXTmt?mT*aX<_zlkHgMKcHgaOO}RF+GU!>xr^<-P zmfNQ%k3O<~nn&UJ=3`x}oeRFdgecVkk&}N-O7-u`+dnnin|fVw$NSM%Ph(i>(JSqx zCC^<>Jg@g_+a-uz)mE8xKeb>-`3laRUn-QvsU40dkTLbzyAvOJFUDj3cENY!iuFzh z5ABgW7+LkiEptZ2<}ZAcJtKGeUOX<~|LVT`yG#2&e0{vxZN>D8Q(t_(WIl4L_@%qc z=9l{uw|`r>w^j~6kGJK#7k_LQ+OcrdtkcC&8`l-(h2Pp%zi3?N=qB% None: - subprocess.run(command, shell=True, stderr=subprocess.STDOUT, timeout=60) + result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=60, text=True) + if result.returncode != 0: + raise Exception("\033[91m" + result.stdout + result.stderr + "\033[0m") def _save_state(self): self._execute_command(["vmrun", "-T", "ws" "snapshot", self.path_to_vm, self.snapshot_path]) @@ -126,8 +129,7 @@ class DesktopEnv(gym.Env): if self.password: self._execute_command( - ["vmrun", "-T", "ws", "-gu", self.username, "-gp", self.password, "captureScreen", self.path_to_vm, - image_path]) + ["vmrun", "-T", "ws", "-gu", self.username, "-gp", self.password, "captureScreen", self.path_to_vm, image_path]) else: self._execute_command( ["vmrun", "-T", "ws", "-gu", self.username, "captureScreen", self.path_to_vm, image_path]) @@ -136,7 +138,17 @@ class DesktopEnv(gym.Env): def _get_obs(self): screenshot_image_path = self._get_screenshot() + self._add_cursor(screenshot_image_path) return screenshot_image_path + + def _add_cursor(self, img_path: str): + x, y = self.mouse_controller.get_mouse() + cursor_image = Image.open("./desktop_env/assets/cursor.png") + cursor_image = cursor_image.resize((int(cursor_image.width / 2), int(cursor_image.height / 2))) + + screenshot = Image.open(img_path) + screenshot.paste(cursor_image, (x, y), cursor_image) + screenshot.save(img_path) def reset(self): print("Resetting environment...") diff --git a/desktop_env/windows_server/main.py b/desktop_env/windows_server/main.py index 467b40e..098dca5 100644 --- a/desktop_env/windows_server/main.py +++ b/desktop_env/windows_server/main.py @@ -11,9 +11,11 @@ def execute_command(): # Execute the command without any safety checks. try: - subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) return jsonify({ 'status': 'success', + 'output': result.stdout, + 'error': result.stderr }) except Exception as e: return jsonify({