NutriFind / static /index.js
HuggingFace-SK
add markdown support
3e9e64f
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);