Spaces:
Sleeping
Sleeping
| var video_facing_mode = "user" | |
| var res_h = 1200 | |
| var res_w = 720 | |
| var video = document.getElementById("webcam") | |
| const canvasElement = document.getElementById("output_canvas"); | |
| const canvasCtx = canvasElement.getContext("2d"); | |
| var webcamRunning | |
| var pic_taken=false | |
| var take_pic_btn= document.getElementById("take-pic") | |
| var clear_pic_btn= document.getElementById("clear-pic") | |
| var send_pic_btn= document.getElementById("send-pic") | |
| var item_info_text= document.getElementById("user_item_info") | |
| var taken_image; | |
| // Check if webcam access is supported. | |
| const hasGetUserMedia = () => { var _a; return !!((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia); }; | |
| // If webcam supported, add event listener to button for when user | |
| // wants to activate it. | |
| if (hasGetUserMedia()) { | |
| document.getElementById("switch-camera").addEventListener("click", switch_camera); | |
| document.getElementById("webcamButton").addEventListener("click", enable_camera); | |
| take_pic_btn.addEventListener("click", take_pic); | |
| clear_pic_btn.addEventListener("click", clear_pic); | |
| send_pic_btn.addEventListener("click", send_pic); | |
| } | |
| else { | |
| console.warn("getUserMedia() is not supported by your browser"); | |
| } | |
| function enable_camera(){ | |
| video_facing_mode = 'environment' | |
| load_camera() | |
| webcamRunning = true | |
| document.getElementById("webcamButton").style.display="none"; | |
| document.getElementById("switch-camera").style.display="block"; | |
| } | |
| async function switch_camera() { | |
| if (video_facing_mode == 'user') { | |
| webcamRunning = false | |
| video_facing_mode = 'environment' | |
| await load_camera() | |
| webcamRunning = true | |
| } | |
| else { | |
| webcamRunning = false | |
| video_facing_mode = 'user' | |
| await load_camera() | |
| webcamRunning = true | |
| } | |
| } | |
| function load_camera() { | |
| const constraints = { | |
| video: { | |
| facingMode: video_facing_mode, | |
| width: { ideal: res_w }, | |
| height: { ideal: res_h } | |
| } | |
| }; | |
| // Activate the webcam stream. | |
| navigator.mediaDevices.getUserMedia(constraints).then((stream) => { | |
| video.srcObject = stream; | |
| video.addEventListener("loadeddata", img_load); | |
| video.addEventListener("loadeddata", ()=>{ | |
| canvasElement.width=video.videoWidth | |
| canvasElement.height=video.videoHeight | |
| }); | |
| }); | |
| } | |
| function img_load(){ | |
| canvasCtx.clearRect(0, 0, canvasElement.width, canvasElement.height); | |
| canvasCtx.drawImage(video, 0, 0, canvasElement.width, (video.videoHeight / video.videoWidth) * canvasElement.width) | |
| if(pic_taken != true){ | |
| setTimeout(function (){img_load()}, 10); | |
| } | |
| } | |
| function take_pic(){ | |
| pic_taken=true; | |
| canvasCtx.clearRect(0, 0, canvasElement.width, canvasElement.height); | |
| canvasCtx.drawImage(video, 0, 0, canvasElement.width, (video.videoHeight / video.videoWidth) * canvasElement.width) | |
| taken_image = canvasElement.toDataURL() | |
| console.log(taken_image) | |
| clear_pic_btn.style.display="inline" | |
| send_pic_btn.style.display="inline" | |
| item_info_text.style.display="inline" | |
| take_pic_btn.style.display="none" | |
| } | |
| function send_pic(){ | |
| send_frame(taken_image); | |
| item_info_text.style.display="none" | |
| clear_pic_btn.style.display="none" | |
| send_pic_btn.style.display="none" | |
| take_pic_btn.style.display="inline" | |
| pic_taken=false; | |
| img_load() | |
| } | |
| function clear_pic(){ | |
| item_info_text.style.display="none" | |
| clear_pic_btn.style.display="none" | |
| send_pic_btn.style.display="none" | |
| take_pic_btn.style.display="inline" | |
| pic_taken=false; | |
| img_load() | |
| } | |
| function send_frame(dataUrl) { | |
| const dataToSend = { | |
| key: dataUrl, | |
| user_item_info: document.getElementById("user_item_info").value | |
| }; | |
| document.getElementById("ai_output").style.display="block" | |
| document.getElementById("ai_output").classList.toggle('animated'); | |
| fetch('/analyse', { | |
| method: 'POST', | |
| headers: { | |
| 'Content-Type': 'application/json' | |
| }, | |
| body: JSON.stringify(dataToSend) // Convert the data to JSON | |
| }) | |
| .then(response => response.text()) | |
| .then(data => { | |
| var htmlContent = marked.parse(data) | |
| document.getElementById("ai_output").innerHTML=htmlContent; | |
| document.getElementById("ai_output").classList.toggle('animated'); | |
| }) | |
| .catch((error) => { | |
| console.error('Error:', error); | |
| }); | |
| } | |
| function updateResolution() { | |
| const value = this.value; | |
| const resolutionK = value / 1000; | |
| const aspectRatio = 16 / 9; | |
| let width, height; | |
| if (resolutionK > 0) { | |
| width = resolutionK * 1000; | |
| height = Math.round(width / aspectRatio); | |
| } else { | |
| width = 0; | |
| height = 0; | |
| } | |
| // Update the displayed resolution | |
| document.getElementById('currentResolution').innerText = `${resolutionK}K`; | |
| res_w=width | |
| res_h=height | |
| } | |
| document.getElementById('resolution').addEventListener('input', updateResolution); | |