Toggle navigation
Toggle navigation
This project
Loading...
Sign in
2020-2-capstone-design2
/
2014104149
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
Graduate
2020-11-26 05:24:16 +0000
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
4518c4d89967f65bc20a52839709023e64e58136
4518c4d8
1 parent
bf0df067
Change cropping method to imporve accuracy
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
25 additions
and
24 deletions
flask/app.py
flask/config.cnf
flask/templates/index.html
flask/templates/register.html
flask/app.py
View file @
4518c4d
...
...
@@ -126,12 +126,12 @@ def verify():
break
if
verified_id
!=
None
:
sql
=
"SELECT DATE(attendance_time) FROM student_attendance WHERE (lecture_id=
%
s) AND (student_id=
%
s) AND (DATE(attendance_time) = CURDATE());"
cursor
.
execute
(
sql
,
(
'0'
,
verified_id
))
sql
=
"SELECT student_name FROM student WHERE student_id =
%
s"
cursor
.
execute
(
sql
,
(
verified_id
))
row_data
=
cursor
.
fetchone
()
verified_name
=
row_data
[
'student_name'
]
sql
=
"SELECT DATE(attendance_time) FROM student_attendance WHERE (lecture_id=
%
s) AND (student_id=
%
s) AND (DATE(attendance_time) = CURDATE());"
cursor
.
execute
(
sql
,
(
'0'
,
verified_id
))
if
cursor
.
rowcount
==
0
:
sql
=
"INSERT INTO student_attendance(lecture_id, student_id, status) VALUES (
%
s,
%
s,
%
s)"
# TODO: attend / late 처리
...
...
flask/config.cnf
View file @
4518c4d
[verification_server]
model=models/20200816-080621
threshold=0.75
threshold=0.7
6
5
image_size=160
...
...
flask/templates/index.html
View file @
4518c4d
...
...
@@ -6,8 +6,6 @@
<style>
#container
{
margin
:
0px
auto
;
width
:
640px
;
height
:
480px
;
border
:
10px
#333
solid
;
}
#videoInput
{
...
...
@@ -24,7 +22,9 @@
function
init
()
{
let
video
=
document
.
getElementById
(
"videoInput"
);
let
video
=
document
.
getElementById
(
'videoInput'
);
let
container
=
document
.
getElementById
(
'container'
);
let
canvasOutput
=
document
.
getElementById
(
"canvasOutput"
);
if
(
navigator
.
mediaDevices
.
getUserMedia
){
navigator
.
mediaDevices
.
getUserMedia
({
video
:
true
})
.
then
(
function
(
stream
)
{
...
...
@@ -32,6 +32,10 @@ function init()
video
.
addEventListener
(
'canplay'
,
()
=>
{
video
.
width
=
video
.
videoWidth
;
video
.
height
=
video
.
videoHeight
;
container
.
style
.
width
=
video
.
videoWidth
+
'px'
;
container
.
style
.
height
=
video
.
videoHeight
+
'px'
;
canvasOutput
.
width
=
video
.
videoWidth
;
canvasOutput
.
height
=
video
.
videoHeight
;
load_cascade
();
});
}).
catch
(
function
(
err0r
)
{
...
...
@@ -59,7 +63,7 @@ let canvasOutput = document.getElementById("canvasOutput");
let
canvasContext
=
canvasOutput
.
getContext
(
'2d'
);
let
src
=
new
cv
.
Mat
(
video
.
height
,
video
.
width
,
cv
.
CV_8UC4
);
let
dst
=
new
cv
.
Mat
(
video
.
height
,
video
.
width
,
cv
.
CV_8UC4
);
let
gray
=
new
cv
.
Mat
();
//
let gray = new cv.Mat();
let
cap
=
new
cv
.
VideoCapture
(
video
);
let
faces
=
new
cv
.
RectVector
();
let
classifier
=
new
cv
.
CascadeClassifier
();
...
...
@@ -109,22 +113,21 @@ function processVideo() {
let
begin
=
Date
.
now
();
// start processing.
cap
.
read
(
src
);
cv
.
flip
(
src
,
src
,
1
);
src
.
copyTo
(
dst
);
cv
.
cvtColor
(
dst
,
gray
,
cv
.
COLOR_RGBA2GRAY
,
0
);
//
cv.cvtColor(dst, gray, cv.COLOR_RGBA2GRAY, 0);
// detect faces.
let
msize
=
new
cv
.
Size
(
120
,
120
);
classifier
.
detectMultiScale
(
gray
,
faces
,
1.1
,
3
,
0
,
msize
);
let
msize
=
new
cv
.
Size
(
video
.
width
/
4
,
video
.
height
/
4
);
classifier
.
detectMultiScale
(
dst
,
faces
,
1.1
,
3
,
0
,
msize
);
// draw faces.
console
.
log
(
'draw faces'
);
for
(
let
i
=
0
;
i
<
faces
.
size
();
++
i
)
{
let
face
=
faces
.
get
(
i
);
let
point1
=
new
cv
.
Point
(
face
.
x
,
face
.
y
);
let
point2
=
new
cv
.
Point
(
face
.
x
+
face
.
width
,
face
.
y
+
face
.
height
);
cv
.
rectangle
(
dst
,
point1
,
point2
,
[
255
,
0
,
0
,
255
]);
cv
.
rectangle
(
dst
,
point1
,
point2
,
[
255
,
0
,
0
,
255
]
,
8
);
let
cropped
=
new
cv
.
Mat
();
let
margin_x
=
face
.
width
/
5
;
let
margin_y
=
face
.
height
/
5
;
let
rect
=
new
cv
.
Rect
(
Math
.
max
(
face
.
x
-
margin_x
,
0
),
Math
.
max
(
face
.
y
-
margin_y
,
0
),
face
.
width
+
margin_x
,
face
.
height
+
margin_y
);
let
rect
=
new
cv
.
Rect
(
face
.
x
,
face
.
y
,
face
.
width
,
face
.
height
);
cropped
=
src
.
roi
(
rect
);
let
tempCanvas
=
document
.
createElement
(
"canvas"
);
cv
.
imshow
(
tempCanvas
,
cropped
);
...
...
@@ -143,7 +146,7 @@ function processVideo() {
var
newDiv
=
document
.
createElement
(
"div"
);
var
newContent
=
document
.
createTextNode
(
'['
+
data
.
student_id
+
'/'
+
data
.
student_name
+
']'
+
"출석"
);
newDiv
.
appendChild
(
newContent
);
document
.
body
.
appendChild
(
newDiv
);
document
.
body
.
appendChild
(
newDiv
);
}
else
if
(
data
.
status
==
"already"
){
var
newDiv
=
document
.
createElement
(
"div"
);
...
...
flask/templates/register.html
View file @
4518c4d
...
...
@@ -38,18 +38,18 @@ function detect_face()
ctx
.
drawImage
(
tempImage
,
0
,
0
);
let
src
=
cv
.
imread
(
canvas
);
let
dst
=
new
cv
.
Mat
(
src
.
cols
,
src
.
rows
,
cv
.
CV_8UC4
);
let
gray
=
new
cv
.
Mat
();
//
let gray = new cv.Mat();
let
faces
=
new
cv
.
RectVector
();
let
classifier
=
new
cv
.
CascadeClassifier
();
classifier
.
load
(
'haarcascade_frontalface_default.xml'
);
src
.
copyTo
(
dst
);
cv
.
cvtColor
(
dst
,
gray
,
cv
.
COLOR_RGBA2GRAY
,
0
);
let
msize
=
new
cv
.
Size
(
120
,
120
);
//
cv.cvtColor(dst, gray, cv.COLOR_RGBA2GRAY, 0);
let
msize
=
new
cv
.
Size
(
tempImage
.
width
/
4
,
tempImage
.
height
/
4
);
// detect faces.
classifier
.
detectMultiScale
(
gray
,
faces
,
1.1
,
3
,
0
,
msize
);
classifier
.
detectMultiScale
(
dst
,
faces
,
1.1
,
3
,
0
,
msize
);
if
(
faces
.
size
()
==
0
)
{
alert
(
'얼굴이 인식되지 않았습니다.'
);
alert
(
'얼굴이 인식되지 않았습니다.
얼굴 이미지가 작지 않은지 확인해주세요.
'
);
}
else
if
(
faces
.
size
()
>
1
)
{
...
...
@@ -60,10 +60,8 @@ function detect_face()
let
face
=
faces
.
get
(
i
);
let
point1
=
new
cv
.
Point
(
face
.
x
,
face
.
y
);
let
point2
=
new
cv
.
Point
(
face
.
x
+
face
.
width
,
face
.
y
+
face
.
height
);
cv
.
rectangle
(
dst
,
point1
,
point2
,
[
255
,
0
,
0
,
255
]);
let
margin_x
=
face
.
width
/
5
;
let
margin_y
=
face
.
height
/
5
;
let
rect
=
new
cv
.
Rect
(
Math
.
max
(
face
.
x
-
margin_x
,
0
),
Math
.
max
(
face
.
y
-
margin_y
,
0
),
face
.
width
+
margin_x
,
face
.
height
+
margin_y
);
cv
.
rectangle
(
dst
,
point1
,
point2
,
[
255
,
0
,
0
,
255
],
8
);
let
rect
=
new
cv
.
Rect
(
face
.
x
,
face
.
y
,
face
.
width
,
face
.
height
);
let
cropped
=
src
.
roi
(
rect
);
cv
.
imshow
(
tempCanvas
,
cropped
);
}
...
...
Please
register
or
login
to post a comment