前提・実現したいこと
■処理フロー
画面のピンチアウト(下記L21~24箇所)
↓
画面を上へドラッグ(下記L25箇所)
↓
・
・
・
■システム構成
PC :Raspberry Pi 4
メモリ :8GB
OS :Raspberry Pi OS(32bit)
Android:AU AQUOS R2 SHV42 Premium Black
■使用ツール
python(開発言語)
pyautogui(キーボード操作制御、アンドロイド画面認識制御)
scrcpy(Android制御)
<イメージ>
RaspberryPi4 ⇔ python(pyautogui) ⇔ scrcpy ⇔ Android
■確認内容
下記記載理由より、
keyUpコマンドが効かないことによるバグの見立てですが、
上記コマンドを有効にする現状リカバリ案が思いつかない状況です。
有識者様によるご教授を頂ければと思います。
発生している問題・エラーメッセージ
Android端末のapl上にて、 画面のピンチアウト(下記a.py L21~24箇所)後、 画面を上へドラッグ(下記a.pyy L25箇所)を期待していたが、 keyUpコマンドが反応せずドラッグ操作(後続他クリック操作含む)が機能しなくなる事象となります。
該当のソースコード
python
1~a.py(一部抜粋)~ 2if((mapN == 0) or (i != mapN - 1)): 3 # スクロール画像を確認 → 下へスクロール 4 if(self.serch_image2(img_path = SCROLL, wait_time = 0.2, conf = 0.95)): 5 # 初回操作時 → 画面初期化 6 if(firstTutchScrool): 7 self.serch_drag_image(img_path = SCROLL, conf = 0.95, offset = (0, -1080), return_loc=True) 8 # フラグをFalseへ変更 9 firstTutchScrool = False 10 #画面を下へスクロール 11 self.serch_drag_image(img_path = SCROLL, conf = 0.95, offset = (0, 50), return_loc=True) 12# スクロール画像を未確認 → タッチスクロール 13else: 14 # 初回操作時 → 画面初期化 15 if(firstTutchScrool): 16 flag3 = False 17 num3 = 0 18 while (flag3 is False): 19 # ターミナル文言を確認 → 画面初期化 20 if(flag3:=self.serch_image2(img_path = TERMINAL, wait_time = 0.2, conf = 0.95)): 21 # 画面縮小 22 self.keyDown(wait_time = 1.5, target_key = 'ctrl', img_x = X_SC, img_y = Y_SC) 23 self.drag(wait_time = 1.5, img_x = (X_SC + 100), img_y = (Y_SC + 100), offset = (-100, -100), return_loc=True) 24 self.keyUp(wait_time = 1.5, target_key = 'ctrl', img_x = X_SC, img_y = Y_SC) 25 # 画面を一番上へドラッグ 26 self.drag(wait_time = 0.2, img_x = X_SC, img_y = Y_SC, offset = (0, Y_SC), return_loc=True) 27 # フラグをFalseへ変更 28 firstTutchScrool = False 29 # ターミナル文言を未確認 → 待機 30 else: 31 if(num3 < 20): 32 time.sleep(0.6) 33 num1+=1 34 continue 35 else: 36 raise UniqueException("roopの為、処理中断") 37 #画面を下へタッチスクロール 38 self.drag(wait_time = 0.2, img_x = X_SC, img_y = Y_SC, offset = (0, -50), return_loc=True) 39 40~b.py(一部抜粋)~ 41################################### 42# 指定位置でドラッグ操作 43# 44def drag(self, wait_time, img_x, img_y, offset = (0, 0), return_loc = True, drag_time = 0.35): 45 try: 46 # 現在位置を取得 47 loc = pyautogui.position() 48 49 # 指定位置へ移動 50 pyautogui.moveTo(img_x, img_y, duration = 0) 51 52 # ドラッグ操作 53 pyautogui.dragTo(img_x + offset[0], img_y + offset[1], drag_time, button = ('left')) 54 print("({:1}, {:2}) is {:3} drug".format(img_x, img_y, offset[1])) 55 56 # 指定時間までsleep 57 time.sleep(wait_time) 58 59 return True 60 61 except Exception as e: 62 print(e) 63 return False 64 65################################### 66# 指定キーホールド 67# 68def keyDown(self, wait_time, target_key, img_x, img_y): 69 try: 70 # 現在位置を取得 71 loc = pyautogui.position() 72 73 # 対象位置へ移動 74 pyautogui.moveTo(img_x, img_y, duration = 0) 75 76 # 指定キーをホールド 77 pyautogui.keyDown(target_key) 78 print("chara{:1} is keyDown".format(target_key)) 79 80 # 指定時間までsleep 81 time.sleep(wait_time) 82 83 return True 84 85 except Exception as e: 86 print(e) 87 return False 88 89################################### 90# 指定キーホールド解除 91# 92def keyUp(self, wait_time, target_key, img_x, img_y): 93 try: 94 # 現在位置を取得 95 loc = pyautogui.position() 96 97 # 対象位置へ移動 98 pyautogui.moveTo(img_x, img_y, duration = 0) 99 100 # 指定キーをホールド 101 pyautogui.keyUp(target_key) 102 print("chara{:1} is keyUp".format(target_key)) 103 104 # 指定時間までsleep 105 time.sleep(wait_time) 106 107 return True 108 109 except Exception as e: 110 print(e) 111 return False 112
試したこと
・scrcpyを未起動での処理実行 →発生事象未解消
・a.pyのL23内容をコメントアウト後処理実行→ピンチアウト動作は確認
・a.pyのL21~L23の指定sleep時間を延長 →発生事象未解消
・Numlockを事前に無効状態での処理実行 →発生事象未解消
(参考:https://teratail.com/questions/254519)
補足情報(FW/ツールのバージョンなど)
conda version:4.10.3
python version:python3.8.10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。