日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

opencv画框返回坐标 python_[python]依靠pynput和pyautogui替换ahk

發(fā)布時(shí)間:2025/3/11 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv画框返回坐标 python_[python]依靠pynput和pyautogui替换ahk 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

autohotkey當(dāng)然是不錯(cuò)的工具,但是這個(gè)東西的社群一直發(fā)展的不行。從開(kāi)始學(xué)習(xí)python以后,我就不時(shí)會(huì)希望能找到別的工具替代ahk。Python的眾多包里面確實(shí)是有對(duì)應(yīng)的工具的:模擬鼠標(biāo)和鍵盤(pán)的操作可以用pyautogui,而捕捉熱鍵則可以使用pynput

模擬鼠標(biāo)點(diǎn)擊

這一次的實(shí)例是利用python給aegisub這個(gè)軟件做一個(gè)播放的快捷鍵。在這個(gè)軟件里面,如果你開(kāi)始輸入字幕以后,想要重新播放選定時(shí)間段的音頻只能通過(guò)鼠標(biāo)操作,這實(shí)在是非常累人的事情。這里通過(guò)pyautogui的 locateOnScreen來(lái)利用按鈕截圖找到按鈕。

import pyautogui def click_play_for_aegis():ori_pos = pyautogui.position()button_play_location = pyautogui.locateOnScreen(r'C:UsersAdministratorPicturesplay_button.jpg',confidence=0.7)click_pos_x = button_play_location.left+int(button_play_location.width/2)click_pos_y = button_play_location.top+int(button_play_location.height/2)pyautogui.click(click_pos_x,click_pos_y)pyautogui.moveTo(ori_pos.x,ori_pos.y)

需要注意的是:

  • 我的aegisub軟件是放在主顯示器上面的,如果放在副顯示器上有時(shí)會(huì)出錯(cuò)
  • locateOnScreen是識(shí)別按鈕位置的主要語(yǔ)句。添加了confidence這個(gè)可選參數(shù)以后可以讓pyautogui作模糊的搜索,但是,如果要用這個(gè)參數(shù)首先要安裝opencv。關(guān)于如何安裝opencv的python binding,可以參考我之前的這個(gè)文章(mac os與否影響不大):路人乙小明:open cv,tensorflow這些包在Mac os中的安裝
  • locateOnscreen返回的是一個(gè)box對(duì)象,包括x坐標(biāo),y坐標(biāo),寬度和高度,用這些就可以算出中心點(diǎn),然后讓鼠標(biāo)去點(diǎn)擊那個(gè)中心點(diǎn)就好了
  • pyautogui的文檔可以參考這里https://pyautogui.readthedocs.io/en/latest/

    添加快捷鍵

    到這里我們還沒(méi)有個(gè)上面的功能添加快捷鍵。這個(gè)功能需要依靠pynput這個(gè)包來(lái)實(shí)現(xiàn)。(pynput這個(gè)包最近幾年沒(méi)有更新了,這是比較可惜的事情),文檔在這里

    具體到添加快捷鍵這一部分,pynput有一個(gè)叫做GlobalHotKeys的類可以幫你快速添加快捷鍵,比如像下面的代碼就可以把ctrl+p綁定給剛才定義的函數(shù)click_play_for_aegis

    from pynput import keyboard def on_activate_p():click_play_for_aegis()with keyboard.GlobalHotKeys({'<ctrl>+p':on_activate_p}) as h:h.join()

    接下來(lái)只需要運(yùn)行這個(gè)python代碼,然后ctrl+p[1]這個(gè)快捷鍵就可以實(shí)現(xiàn)點(diǎn)擊特定按鈕的功能了。


    如果你想知道某一個(gè)按鍵的名稱是什么,那可以參考文檔里面的代碼:

    # hotkey name probe0------------------- def on_activate_p():print('windows+p pressed')click_play_for_aegis()with keyboard.GlobalHotKeys({'<win>+' })def on_press(key):try:print('alphanumeric key {0} pressed'.format(key.char))except AttributeError:print('special key {0} pressed'.format(key))def on_release(key):print('{0} released'.format(key))if key == keyboard.Key.esc:# Stop listenerreturn False# Collect events until released with keyboard.Listener(on_press=on_press,on_release=on_release) as listener:listener.join()

    這樣當(dāng)你按下一個(gè)按鍵的時(shí)候,在python的輸出里就會(huì)寫(xiě)出對(duì)應(yīng)的名稱了。

    參考

  • ^順帶一提,好像aegisub里面ctrl+p是播放視頻的快捷鍵,所以剛開(kāi)始用這個(gè)代碼的時(shí)候播放行為有些奇怪,把ctrl+p這個(gè)快捷鍵從aegisub軟件中去除以后就可以正常使用了
  • 總結(jié)

    以上是生活随笔為你收集整理的opencv画框返回坐标 python_[python]依靠pynput和pyautogui替换ahk的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。