var loadModels = async () => { await Promise.all([ faceapi.nets.ssdMobilenetv1.loadFromUri("\\weights\\"), faceapi.nets.faceRecognitionNet.loadFromUri("\\weights\\"), faceapi.nets.faceLandmark68Net.loadFromUri("\\weights\\") ]); }; loadModels(); $(document).ready(function () { if ($(window).width() > 992) { $('#desktopDisplay').show(); $('#mobileDisplay').hide(); $('#mobileDisplay').html(''); } if ($(window).width() <= 992) { $('#desktopDisplay').html(''); $('#desktopDisplay').hide(); $('#mobileDisplay').show(); } $(document).on('click', '.upload-image1', function () { $('.md-modal').addClass('md-show'); $('.take_snapshot1').show(); $('.take_snapshot2').hide(); startCamera(); }); $(document).on('click', '.upload-image2', function () { $('.md-modal').addClass('md-show'); $('.take_snapshot1').hide(); $('.take_snapshot2').show(); startCamera(); }); $(document).on('click', '.camera_close', function () { $('.md-modal').removeClass('md-show'); stopCamera(); }); updateSaveButton(); }); //window.onload = async () => { // await loadModels(); // modelsLoaded = true; //}; var modelsLoaded = false; //var ensureModelsLoaded = async () => { // if (!modelsLoaded) { // await loadModels(); // modelsLoaded = true; // } //}; var updateSaveButton = () => { if (!hasErrorPic1 && checkFace1 && !hasErrorPic2 && checkFace2) { $('#SaveImageEmployee').removeClass('disable'); } else { $('#SaveImageEmployee').addClass('disable'); } }; var runCheckFace1 = async () => { const img1 = document.getElementById('pic1'); const detectionPromise1 = await faceapi.detectAllFaces(img1).withFaceLandmarks().withFaceDescriptors(); if (detectionPromise1.length === 1) { console.log('یک چهره در تصویر اول شناسایی شد'); checkFace1 = true; hasErrorPic1 = false; $('#demoResult1').css('border', '2px dashed #148b8b'); } else if (detectionPromise1.length > 1) { $('.alert-msg').show(); $('.alert-msg p').text('بیش از یک چهره در تصویر اول شناسایی شد'); setTimeout(function () { $('.alert-msg').hide(); $('.alert-msg p').text(''); }, 4000); hasErrorPic1 = true; $('#SaveImageEmployee').addClass('disable'); $('.upload-image1').css('background', '#ff090940'); $('#demoResult1').css('border', '2px dashed #ff5c5c'); } else { $('.alert-msg').show(); $('.alert-msg p').text('چهره‌ای در تصویر اول شناسایی نشد'); setTimeout(function () { $('.alert-msg').hide(); $('.alert-msg p').text(''); }, 4000); hasErrorPic1 = true; $('#SaveImageEmployee').addClass('disable'); $('.upload-image1').css('background', '#ff090940'); $('#demoResult1').css('border', '2px dashed #ff5c5c'); } updateSaveButton(); $('#loadingImage1').hide(); }; var runCheckFace2 = async () => { const img2 = document.getElementById('pic2'); const detectionPromise2 = await faceapi.detectAllFaces(img2).withFaceLandmarks().withFaceDescriptors(); if (detectionPromise2.length === 1) { console.log('یک چهره در تصویر دوم شناسایی شد'); checkFace2 = true; hasErrorPic2 = false; $('#demoResult2').css('border', '2px dashed #148b8b'); } else if (detectionPromise2.length > 1) { $('.alert-msg').show(); $('.alert-msg p').text('بیش از یک چهره در تصویر دوم شناسایی شد'); setTimeout(function () { $('.alert-msg').hide(); $('.alert-msg p').text(''); }, 4000); hasErrorPic2 = true; $('#SaveImageEmployee').addClass('disable'); $('.upload-image2').css('background', '#ff090940'); $('#demoResult2').css('border', '2px dashed #ff5c5c'); } else { $('.alert-msg').show(); $('.alert-msg p').text('چهره‌ای در تصویر دوم شناسایی نشد'); setTimeout(function () { $('.alert-msg').hide(); $('.alert-msg p').text(''); }, 4000); hasErrorPic2 = true; $('#SaveImageEmployee').addClass('disable'); $('.upload-image2').css('background', '#ff090940'); $('#demoResult2').css('border', '2px dashed #ff5c5c'); } updateSaveButton(); $('#loadingImage2').hide(); }; var FACING_MODES = JslibHtml5CameraPhoto.FACING_MODES; var IMAGE_TYPES = JslibHtml5CameraPhoto.IMAGE_TYPES; // Check if videoElement is already declared to avoid redeclaration // if (typeof videoElement === 'undefined') { var videoElement = document.getElementById('videoElement'); var cameraPhoto = new JslibHtml5CameraPhoto.default(videoElement); // } function startCamera() { // startCameraMaxResolution cameraPhoto.startCamera(FACING_MODES.USER).then(() => { console.log('Camera started!'); }).catch((error) => { console.log(error); console.error('Camera not started!', error); }); } function stopCamera() { cameraPhoto.stopCamera().then(() => { console.log('Camera stopped!'); }).catch((error) => { console.log('No camera to stop!:', error); }); } function cropAndResizeImage(base64Str, newWidth, newHeight) { return new Promise((resolve) => { let img = new Image(); img.src = base64Str; img.onload = () => { let canvas = document.createElement('canvas'); let ctx = canvas.getContext('2d'); let sideLength = Math.min(img.width, img.height); let startX = (img.width - sideLength) / 2; let startY = (img.height - sideLength) / 2; canvas.width = newWidth; canvas.height = newHeight; ctx.drawImage(img, startX, startY, sideLength, sideLength, 0, 0, newWidth, newHeight); resolve(canvas.toDataURL('image/jpeg')); }; }); } function take_snapshot1() { $('#SaveImageEmployee').addClass('disable'); var sizeFactor = 1; var imageType = IMAGE_TYPES.JPG; var imageCompression = 1; var config = { sizeFactor, imageType, imageCompression }; var dataUri = cameraPhoto.getDataUri(config); cropAndResizeImage(dataUri, 1800, 1800).then((resizedDataUri) => { document.getElementById('result1').innerHTML = ''; document.getElementById('demoResult1').innerHTML = '
' + '' + '' + '' + '
' + '' + '
' + '
' + 'Loading...' + '
' + '
' + ''; //document.getElementById('demoResult1').innerHTML = '
Loading...
'; $('#loadingImage1').css('display', 'flex'); runCheckFace1(); }).catch((error) => { console.error('Error cropping and resizing photo:', error); }); $('.md-modal').removeClass('md-show'); stopCamera(); } function take_snapshot2() { $('#SaveImageEmployee').addClass('disable'); var sizeFactor = 1; var imageType = IMAGE_TYPES.JPG; var imageCompression = 1; var config = { sizeFactor, imageType, imageCompression }; var dataUri = cameraPhoto.getDataUri(config); cropAndResizeImage(dataUri, 1800, 1800).then((resizedDataUri) => { document.getElementById('result2').innerHTML = ''; document.getElementById('demoResult2').innerHTML = '
' + '' + '' + '' + '
' + '' + '
' + '
' + 'Loading...' + '
' + '
' + ''; //document.getElementById('demoResult2').innerHTML = '
Loading...
'; $('#loadingImage2').css('display', 'flex'); runCheckFace2(); }).catch((error) => { console.error('Error cropping and resizing photo:', error); }); $('.md-modal').removeClass('md-show'); stopCamera(); } function closeImage(type) { if (type === "image1") { $('#demoResult1').html(''); $('#demoResult1').html(''); $('#demoResult1').removeAttr('style'); } else if (type === "image2") { $('#demoResult2').html(''); $('#demoResult2').html(''); $('#demoResult2').removeAttr('style'); } else { $('.alert-msg').show(); $('.alert-msg p').text('خطایی رخ داده است.'); setTimeout(function () { $('.alert-msg').hide(); $('.alert-msg p').text(''); }, 4000); } $('#SaveImageEmployee').addClass('disable'); } async function set() { let pic1 = $("#pic1").attr('src'); let pic2 = $("#pic2").attr('src'); const img1 = document.getElementById('pic1'); const img2 = document.getElementById('pic2'); let workshopId = Number($('#workshopId').val()); let employeeId = Number($('#employeeId').val()); if (!hasErrorPic1 && checkFace1 && !hasErrorPic2 && checkFace2) { const detection1 = await faceapi.detectSingleFace(img1).withFaceLandmarks().withFaceDescriptor(); const detection2 = await faceapi.detectSingleFace(img2).withFaceLandmarks().withFaceDescriptor(); console.log(detection1); const distance = faceapi.euclideanDistance(detection1.descriptor, detection2.descriptor); if (distance > 0.45) { $('.alert-msg').show(); $('.alert-msg p').text('چهره اول با چهره دوم مطابقت ندارد'); setTimeout(function () { $('.alert-msg').hide(); $('.alert-msg p').text(''); }, 4000); return; } if (pic1 != null && pic2 != null) { const loading = $('.spinner-loading-progress').show(); const loadingBtn = $('.spinner-loading').show(); let startTime = Date.now(); $('#SaveImageEmployee').addClass('disable'); $.ajax({ type: 'POST', url: takePictureAjax, data: { "base64pic1": pic1, "base64pic2": pic2, "workshopId": workshopId, "employeeId": employeeId }, headers: { "RequestVerificationToken": antiForgeryToken }, xhr: function () { let xhr = new XMLHttpRequest(); // Track the progress of the upload xhr.upload.onprogress = function (e) { if (e.lengthComputable) { var percentComplete = (e.loaded / e.total) * 100; $('#progressBar').text(Math.round(percentComplete) + '%'); $('.spinner-loading-progress').css('width', `${Math.round(percentComplete)}%`); } }; return xhr; }, success: function (response) { let elapsedTime = Date.now() - startTime; let delay = Math.max(1000 - elapsedTime, 0); setTimeout(function () { if (response.isSuccedded) { $('.alert-success-msg').show(); $('.alert-success-msg p').text(response.message); setTimeout(function () { $('.alert-success-msg').hide(); $('.alert-success-msg p').text(''); $(`#ImageEmployee_${employeeId}`).attr("src", `data:image/jpeg;base64,${response.src}`); $(`#ImageEmployeeMobile_${employeeId}`).attr("src", `data:image/jpeg;base64,${response.src}`); $(`#TextUpload_${employeeId}`).text("عکس پرسنل آپلود شده است").removeClass('text-danger'); $(`#TextUploadMobile_${employeeId}`).text("عکس پرسنل آپلود شده است").removeClass('text-danger'); if (!hasPicture) { $(`.btnAvticeAction_${employeeId}`) .removeClass('disable') .addClass('btn-deactive') .attr('id', `togglePersonnelStatus_${response.idRollCall}_desktop`); $(`.IsActiveStringFind_${employeeId}`).attr('id', `IsActiveString_${response.idRollCall}_desktop`).text("غیر فعال کردن"); $(`.btnAvticeActionMobile_${employeeId}`) .removeClass('disable') .addClass('btn-deactive') .attr('id', `togglePersonnelStatus_${response.idRollCall}_mobile`); $(`.IsActiveStringFindMobile_${employeeId}`).attr('id', `IsActiveString_${response.idRollCall}_mobile`).text("غیر فعال کردن"); } $(`#uploadMobileBTN_${employeeId}`).text("ویرایش عکس"); $(`#uploadMobileBTNMobile_${employeeId}`).text("ویرایش عکس"); $(`#Section_${employeeId}`).removeClass("deactive"); $('#SaveImageEmployee').removeClass('disable'); $('#MainModal').modal('hide'); }, 1000); } else { $('#SaveImageEmployee').removeClass('disable'); $('.alert-msg').show(); $('.alert-msg p').text(response.message); setTimeout(function () { $('.alert-msg').hide(); $('.alert-msg p').text(''); }, 3500); } }, delay); // Delay the hiding of the spinner }, error: function (response) { console.log(5, response); } }); } else { $('.alert-msg').show(); $('.alert-msg p').text('گرفتن دو عکس الزامیست'); setTimeout(function () { $('.alert-msg').hide(); $('.alert-msg p').text(''); }, 3500); } } else { $('.alert-msg').show(); $('.alert-msg p').text('گرفتن دو عکس الزامیست'); setTimeout(function () { $('.alert-msg').hide(); $('.alert-msg p').text(''); }, 3500); } }