Showing
2 changed files
with
17 additions
and
7 deletions
| ... | @@ -100,7 +100,7 @@ function main() | ... | @@ -100,7 +100,7 @@ function main() |
| 100 | let canvasContext = canvasOutput.getContext('2d'); | 100 | let canvasContext = canvasOutput.getContext('2d'); |
| 101 | let src = new cv.Mat(video.height, video.width, cv.CV_8UC4); | 101 | let src = new cv.Mat(video.height, video.width, cv.CV_8UC4); |
| 102 | let dst = new cv.Mat(video.height, video.width, cv.CV_8UC4); | 102 | let dst = new cv.Mat(video.height, video.width, cv.CV_8UC4); |
| 103 | - var dsize = new cv.Size(canvasOutput.width, canvasOutput.height); | 103 | + let dsize = new cv.Size(canvasOutput.width, canvasOutput.height); |
| 104 | let cap = new cv.VideoCapture(video); | 104 | let cap = new cv.VideoCapture(video); |
| 105 | let faces = new cv.RectVector(); | 105 | let faces = new cv.RectVector(); |
| 106 | let classifier = new cv.CascadeClassifier(); | 106 | let classifier = new cv.CascadeClassifier(); | ... | ... |
| ... | @@ -41,12 +41,20 @@ function init() | ... | @@ -41,12 +41,20 @@ function init() |
| 41 | .then(function (stream) { | 41 | .then(function (stream) { |
| 42 | video.srcObject = stream; | 42 | video.srcObject = stream; |
| 43 | video.addEventListener('canplay', () => { | 43 | video.addEventListener('canplay', () => { |
| 44 | + var screenWidth = $(document).width(); | ||
| 45 | + var screenHeight = $(document).height(); | ||
| 46 | + var contentWidth = $('.w3-content').width(); | ||
| 47 | + var contentHeight = $('.w3-content').height(); | ||
| 48 | + var ratio = 1.0; | ||
| 44 | video.width = video.videoWidth; | 49 | video.width = video.videoWidth; |
| 45 | video.height = video.videoHeight; | 50 | video.height = video.videoHeight; |
| 46 | - container.style.width = video.videoWidth + 'px'; | 51 | + if (video.width > screenWidth || contentHeight > screenHeight){ |
| 47 | - container.style.height = video.videoHeight + 'px'; | 52 | + ratio = Math.min(screenWidth / video.width * 1.0, 1 - (contentHeight - screenheight) / (video.height * 1.0)); |
| 48 | - canvasOutput.width = video.videoWidth; | 53 | + } |
| 49 | - canvasOutput.height = video.videoHeight; | 54 | + container.style.width = Math.round(video.width * ratio) + 'px'; |
| 55 | + container.style.height = Math.round(video.height * ratio) + 'px'; | ||
| 56 | + canvasOutput.width = Math.round(video.width * ratio); | ||
| 57 | + canvasOutput.height = Math.round(video.height * ratio); | ||
| 50 | load_cascade(); | 58 | load_cascade(); |
| 51 | }); | 59 | }); |
| 52 | }).catch(function (err0r) { | 60 | }).catch(function (err0r) { |
| ... | @@ -73,6 +81,7 @@ function main() | ... | @@ -73,6 +81,7 @@ function main() |
| 73 | let canvasContext = canvasOutput.getContext('2d'); | 81 | let canvasContext = canvasOutput.getContext('2d'); |
| 74 | let src = new cv.Mat(video.height, video.width, cv.CV_8UC4); | 82 | let src = new cv.Mat(video.height, video.width, cv.CV_8UC4); |
| 75 | let dst = new cv.Mat(video.height, video.width, cv.CV_8UC4); | 83 | let dst = new cv.Mat(video.height, video.width, cv.CV_8UC4); |
| 84 | + let dsize = new cv.Size(canvasOutput.width, canvasOutput.height); | ||
| 76 | let cap = new cv.VideoCapture(video); | 85 | let cap = new cv.VideoCapture(video); |
| 77 | let faces = new cv.RectVector(); | 86 | let faces = new cv.RectVector(); |
| 78 | let classifier = new cv.CascadeClassifier(); | 87 | let classifier = new cv.CascadeClassifier(); |
| ... | @@ -158,6 +167,7 @@ function main() | ... | @@ -158,6 +167,7 @@ function main() |
| 158 | } | 167 | } |
| 159 | } | 168 | } |
| 160 | // to do resize preview | 169 | // to do resize preview |
| 170 | + cv.resize(dst, dst, dsize, 0, 0, cv.INTER_AREA); | ||
| 161 | cv.imshow('canvasOutput', dst); | 171 | cv.imshow('canvasOutput', dst); |
| 162 | // schedule the next one. | 172 | // schedule the next one. |
| 163 | let delay = 1000/FPS - (Date.now() - begin); | 173 | let delay = 1000/FPS - (Date.now() - begin); |
| ... | @@ -232,7 +242,7 @@ function submit() | ... | @@ -232,7 +242,7 @@ function submit() |
| 232 | <body onload="cv['onRuntimeInitialized']=()=>{init();};" class="w3-light-grey"> | 242 | <body onload="cv['onRuntimeInitialized']=()=>{init();};" class="w3-light-grey"> |
| 233 | <!-- w3-content defines a container for fixed size centered content, | 243 | <!-- w3-content defines a container for fixed size centered content, |
| 234 | and is wrapped around the whole page content, except for the footer in this example --> | 244 | and is wrapped around the whole page content, except for the footer in this example --> |
| 235 | - <div class="w3-content" style="max-width:1400px"> | 245 | + <div class="w3-content"> |
| 236 | <!-- Header --> | 246 | <!-- Header --> |
| 237 | <header class="w3-container w3-center"> | 247 | <header class="w3-container w3-center"> |
| 238 | <h1><b>얼굴 등록</b></h1> | 248 | <h1><b>얼굴 등록</b></h1> |
| ... | @@ -246,7 +256,7 @@ and is wrapped around the whole page content, except for the footer in this exam | ... | @@ -246,7 +256,7 @@ and is wrapped around the whole page content, except for the footer in this exam |
| 246 | <video autoplay="true" id="videoInput" style="display: none; object-fit:cover;"></video> | 256 | <video autoplay="true" id="videoInput" style="display: none; object-fit:cover;"></video> |
| 247 | <canvas id="canvasOutput"></canvas> | 257 | <canvas id="canvasOutput"></canvas> |
| 248 | </div> | 258 | </div> |
| 249 | - <div> | 259 | + <div id="inputForm"> |
| 250 | <strong>얼굴 이미지는 서버에 저장되지 않습니다</strong><br> | 260 | <strong>얼굴 이미지는 서버에 저장되지 않습니다</strong><br> |
| 251 | <strong>(복원 불가능한 512차원 벡터로 변환됩니다)</strong><br> | 261 | <strong>(복원 불가능한 512차원 벡터로 변환됩니다)</strong><br> |
| 252 | <strong>학번과 이름은 임의로 입력해주세요</strong><br> | 262 | <strong>학번과 이름은 임의로 입력해주세요</strong><br> | ... | ... |
-
Please register or login to post a comment