Created
October 9, 2021 17:14
-
-
Save johanjohan/b58d37f10ea7012e57eac61f781cb3eb to your computer and use it in GitHub Desktop.
cv2 extra key binding: arrows etc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
from py3j.system import system as m_system | |
""" | |
https://stackoverflow.com/questions/45580975/opencv-handling-arrow-keys-with-waitkey-function/45584477 | |
https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes | |
in main: | |
cv2_key = cv2.waitKeyEx( 1 ) & m_cv2.Key.mask | |
if cv2_key != m_cv2.Key.mask: | |
if cv2_key == m_cv2.Key.VK_DOWN: | |
# do something | |
elif cv2_key == m_cv2.Key.VK_UP: | |
# do something | |
""" | |
class Key: | |
mask = 0xFFFFFF # so up arrow key maps to 0x260000 VK_UP | |
# https://help.perforce.com/pv-wave/2017.1/PVWAVE_Online_Help/pvwave.html#page/Foundation/ap.e.virt_keys.html | |
# copied into excel vk_codes_2.xlsx | |
VK_ABNT_C1 = 0xC10000 # 0xC1 0xC10000 # Abnt C1 | |
VK_ABNT_C2 = 0xC20000 # 0xC2 0xC20000 # Abnt C2 | |
VK_ADD = 0x6B0000 # 0x6B 0x6B0000 # Numpad + | |
VK_ATTN = 0xF60000 # 0xF6 0xF60000 # Attn | |
VK_BACK = 0x80000 # 0x08 0x80000 # Backspace | |
VK_CANCEL = 0x30000 # 0x03 0x30000 # Break | |
VK_CLEAR = 0xC0000 # 0x0C 0xC0000 # Clear | |
VK_CRSEL = 0xF70000 # 0xF7 0xF70000 # Cr Sel | |
VK_DECIMAL = 0x6E0000 # 0x6E 0x6E0000 # Numpad . | |
VK_DIVIDE = 0x6F0000 # 0x6F 0x6F0000 # Numpad / | |
VK_EREOF = 0xF90000 # 0xF9 0xF90000 # Er Eof | |
VK_ESCAPE = 0x1B0000 # 0x1B 0x1B0000 # Esc | |
VK_EXECUTE = 0x2B0000 # 0x2B 0x2B0000 # Execute | |
VK_EXSEL = 0xF80000 # 0xF8 0xF80000 # Ex Sel | |
VK_ICO_CLEAR = 0xE60000 # 0xE6 0xE60000 # IcoClr | |
VK_ICO_HELP = 0xE30000 # 0xE3 0xE30000 # IcoHlp | |
VK_KEY_0 = 0x300000 # 0x30 0x300000 # ('0') 0 | |
VK_KEY_1 = 0x310000 # 0x31 0x310000 # ('1') 1 | |
VK_KEY_2 = 0x320000 # 0x32 0x320000 # ('2') 2 | |
VK_KEY_3 = 0x330000 # 0x33 0x330000 # ('3') 3 | |
VK_KEY_4 = 0x340000 # 0x34 0x340000 # ('4') 4 | |
VK_KEY_5 = 0x350000 # 0x35 0x350000 # ('5') 5 | |
VK_KEY_6 = 0x360000 # 0x36 0x360000 # ('6') 6 | |
VK_KEY_7 = 0x370000 # 0x37 0x370000 # ('7') 7 | |
VK_KEY_8 = 0x380000 # 0x38 0x380000 # ('8') 8 | |
VK_KEY_9 = 0x390000 # 0x39 0x390000 # ('9') 9 | |
VK_KEY_A = 0x410000 # 0x41 0x410000 # ('A') A | |
VK_KEY_B = 0x420000 # 0x42 0x420000 # ('B') B | |
VK_KEY_C = 0x430000 # 0x43 0x430000 # ('C') C | |
VK_KEY_D = 0x440000 # 0x44 0x440000 # ('D') D | |
VK_KEY_E = 0x450000 # 0x45 0x450000 # ('E') E | |
VK_KEY_F = 0x460000 # 0x46 0x460000 # ('F') F | |
VK_KEY_G = 0x470000 # 0x47 0x470000 # ('G') G | |
VK_KEY_H = 0x480000 # 0x48 0x480000 # ('H') H | |
VK_KEY_I = 0x490000 # 0x49 0x490000 # ('I') I | |
VK_KEY_J = 0x4A0000 # 0x4A 0x4A0000 # ('J') J | |
VK_KEY_K = 0x4B0000 # 0x4B 0x4B0000 # ('K') K | |
VK_KEY_L = 0x4C0000 # 0x4C 0x4C0000 # ('L') L | |
VK_KEY_M = 0x4D0000 # 0x4D 0x4D0000 # ('M') M | |
VK_KEY_N = 0x4E0000 # 0x4E 0x4E0000 # ('N') N | |
VK_KEY_O = 0x4F0000 # 0x4F 0x4F0000 # ('O') O | |
VK_KEY_P = 0x500000 # 0x50 0x500000 # ('P') P | |
VK_KEY_Q = 0x510000 # 0x51 0x510000 # ('Q') Q | |
VK_KEY_R = 0x520000 # 0x52 0x520000 # ('R') R | |
VK_KEY_S = 0x530000 # 0x53 0x530000 # ('S') S | |
VK_KEY_T = 0x540000 # 0x54 0x540000 # ('T') T | |
VK_KEY_U = 0x550000 # 0x55 0x550000 # ('U') U | |
VK_KEY_V = 0x560000 # 0x56 0x560000 # ('V') V | |
VK_KEY_W = 0x570000 # 0x57 0x570000 # ('W') W | |
VK_KEY_X = 0x580000 # 0x58 0x580000 # ('X') X | |
VK_KEY_Y = 0x590000 # 0x59 0x590000 # ('Y') Y | |
VK_KEY_Z = 0x5A0000 # 0x5A 0x5A0000 # ('Z') Z | |
VK_MULTIPLY = 0x6A0000 # 0x6A 0x6A0000 # Numpad * | |
VK_NONAME = 0xFC0000 # 0xFC 0xFC0000 # NoName | |
VK_NUMPAD0 = 0x600000 # 0x60 0x600000 # Numpad 0 | |
VK_NUMPAD1 = 0x610000 # 0x61 0x610000 # Numpad 1 | |
VK_NUMPAD2 = 0x620000 # 0x62 0x620000 # Numpad 2 | |
VK_NUMPAD3 = 0x630000 # 0x63 0x630000 # Numpad 3 | |
VK_NUMPAD4 = 0x640000 # 0x64 0x640000 # Numpad 4 | |
VK_NUMPAD5 = 0x650000 # 0x65 0x650000 # Numpad 5 | |
VK_NUMPAD6 = 0x660000 # 0x66 0x660000 # Numpad 6 | |
VK_NUMPAD7 = 0x670000 # 0x67 0x670000 # Numpad 7 | |
VK_NUMPAD8 = 0x680000 # 0x68 0x680000 # Numpad 8 | |
VK_NUMPAD9 = 0x690000 # 0x69 0x690000 # Numpad 9 | |
VK_OEM_1 = 0xBA0000 # 0xBA 0xBA0000 # OEM_1 (: | |
VK_OEM_102 = 0xE20000 # 0xE2 0xE20000 # OEM_102 (> | |
VK_OEM_2 = 0xBF0000 # 0xBF 0xBF0000 # OEM_2 (? | |
VK_OEM_3 = 0xC00000 # 0xC0 0xC00000 # OEM_3 (~ | |
VK_OEM_4 = 0xDB0000 # 0xDB 0xDB0000 # OEM_4 ({ | |
VK_OEM_5 = 0xDC0000 # 0xDC 0xDC0000 # OEM_5 (| | |
VK_OEM_6 = 0xDD0000 # 0xDD 0xDD0000 # OEM_6 (} | |
VK_OEM_7 = 0xDE0000 # 0xDE 0xDE0000 # OEM_7 (" | |
VK_OEM_8 = 0xDF0000 # 0xDF 0xDF0000 # OEM_8 (§ | |
VK_OEM_ATTN = 0xF00000 # 0xF0 0xF00000 # Oem Attn | |
VK_OEM_AUTO = 0xF30000 # 0xF3 0xF30000 # Auto | |
VK_OEM_AX = 0xE10000 # 0xE1 0xE10000 # Ax | |
VK_OEM_BACKTAB = 0xF50000 # 0xF5 0xF50000 # Back Tab | |
VK_OEM_CLEAR = 0xFE0000 # 0xFE 0xFE0000 # OemClr | |
VK_OEM_COMMA = 0xBC0000 # 0xBC 0xBC0000 # OEM_COMMA (< | |
VK_OEM_COPY = 0xF20000 # 0xF2 0xF20000 # Copy | |
VK_OEM_CUSEL = 0xEF0000 # 0xEF 0xEF0000 # Cu Sel | |
VK_OEM_ENLW = 0xF40000 # 0xF4 0xF40000 # Enlw | |
VK_OEM_FINISH = 0xF10000 # 0xF1 0xF10000 # Finish | |
VK_OEM_FJ_LOYA = 0x950000 # 0x95 0x950000 # Loya | |
VK_OEM_FJ_MASSHOU = 0x930000 # 0x93 0x930000 # Mashu | |
VK_OEM_FJ_ROYA = 0x960000 # 0x96 0x960000 # Roya | |
VK_OEM_FJ_TOUROKU = 0x940000 # 0x94 0x940000 # Touroku | |
VK_OEM_JUMP = 0xEA0000 # 0xEA 0xEA0000 # Jump | |
VK_OEM_MINUS = 0xBD0000 # 0xBD 0xBD0000 # OEM_MINUS (_ | |
VK_OEM_PA1 = 0xEB0000 # 0xEB 0xEB0000 # OemPa1 | |
VK_OEM_PA2 = 0xEC0000 # 0xEC 0xEC0000 # OemPa2 | |
VK_OEM_PA3 = 0xED0000 # 0xED 0xED0000 # OemPa3 | |
VK_OEM_PERIOD = 0xBE0000 # 0xBE 0xBE0000 # OEM_PERIOD (> | |
VK_OEM_PLUS = 0xBB0000 # 0xBB 0xBB0000 # OEM_PLUS (+ | |
VK_OEM_RESET = 0xE90000 # 0xE9 0xE90000 # Reset | |
VK_OEM_WSCTRL = 0xEE0000 # 0xEE 0xEE0000 # WsCtrl | |
VK_PA1 = 0xFD0000 # 0xFD 0xFD0000 # Pa1 | |
VK_PACKET = 0xE70000 # 0xE7 0xE70000 # Packet | |
VK_PLAY = 0xFA0000 # 0xFA 0xFA0000 # Play | |
VK_PROCESSKEY = 0xE50000 # 0xE5 0xE50000 # Process | |
VK_RETURN = 0xD0000 # 0x0D 0xD0000 # Enter | |
VK_SELECT = 0x290000 # 0x29 0x290000 # Select | |
VK_SEPARATOR = 0x6C0000 # 0x6C 0x6C0000 # Separator | |
VK_SPACE = 0x200000 # 0x20 0x200000 # Space | |
VK_SUBTRACT = 0x6D0000 # 0x6D 0x6D0000 # Num - | |
VK_TAB = 0x90000 # 0x09 0x90000 # Tab | |
VK_ZOOM = 0xFB0000 # 0xFB 0xFB0000 # Zoom | |
VK__none_ = 0xFF0000 # 0xFF 0xFF0000 # no VK | |
VK_ACCEPT = 0x1E0000 # 0x1E 0x1E0000 # Accept | |
VK_APPS = 0x5D0000 # 0x5D 0x5D0000 # Context Menu | |
VK_BROWSER_BACK = 0xA60000 # 0xA6 0xA60000 # Browser Back | |
VK_BROWSER_FAVORITES = 0xAB0000 # 0xAB 0xAB0000 # Browser Favorites | |
VK_BROWSER_FORWARD = 0xA70000 # 0xA7 0xA70000 # Browser Forward | |
VK_BROWSER_HOME = 0xAC0000 # 0xAC 0xAC0000 # Browser Home | |
VK_BROWSER_REFRESH = 0xA80000 # 0xA8 0xA80000 # Browser Refresh | |
VK_BROWSER_SEARCH = 0xAA0000 # 0xAA 0xAA0000 # Browser Search | |
VK_BROWSER_STOP = 0xA90000 # 0xA9 0xA90000 # Browser Stop | |
VK_CAPITAL = 0x140000 # 0x14 0x140000 # Caps Lock | |
VK_CONVERT = 0x1C0000 # 0x1C 0x1C0000 # Convert | |
VK_DELETE = 0x2E0000 # 0x2E 0x2E0000 # Delete | |
VK_DOWN = 0x280000 # 0x28 0x280000 # Arrow Down | |
VK_END = 0x230000 # 0x23 0x230000 # End | |
VK_F1 = 0x700000 # 0x70 0x700000 # F1 | |
VK_F10 = 0x790000 # 0x79 0x790000 # F10 | |
VK_F11 = 0x7A0000 # 0x7A 0x7A0000 # F11 | |
VK_F12 = 0x7B0000 # 0x7B 0x7B0000 # F12 | |
VK_F13 = 0x7C0000 # 0x7C 0x7C0000 # F13 | |
VK_F14 = 0x7D0000 # 0x7D 0x7D0000 # F14 | |
VK_F15 = 0x7E0000 # 0x7E 0x7E0000 # F15 | |
VK_F16 = 0x7F0000 # 0x7F 0x7F0000 # F16 | |
VK_F17 = 0x800000 # 0x80 0x800000 # F17 | |
VK_F18 = 0x810000 # 0x81 0x810000 # F18 | |
VK_F19 = 0x820000 # 0x82 0x820000 # F19 | |
VK_F2 = 0x710000 # 0x71 0x710000 # F2 | |
VK_F20 = 0x830000 # 0x83 0x830000 # F20 | |
VK_F21 = 0x840000 # 0x84 0x840000 # F21 | |
VK_F22 = 0x850000 # 0x85 0x850000 # F22 | |
VK_F23 = 0x860000 # 0x86 0x860000 # F23 | |
VK_F24 = 0x870000 # 0x87 0x870000 # F24 | |
VK_F3 = 0x720000 # 0x72 0x720000 # F3 | |
VK_F4 = 0x730000 # 0x73 0x730000 # F4 | |
VK_F5 = 0x740000 # 0x74 0x740000 # F5 | |
VK_F6 = 0x750000 # 0x75 0x750000 # F6 | |
VK_F7 = 0x760000 # 0x76 0x760000 # F7 | |
VK_F8 = 0x770000 # 0x77 0x770000 # F8 | |
VK_F9 = 0x780000 # 0x78 0x780000 # F9 | |
VK_FINAL = 0x180000 # 0x18 0x180000 # Final | |
VK_HELP = 0x2F0000 # 0x2F 0x2F0000 # Help | |
VK_HOME = 0x240000 # 0x24 0x240000 # Home | |
VK_ICO_00 = 0xE40000 # 0xE4 0xE40000 # Ico00 * | |
VK_INSERT = 0x2D0000 # 0x2D 0x2D0000 # Insert | |
VK_JUNJA = 0x170000 # 0x17 0x170000 # Junja | |
VK_KANA = 0x150000 # 0x15 0x150000 # Kana | |
VK_KANJI = 0x190000 # 0x19 0x190000 # Kanji | |
VK_LAUNCH_APP1 = 0xB60000 # 0xB6 0xB60000 # App1 | |
VK_LAUNCH_APP2 = 0xB70000 # 0xB7 0xB70000 # App2 | |
VK_LAUNCH_MAIL = 0xB40000 # 0xB4 0xB40000 # Mail | |
VK_LAUNCH_MEDIA_SELECT = 0xB50000 # 0xB5 0xB50000 # Media | |
VK_LBUTTON = 0x10000 # 0x01 0x10000 # Left Button | |
VK_LCONTROL = 0xA20000 # 0xA2 0xA20000 # Left Ctrl | |
VK_LEFT = 0x250000 # 0x25 0x250000 # Arrow Left | |
VK_LMENU = 0xA40000 # 0xA4 0xA40000 # Left Alt | |
VK_LSHIFT = 0xA00000 # 0xA0 0xA00000 # Left Shift | |
VK_LWIN = 0x5B0000 # 0x5B 0x5B0000 # Left Win | |
VK_MBUTTON = 0x40000 # 0x04 0x40000 # Middle Button | |
VK_MEDIA_NEXT_TRACK = 0xB00000 # 0xB0 0xB00000 # Next Track | |
VK_MEDIA_PLAY_PAUSE = 0xB30000 # 0xB3 0xB30000 # Play / | |
VK_MEDIA_PREV_TRACK = 0xB10000 # 0xB1 0xB10000 # Previous Track | |
VK_MEDIA_STOP = 0xB20000 # 0xB2 0xB20000 # Stop | |
VK_MODECHANGE = 0x1F0000 # 0x1F 0x1F0000 # Mode Change | |
VK_NEXT = 0x220000 # 0x22 0x220000 # Page Down | |
VK_NONCONVERT = 0x1D0000 # 0x1D 0x1D0000 # Non Convert | |
VK_NUMLOCK = 0x900000 # 0x90 0x900000 # Num Lock | |
VK_OEM_FJ_JISHO = 0x920000 # 0x92 0x920000 # Jisho | |
VK_PAUSE = 0x130000 # 0x13 0x130000 # Pause | |
VK_PRINT = 0x2A0000 # 0x2A 0x2A0000 # Print | |
VK_PRIOR = 0x210000 # 0x21 0x210000 # Page Up | |
VK_RBUTTON = 0x20000 # 0x02 0x20000 # Right Button | |
VK_RCONTROL = 0xA30000 # 0xA3 0xA30000 # Right Ctrl | |
VK_RIGHT = 0x270000 # 0x27 0x270000 # Arrow Right | |
VK_RMENU = 0xA50000 # 0xA5 0xA50000 # Right Alt | |
VK_RSHIFT = 0xA10000 # 0xA1 0xA10000 # Right Shift | |
VK_RWIN = 0x5C0000 # 0x5C 0x5C0000 # Right Win | |
VK_SCROLL = 0x910000 # 0x91 0x910000 # Scrol Lock | |
VK_SLEEP = 0x5F0000 # 0x5F 0x5F0000 # Sleep | |
VK_SNAPSHOT = 0x2C0000 # 0x2C 0x2C0000 # Print Screen | |
VK_UP = 0x260000 # 0x26 0x260000 # Arrow Up | |
VK_VOLUME_DOWN = 0xAE0000 # 0xAE 0xAE0000 # Volume Down | |
VK_VOLUME_MUTE = 0xAD0000 # 0xAD 0xAD0000 # Volume Mute | |
VK_VOLUME_UP = 0xAF0000 # 0xAF 0xAF0000 # Volume Up | |
VK_XBUTTON1 = 0x50000 # 0x05 0x50000 # X Button | |
VK_XBUTTON2 = 0x60000 # 0x06 0x60000 # X Button | |
""" | |
geiger_bulb._master_brightness = m_cv2.Key.step( | |
geiger_bulb._master_brightness, cv2_key, m_cv2.Key.VK_UP, m_cv2.Key.VK_DOWN, 1/10, True, 0, 1 | |
) | |
""" | |
def step(value, cv2_key, key_up, key_down, step, b_clamp, value_min, value_max): | |
if cv2_key == key_up: | |
value += step | |
elif cv2_key == key_down: | |
value -= step | |
if b_clamp: | |
value = np.clip(value, value_min, value_max) | |
print(m_system.func(), "{:.6f}".format(value)) | |
return value | |
### class Key ### |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment