Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
U
UI using Gesture Recognition
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
배찬희
UI using Gesture Recognition
Commits
c993fd12
Commit
c993fd12
authored
3 years ago
by
배찬희
Browse files
Options
Downloads
Patches
Plain Diff
commit actgui
parent
ea871036
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
actgui.py
+572
-0
572 additions, 0 deletions
actgui.py
with
572 additions
and
0 deletions
actgui.py
0 → 100644
+
572
−
0
View file @
c993fd12
import
time
import
math
import
pyautogui
#################################################################################
# 손동작 기록
#00000: 기본 상태1
#11000: 좌 클릭(clickPosX,Y,clickValue)
#11100: 우 클릭(clickPosX,Y,clickValue)
#10001: 드래그(dragPosX,Y), 종료
#11001: 캡쳐(shortcut)
#11111: 확대(toZoom, t, tm), 단축키(shortcut)(01100: 복사, 01111: 붙여넣기 11001: 캡쳐, 10001: 종료)
#01000: 기본 상태2, 축소(toZoomOut, t, tm)
#01100: 커서 이동(pos_2,3,time_k_p), 복사(shortcut)
#01110: 실행취소-재실행(pos_4,5)
#01111: 뒤로 가기-앞으로 가기(pos_6,7), 스크롤(pos6,7), 붙여넣기(shortcut)
#-1:
##################################################################################
#prob
global
case
global
preCase
case
=
-
1
preCase
=
-
1
#pos
global
pos
pos
=
[]
# screen size
screenWidth
,
screenHeight
=
pyautogui
.
size
()
pyautogui
.
moveTo
(
720
,
400
)
pyautogui
.
FAILSAFE
=
False
# set pre-pos
global
pos_p2
global
pos_p3
global
pos_p4
global
pos_p5
global
pos_p6
global
pos_p7
pos_p2
=
-
1.0
pos_p3
=
-
1.0
pos_p4
=
-
1.0
pos_p5
=
-
1.0
pos_p6
=
-
1.0
pos_p7
=
-
1.0
# set drag position
global
dragPosX
global
dragPosY
dragPosX
=
-
1.0
dragPosY
=
-
1.0
# set click position
global
clickPosX
global
clickPosX
global
clickValue
clickPosX
=
-
1.0
clickPosY
=
-
1.0
clickValue
=
0
# set time
global
tAt1000
global
tAt1111
global
tAt11111
global
time_k_p
global
tLeftClick
global
tRightClick
global
tTermination
tAt1000
=
0
tAt1111
=
0
tAt11111
=
0
time_k_p
=
0
tRightClick
=
0
tLeftClick
=
0
tTermination
=
0
# flag
global
zoomf
# 0: defalt, 1: zoom, 2: zoomout
global
shortcutf
# 0: defalt, 1: use shortcut
global
scrollf
# 0: defalt, 1: up, 2: down
global
zeroCount
zoomf
=
0
shortcutf
=
0
scrollf
=
0
zeroCount
=
0
def
store_pos
(
Pos
):
global
pos
pos
=
Pos
def
hand_check
(
prob
):
global
case
if
((
prob
[
0
]
==
0.0
)
&
(
prob
[
1
]
==
0.0
)
&
(
prob
[
2
]
==
0.0
)
&
(
prob
[
3
]
==
0.0
)
&
(
prob
[
4
]
==
0.0
)):
case
=
0
return
0
if
((
prob
[
0
]
==
0.0
)
&
(
prob
[
1
]
==
1.0
)
&
(
prob
[
2
]
==
0.0
)
&
(
prob
[
3
]
==
0.0
)
&
(
prob
[
4
]
==
0.0
)):
case
=
1000
return
1000
if
((
prob
[
0
]
==
0.0
)
&
(
prob
[
1
]
==
1.0
)
&
(
prob
[
2
]
==
1.0
)
&
(
prob
[
3
]
==
0.0
)
&
(
prob
[
4
]
==
0.0
)):
case
=
1100
return
1100
if
((
prob
[
0
]
==
0.0
)
&
(
prob
[
1
]
==
1.0
)
&
(
prob
[
2
]
==
1.0
)
&
(
prob
[
3
]
==
1.0
)
&
(
prob
[
4
]
==
0.0
)):
case
=
1110
return
1110
if
((
prob
[
0
]
==
0.0
)
&
(
prob
[
1
]
==
1.0
)
&
(
prob
[
2
]
==
1.0
)
&
(
prob
[
3
]
==
1.0
)
&
(
prob
[
4
]
==
1.0
)):
case
=
1111
return
1111
if
((
prob
[
0
]
==
1.0
)
&
(
prob
[
1
]
==
1.0
)
&
(
prob
[
2
]
==
1.0
)
&
(
prob
[
3
]
==
1.0
)
&
(
prob
[
4
]
==
1.0
)):
case
=
11111
return
11111
if
((
prob
[
0
]
==
1.0
)
&
(
prob
[
1
]
==
1.0
)
&
(
prob
[
2
]
==
0.0
)
&
(
prob
[
3
]
==
0.0
)
&
(
prob
[
4
]
==
0.0
)):
case
=
11000
return
11000
if
((
prob
[
0
]
==
1.0
)
&
(
prob
[
1
]
==
1.0
)
&
(
prob
[
2
]
==
1.0
)
&
(
prob
[
3
]
==
0.0
)
&
(
prob
[
4
]
==
0.0
)):
case
=
11100
return
11100
if
((
prob
[
0
]
==
1.0
)
&
(
prob
[
1
]
==
0.0
)
&
(
prob
[
2
]
==
0.0
)
&
(
prob
[
3
]
==
0.0
)
&
(
prob
[
4
]
==
1.0
)):
case
=
10001
return
10001
if
((
prob
[
0
]
==
1.0
)
&
(
prob
[
1
]
==
1.0
)
&
(
prob
[
2
]
==
0.0
)
&
(
prob
[
3
]
==
0.0
)
&
(
prob
[
4
]
==
0.0
)):
case
=
11000
return
11000
if
((
prob
[
0
]
==
1.0
)
&
(
prob
[
1
]
==
1.0
)
&
(
prob
[
2
]
==
0.0
)
&
(
prob
[
3
]
==
0.0
)
&
(
prob
[
4
]
==
1.0
)):
case
=
11001
return
11001
if
((
prob
[
0
]
==
1.0
)
&
(
prob
[
1
]
==
1.0
)
&
(
prob
[
2
]
==
1.0
)
&
(
prob
[
3
]
==
1.0
)
&
(
prob
[
4
]
==
0.0
)):
case
=
11110
return
11110
case
=
-
1
return
-
1
def
initialize_coordinate
():
# 좌표 초기화
currentMouseX
,
currentMouseY
=
pyautogui
.
position
()
if
(
currentMouseX
>
screenWidth
-
1
):
pyautogui
.
moveTo
(
screenWidth
-
1
,
currentMouseY
)
currentMouseX
,
currentMouseY
=
pyautogui
.
position
()
if
(
currentMouseY
>
screenHeight
-
1
):
pyautogui
.
moveTo
(
currentMouseX
,
screenHeight
-
1
)
currentMouseX
,
currentMouseY
=
pyautogui
.
position
()
if
(
currentMouseX
<
0
):
pyautogui
.
moveTo
(
0
,
currentMouseY
)
currentMouseX
,
currentMouseY
=
pyautogui
.
position
()
if
(
currentMouseY
<
0
):
pyautogui
.
moveTo
(
currentMouseX
,
0
)
def
initialize_variable
():
if
(
case
==
preCase
):
global
pos_p2
global
pos_p3
global
pos_p4
global
pos_p5
global
pos_p6
global
pos_p7
global
time_k_p
global
clickPosX
global
clickPosY
global
clickValue
global
scrollf
global
zoomf
if
(
case
!=
0
):
zeroCount
=
0
if
(
case
!=
1000
and
case
!=
11111
):
zoomf
=
0
if
(
case
!=
1000
and
case
!=
1111
):
scrollf
=
0
if
(
case
!=
11111
and
case
!=
1100
and
case
!=
1111
and
case
!=
11001
):
shortcutf
=
0
if
(
case
!=
1100
):
pos_p2
=
-
1.0
pos_p3
=
-
1.0
time_k_p
=
0
if
(
case
!=
1110
):
pos_p4
=
-
1.0
pos_p5
=
-
1.0
if
(
case
!=
1111
):
pos_p6
=
-
1.0
pos_p7
=
-
1.0
if
(
case
!=
11000
and
case
!=
11100
and
case
!=
11110
):
clickPosX
=
-
1.0
clickPosY
=
-
1.0
clickValue
=
0
def
terminate_check
():
if
(
shortcutf
==
1
and
case
==
10001
):
# 종료
global
tTermination
if
(
tTermination
==
0
):
tTermination
=
time
.
time
()
t
=
time
.
time
()
-
tTermination
if
(
t
>=
2
):
tTermination
=
0
if
(
t
>
1
and
t
<
2
):
print
(
"
Termination
"
)
return
True
return
False
def
hand_speed
(
diff_pos2
,
diff_pos3
):
diff_t
=
time
.
time
()
-
time_k_p
d
=
math
.
sqrt
(
pow
(
diff_pos2
,
2
)
+
pow
(
diff_pos3
,
2
))
v
=
d
/
diff_t
if
(
v
>
800
):
mult_v
=
2.0
elif
(
v
<=
800
and
v
>
400
):
mult_v
=
1.5
elif
(
v
<=
400
and
v
>
100
):
mult_v
=
1.0
else
:
mult_v
=
0.5
return
mult_v
##########################################
# 뒤에 shortcut = 0
##########################################
def
shortcut
():
if
(
shortcutf
==
1
):
if
(
case
==
1100
):
# 단축키 복사
pyautogui
.
hotkey
(
'
command
'
,
'
c
'
)
if
(
case
==
1111
):
# 단축키 붙여넣기
pyautogui
.
hotkey
(
'
command
'
,
'
v
'
)
if
(
case
==
11001
):
# 단축키 캡쳐
print
(
"
capture
"
)
pyautogui
.
hotkey
(
'
command
'
,
'
shift
'
,
'
4
'
)
##########################################
# true이면 pos_p67 갱신
##########################################
def
forward_back
(
diff_pos6
):
if
(
abs
(
diff_pos6
)
>
200.0
):
# 가로
if
(
diff_pos6
>
0
):
print
(
"
back
"
)
pyautogui
.
hotkey
(
'
command
'
,
'
[
'
)
elif
(
diff_pos6
<
0
):
print
(
"
forward
"
)
pyautogui
.
hotkey
(
'
command
'
,
'
]
'
)
return
True
return
False
##########################################
# true이면 pos_p67 갱신
##########################################
def
scroll
():
print
(
"
scroll
"
)
if
(
scrollf
==
1
):
pyautogui
.
scroll
(
5
)
elif
(
scrollf
==
2
):
pyautogui
.
scroll
(
-
5
)
##########################################
# true이면 pos_p45 갱신
##########################################
def
undo_redo
(
diff_pos4
):
if
(
abs
(
diff_pos4
)
>
200.0
):
# 가로
if
(
diff_pos4
>
0
):
print
(
"
undo
"
)
pyautogui
.
hotkey
(
'
command
'
,
'
z
'
)
elif
(
diff_pos4
<
0
):
print
(
"
redo
"
)
pyautogui
.
hotkey
(
'
command
'
,
'
shift
'
,
'
z
'
)
return
True
return
False
##########################################
# 좌클릭
##########################################
def
left_click
():
global
tLeftClick
if
(
clickValue
!=
1
):
if
(
tLeftClick
==
0
):
tLeftClick
=
time
.
time
()
t
=
time
.
time
()
-
tLeftClick
if
(
t
>=
2
):
tLeftClick
=
time
.
time
()
elif
(
t
>
0.4
and
t
<
2
):
# currentMouseX, currentMouseY = pyautogui.position()
# if (clickPosX != currentMouseX or clickPosY != currentMouseY):
pyautogui
.
click
(
button
=
'
left
'
)
return
True
return
False
##########################################
# 우클릭
##########################################
def
right_click
():
if
(
clickValue
!=
2
):
# currentMouseX, currentMouseY = pyautogui.position()
# if (clickPosX != currentMouseX or clickPosY != currentMouseY):
pyautogui
.
click
(
button
=
'
right
'
)
return
True
return
False
##########################################
# false 시 dragPosX,Y 갱신, print("remeber")
# true 시 dragPosX,Y 초기화
###############################################
def
drag
():
if
(
dragPosX
==
-
1.0
and
dragPosY
==
-
1.0
):
return
False
currentMouseX
,
currentMouseY
=
pyautogui
.
position
()
if
(
abs
(
currentMouseX
-
dragPosX
)
>
0
or
abs
(
currentMouseY
-
dragPosY
)
>
0
):
pyautogui
.
moveTo
(
dragPosX
,
dragPosY
)
pyautogui
.
dragTo
(
currentMouseX
,
currentMouseY
,
2
,
button
=
'
left
'
)
return
True
def
zoom
():
if
(
zoomf
==
1
):
pyautogui
.
hotkey
(
'
command
'
,
'
+
'
)
elif
(
zoomf
==
2
):
pyautogui
.
hotkey
(
'
command
'
,
'
-
'
)
##########################################
# true 시
# pos_p2 = pos[2]
# pos_p3 = pos[3]
# time_k_p = time.time()
##########################################
def
move_cursor
(
diff_pos2
,
diff_pos3
):
if
(
abs
(
diff_pos2
)
>
10.0
or
abs
(
diff_pos3
)
>
10.0
):
# 속도 구하기
mult_v
=
hand_speed
(
diff_pos2
,
diff_pos3
)
currentMouseX
,
currentMouseY
=
pyautogui
.
position
()
if
(
abs
(
diff_pos2
)
>
10.0
and
abs
(
diff_pos3
)
>
10.0
):
nextX
=
(
screenWidth
-
1
)
if
currentMouseX
-
int
(
diff_pos2
*
mult_v
)
>
screenWidth
-
1
else
(
currentMouseX
-
int
(
diff_pos2
)
*
mult_v
)
nextY
=
(
screenHeight
-
1
)
if
currentMouseY
-
int
(
diff_pos3
*
mult_v
)
>
screenHeight
-
1
else
(
currentMouseY
-
int
(
diff_pos3
)
*
mult_v
)
nextX
=
0
if
nextX
<
0
else
nextX
nextY
=
0
if
nextY
<
0
else
nextY
pyautogui
.
moveTo
(
nextX
,
nextY
,
0.2
)
return
True
elif
(
abs
(
diff_pos2
)
>
10.0
):
# 상하
nextX
=
(
screenWidth
-
1
)
if
currentMouseX
-
int
(
diff_pos2
*
mult_v
*
1.5
)
>
screenWidth
-
1
else
(
currentMouseX
-
int
(
diff_pos2
)
*
mult_v
*
1.5
)
nextX
=
0
if
nextX
<
0
else
nextX
nextY
=
currentMouseY
pyautogui
.
moveTo
(
nextX
,
nextY
,
0.2
)
return
True
elif
(
abs
(
diff_pos3
)
>
10.0
):
# 좌우
nextX
=
currentMouseX
nextY
=
(
screenHeight
-
1
)
if
currentMouseY
-
int
(
diff_pos3
*
mult_v
)
>
screenHeight
-
1
else
(
currentMouseY
-
int
(
diff_pos3
)
*
mult_v
)
nextY
=
0
if
nextY
<
0
else
nextY
pyautogui
.
moveTo
(
nextX
,
nextY
,
0.2
)
return
True
else
:
return
False
def
act_gui
():
global
preCase
global
pos_p2
global
pos_p3
global
pos_p4
global
pos_p5
global
pos_p6
global
pos_p7
global
dragPosX
global
dragPosY
global
clickValue
global
clickPosX
global
clickPosY
global
tAt1000
global
tAt1111
global
tAt11111
global
time_k_p
global
tLeftClick
global
tRightClick
global
zoomf
global
shortcutf
global
scrollf
if
(
case
==
1000
):
if
(
zoomf
==
2
):
zoom
()
tAt1000
=
time
.
time
()
elif
(
scrollf
==
2
):
scroll
()
tAt1000
=
time
.
time
()
elif
(
time
.
time
()
-
tAt11111
<
1
):
zoomf
=
2
elif
(
time
.
time
()
-
tAt1111
<
1
):
scrollf
=
2
else
:
scrollf
=
0
zoomf
=
0
tAt1000
=
time
.
time
()
elif
(
case
==
1100
):
#단축키 복사
##########################################
# 뒤에 shortcutf = 0
##########################################
shortcut
()
shortcutf
=
0
if
(
pos_p2
==
-
1.0
and
pos_p3
==
-
1.0
):
pos_p2
=
pos
[
2
]
pos_p3
=
pos
[
3
]
time_k_p
=
time
.
time
()
diff_pos2
=
pos_p2
-
pos
[
2
]
diff_pos3
=
pos_p3
-
pos
[
3
]
# 커서 이동
##########################################-
# true 시
# pos_p2 = pos[2]
# pos_p3 = pos[3]
# time_k_p = time.time()
##########################################
bool
=
move_cursor
(
diff_pos2
,
diff_pos3
)
if
(
bool
):
pos_p2
=
pos
[
2
]
pos_p3
=
pos
[
3
]
time_k_p
=
time
.
time
()
elif
(
case
==
1110
):
if
(
pos_p4
==
-
1.0
and
pos_p5
==
-
1.0
):
pos_p4
=
pos
[
4
]
pos_p5
=
pos
[
5
]
diff_pos4
=
pos_p4
-
pos
[
4
]
# 재실행, 실행취소
##########################################
# true이면 pos_p45 갱신
##########################################
bool
=
undo_redo
(
diff_pos4
)
if
(
bool
):
pos_p4
=
pos
[
4
]
pos_p5
=
pos
[
5
]
elif
(
case
==
1111
):
if
(
shortcutf
==
1
):
# 단축키 붙여넣기
##########################################
# 뒤에 shortcutf = 0
##########################################
shortcut
()
shortcutf
=
0
elif
(
scrollf
==
1
):
scroll
()
tAt1111
=
time
.
time
()
elif
(
time
.
time
()
-
tAt1000
<
1
):
scrollf
=
1
else
:
scrollf
=
0
tAt1111
=
time
.
time
()
if
(
pos_p6
==
-
1.0
and
pos_p7
==
-
1.0
):
pos_p6
=
pos
[
6
]
pos_p7
=
pos
[
7
]
diff_pos6
=
pos_p6
-
pos
[
6
]
diff_pos7
=
pos_p7
-
pos
[
7
]
# 앞으로 뒤로 가기
##########################################
# true이면 pos_p67 갱신
##########################################
bool
=
forward_back
(
diff_pos6
)
if
(
bool
):
pos_p6
=
pos
[
6
]
pos_p7
=
pos
[
7
]
elif
(
case
==
11111
):
if
(
zoomf
==
1
):
zoom
()
tAt11111
=
time
.
time
()
elif
(
time
.
time
()
-
tAt1000
<
1
):
zoomf
=
1
else
:
zoomf
=
0
tAt11111
=
time
.
time
()
shortcutf
=
1
elif
(
case
==
11000
):
bool
=
left_click
()
if
(
bool
):
currentMouseX
,
currentMouseY
=
pyautogui
.
position
()
clickPosX
=
currentMouseX
clickPosY
=
currentMouseY
clickValue
=
1
elif
(
case
==
11100
or
case
==
11110
):
bool
=
right_click
()
if
(
bool
):
currentMouseX
,
currentMouseY
=
pyautogui
.
position
()
clickPosX
=
currentMouseX
clickPosY
=
currentMouseY
clickValue
=
2
elif
(
case
==
10001
):
if
(
shortcutf
==
0
):
# 드래그
##########################################
# false 시 dragPosX,Y 갱신, print("remeber")
# true 시 dragPosX,Y 초기화
##########################################
bool
=
drag
()
if
(
bool
):
dragPosX
=
-
1.0
dragPosY
=
-
1.0
else
:
print
(
"
remember
"
)
currentMouseX
,
currentMouseY
=
pyautogui
.
position
()
dragPosX
=
currentMouseX
dragPosY
=
currentMouseY
elif
(
case
==
11001
):
# 단축키 캡쳐
##########################################
#뒤에 shortcutf = 0
##########################################
shortcut
()
shortcutf
=
0
preCase
=
case
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment