Toggle navigation
Toggle navigation
This project
Loading...
Sign in
2020-1-capstone-design1
/
KHY_Project1
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Authored by
Graduate
2020-06-17 22:43:10 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
2cf26965426fc7106d3c7939399db5cd273ee916
2cf26965
1 parent
08a0a104
Modify client GUI
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
23 deletions
client/client.py
register/register.py
server/server.py
client/client.py
View file @
2cf2696
...
...
@@ -5,6 +5,7 @@
import
tkinter
as
tk
import
tkinter.font
import
tkinter.messagebox
import
tkinter.scrolledtext
import
threading
import
torch
import
numpy
as
np
...
...
@@ -48,9 +49,17 @@ class Client(tk.Frame):
self
.
cap
.
set
(
3
,
self
.
cam_width
)
self
.
cap
.
set
(
4
,
self
.
cam_height
)
# Application Function
# cam에서 MTCNN 적용하는 영역
self
.
detecting_square
=
(
200
,
200
)
# 영상 위에 사각형 색상 지정
self
.
rectangle_color
=
(
0
,
0
,
255
)
# tkinter GUI
self
.
width
=
740
self
.
height
=
64
0
self
.
height
=
70
0
self
.
parent
=
parent
self
.
parent
.
title
(
"출석시스템"
)
self
.
parent
.
geometry
(
"
%
dx
%
d+100+100"
%
(
self
.
width
,
self
.
height
))
...
...
@@ -74,12 +83,18 @@ class Client(tk.Frame):
self
.
label
=
tk
.
Label
(
self
,
image
=
image
)
self
.
label
.
grid
(
row
=
1
,
column
=
0
,
columnspan
=
20
)
self
.
log
=
tk
.
Text
(
self
)
self
.
log
=
tk
.
scrolledtext
.
ScrolledText
(
self
,
wrap
=
tk
.
WORD
,
state
=
tk
.
DISABLED
,
width
=
96
,
height
=
10
)
self
.
log
.
grid
(
row
=
2
,
column
=
0
,
columnspan
=
20
)
self
.
quit
=
tk
.
Button
(
self
,
text
=
"나가기"
,
fg
=
"red"
,
command
=
self
.
stop
)
self
.
quit
.
grid
(
row
=
5
,
column
=
10
)
self
.
quit
.
grid
(
row
=
3
,
column
=
10
)
def
logging
(
self
,
text
):
self
.
log
.
config
(
state
=
tk
.
NORMAL
)
self
.
log
.
insert
(
tkinter
.
CURRENT
,
text
)
self
.
log
.
insert
(
tkinter
.
CURRENT
,
'
\n
'
)
self
.
log
.
config
(
state
=
tk
.
DISABLED
)
def
detect_face
(
self
,
frame
):
...
...
@@ -97,8 +112,6 @@ class Client(tk.Frame):
x1
,
y1
,
x2
,
y2
=
box
if
(
x2
-
x1
)
*
(
y2
-
y1
)
<
15000
:
# 얼굴 해상도가 너무 낮으면 무시
self
.
alert
.
config
(
text
=
"카메라에 더 가까이 접근해주세요."
,
fg
=
"red"
)
self
.
alert
.
update
()
continue
image
=
frame
image_list
.
append
(
image
)
...
...
@@ -109,23 +122,34 @@ class Client(tk.Frame):
def
mainthread
(
self
):
t
=
threading
.
currentThread
()
asyncio
.
set_event_loop
(
self
.
event_loop
)
x1
=
int
(
self
.
cam_width
/
2
-
self
.
detecting_square
[
0
]
/
2
)
x2
=
int
(
self
.
cam_width
/
2
+
self
.
detecting_square
[
0
]
/
2
)
y1
=
int
(
self
.
cam_height
/
2
-
self
.
detecting_square
[
1
]
/
2
)
y2
=
int
(
self
.
cam_height
/
2
+
self
.
detecting_square
[
1
]
/
2
)
while
getattr
(
t
,
"do_run"
,
True
):
ret
,
frame
=
self
.
cap
.
read
()
# model에 이용하기 위해 convert
converted
=
cv2
.
cvtColor
(
frame
,
cv2
.
COLOR_BGR2RGB
)
face_list
,
image_list
=
self
.
detect_face
(
converted
)
face_list
,
image_list
=
self
.
detect_face
(
converted
[
y1
:
y2
,
x1
:
x2
])
# 얼굴이 인식되면 출석요청
self
.
event_loop
.
run_until_complete
(
self
.
send_face
(
face_list
,
image_list
))
# show image
frame
=
cv2
.
rectangle
(
frame
,
(
x1
,
y1
),
(
x2
,
y2
),
self
.
rectangle_color
,
3
)
converted
=
cv2
.
cvtColor
(
frame
,
cv2
.
COLOR_BGR2RGB
)
# 거울상으로 보여준다
converted
=
cv2
.
flip
(
converted
,
1
)
image
=
Image
.
fromarray
(
converted
)
image
=
ImageTk
.
PhotoImage
(
image
)
self
.
label
.
configure
(
image
=
image
)
self
.
label
.
image
=
image
# kind of double buffering
# 얼굴이 인식되면 요청
if
face_list
:
self
.
event_loop
.
run_until_complete
(
self
.
send_face
(
face_list
,
image_list
))
@asyncio.coroutine
def
set_rectangle
(
self
):
self
.
rectangle_color
=
(
255
,
0
,
0
)
yield
from
asyncio
.
sleep
(
1
)
self
.
rectangle_color
=
(
0
,
0
,
255
)
async
def
wait
(
self
,
n
):
await
asyncio
.
sleep
(
n
)
...
...
@@ -141,16 +165,16 @@ class Client(tk.Frame):
data
=
json
.
loads
(
recv
)
if
data
[
'status'
]
==
'success'
:
# 성공
self
.
log
.
insert
(
tkinter
.
CURRENT
,
data
[
'student_id'
]
+
'is attend'
)
self
.
log
.
insert
(
tkinter
.
CURRENT
,
'
\n
'
)
self
.
log
ging
(
'출석확인: '
+
data
[
'student_id'
]
)
asyncio
.
ensure_future
(
self
.
set_rectangle
()
)
else
:
self
.
log
.
insert
(
tkinter
.
CURRENT
,
'verification failed:'
+
data
[
'status'
])
self
.
log
.
insert
(
tkinter
.
CURRENT
,
'
\n
'
)
if
data
[
'status'
]
==
'failed'
:
send
=
json
.
dumps
({
'action'
:
'save_image'
,
'image'
:
image
.
tolist
()})
await
websocket
.
send
(
send
)
elif
data
[
'status'
]
==
'already'
:
asyncio
.
ensure_future
(
self
.
set_rectangle
())
except
Exception
as
e
:
self
.
log
.
insert
(
tkinter
.
CURRENT
,
e
)
self
.
log
.
insert
(
tkinter
.
CURRENT
,
'
\n
'
)
self
.
logging
(
e
)
def
stop
(
self
):
self
.
thread
.
do_run
=
False
...
...
register/register.py
View file @
2cf2696
...
...
@@ -164,6 +164,8 @@ class Register(tk.Frame):
# show image
converted
=
cv2
.
cvtColor
(
frame
,
cv2
.
COLOR_BGR2RGB
)
# 유저에게 보여줄 땐 거울상으로 보여준다
converted
=
cv2
.
flip
(
converted
,
1
)
image
=
Image
.
fromarray
(
converted
)
image
=
ImageTk
.
PhotoImage
(
image
)
self
.
label
.
configure
(
image
=
image
)
...
...
server/server.py
View file @
2cf2696
...
...
@@ -51,18 +51,18 @@ async def register(websocket):
global
clients
async
with
lock
:
clients
.
add
(
websocket
)
remote_ip
=
websocket
.
remote_address
[
0
]
msg
=
'[{ip}] connected'
.
format
(
ip
=
remote_ip
)
print
(
msg
)
#
remote_ip = websocket.remote_address[0]
#
msg='[{ip}] connected'.format(ip=remote_ip)
#
print(msg)
async
def
unregister
(
websocket
):
global
lock
global
clients
async
with
lock
:
clients
.
remove
(
websocket
)
remote_ip
=
websocket
.
remote_address
[
0
]
msg
=
'[{ip}] disconnected'
.
format
(
ip
=
remote_ip
)
print
(
msg
)
#
remote_ip = websocket.remote_address[0]
#
msg='[{ip}] disconnected'.format(ip=remote_ip)
#
print(msg)
async
def
thread
(
websocket
,
path
):
await
register
(
websocket
)
...
...
Please
register
or
login
to post a comment