Spaces:
Runtime error
Runtime error
let myCanvas | |
const arrows = [] | |
let current_points = [] | |
let t_size | |
let button | |
let isOnCanvas = false; | |
let hf_tkn; | |
let socket; | |
let live = false; | |
let timer; | |
let capture; | |
let instructions; | |
let current_instructions; | |
let messages_list = [] | |
let timerWaiting; | |
let waiting = false; | |
//----------------------------------------------------- | |
//----------------------------------------------------- | |
function preload(){ | |
// Socket events handlers | |
socket = io(); | |
// client-side | |
socket.on("connect", () => { | |
console.log(socket.id); | |
}); | |
socket.on("hello", (arg) => { | |
let api_data_test = arg[1] | |
console.log(api_data_test) | |
}); | |
socket.on("api_error", (arg) => { | |
let message = arg | |
console.log(message) | |
}); | |
// ββββββββ | |
} | |
function call_api(socket, instructions){ | |
console.log("Calling API ... ") | |
waiting = true; | |
show_loading() | |
cnv_data = myCanvas.elt.toDataURL('image/png'); | |
let data = [ | |
cnv_data, | |
instructions | |
] | |
socket.emit("ask_api", data); | |
} | |
function setup() { | |
pixelDensity(1) | |
myCanvas = createCanvas(576, 320); | |
background(220) | |
myCanvas.id('myCanvas') | |
myCanvas.parent("canvas-container") | |
socket.on("api_response", (response) => { | |
waiting = false; | |
clearTimeout(timerWaiting) | |
vision_text = response[0] | |
console.log(vision_text) | |
messages_list.push(vision_text) | |
if(live === true){ | |
loadingDiv = document.getElementById("loading-div") | |
loadingDiv.innerHTML = "_" | |
display_messages() | |
console.log("Sending new requestion in 3 seconds") | |
timer = setTimeout(() => { | |
console.log(current_instructions) | |
call_api(socket, current_instructions) | |
}, 3000) | |
} | |
}); | |
// Watch if cursor is above canvas or not | |
let getCanvas = document.getElementById('myCanvas'); | |
getCanvas.addEventListener("pointerdown", (e) => { | |
//console.log("pointerDown"); | |
getCanvas.setPointerCapture(e.pointerId); | |
isOnCanvas = true; | |
}, false); | |
getCanvas.addEventListener("pointerup", (e) => { | |
//console.log("pointerUp"); | |
if (isOnCanvas) { | |
getCanvas.releasePointerCapture(e.pointerId); | |
isOnCanvas = false; | |
} | |
}, false); | |
//βββββββββ | |
// Buttons | |
start_capture_button=createButton("turn on cam") | |
start_capture_button.mousePressed(() => { | |
capture = createCapture(VIDEO); | |
capture.hide(); | |
}) | |
start_button = createButton('start live vision'); | |
start_button.mousePressed(() => { | |
live = true; | |
current_instructions = input_instructions.value() | |
console.log("Live in ON") | |
console.log(current_instructions) | |
call_api(socket, current_instructions) | |
}) | |
stop_button = createButton('stop all'); | |
stop_button.mousePressed(() => { | |
live = false; | |
waiting = false; | |
// Abort the timer | |
clearTimeout(timer); | |
clearTimeout(timerWaiting) | |
loadingDiv.innerHTML = "_" | |
if(capture){ | |
capture.remove(); | |
capture = undefined | |
} | |
console.log("live is OFF") | |
//redraw() | |
}) | |
input_instructions = createInput("What is happening ? ") | |
change_instructions = createButton("change instructions") | |
change_instructions.mousePressed(() => { | |
current_instructions = input_instructions.value() | |
}) | |
start_capture_button.parent("buttons-container") | |
start_button.parent("buttons-container") | |
stop_button.parent("buttons-container") | |
input_instructions.parent("instructions-container") | |
change_instructions.parent("instructions-container") | |
loadingDiv = document.getElementById("loading-div") | |
} | |
function draw() { | |
background(220); | |
textAlign(CENTER); | |
text('turn on your webcam', width/2, height/2); | |
if(capture != undefined){ | |
image(capture, 0, 0) | |
} | |
} | |
function display_messages(){ | |
visionDiv = document.getElementById("vision-text-container") | |
visionDiv.innerHTML = "" | |
//for(i=0; i < messages_list.length - 1; i++){ | |
// newNode = document.createElement('div'); | |
// newNode.classList.add('text-msg') | |
// newNode.innerHTML = messages_list[i]; | |
// visionDiv.appendChild(newNode); | |
//} | |
newNode_last = document.createElement('div'); | |
newNode_last.classList.add('text-msg') | |
visionDiv.appendChild(newNode_last); | |
const text_msg = messages_list[messages_list.length - 1] | |
const words = text_msg.split(" "); // splits the text into an array of words | |
// Function that returns a promise which resolves after a specified number of milliseconds | |
function wait(ms) { | |
return new Promise((resolve) => setTimeout(resolve, ms)); | |
} | |
async function streamText(words) { | |
for (let word of words) { | |
//console.log(word); | |
newNode_last.innerHTML += " " + word; | |
//visionDiv.scrollTop = visionDiv.scrollHeight; | |
await wait(30); // Wait for 1 second before logging next word | |
} | |
} | |
streamText(words); | |
} | |
function clean(){ | |
if(waiting == true){ | |
loadingDiv.innerHTML = "" | |
timerWaiting = setTimeout(show_loading, 500) | |
} else { | |
loadingDiv.innerHTML = "_" | |
} | |
} | |
function show_loading(){ | |
if(waiting == true){ | |
loadingDiv.innerHTML = "" | |
loading_text = ". . ." | |
} else { | |
loading_text = "_" | |
} | |
const dots = loading_text.split(" "); // splits the text into an array of words | |
// Function that returns a promise which resolves after a specified number of milliseconds | |
function wait(ms) { | |
if(waiting == true){ | |
return new Promise((resolve) => resolveTimer = setTimeout(resolve, ms)); | |
} else { | |
clearTimeout(resolveTimer) | |
loadingDiv.innerHTML = "_" | |
} | |
} | |
async function streamDots(words) { | |
if(waiting == true){ | |
for (let word of words) { | |
//console.log(word); | |
loadingDiv.innerHTML += " " + word; | |
//visionDiv.scrollTop = visionDiv.scrollHeight; | |
await wait(500); // Wait for 1 second before logging next word | |
} | |
//console.log("ENLEVE") | |
//timerWaiting = setTimeout(show_loading, 500) | |
clean() | |
} else { | |
clearTimeout(timerWaiting) | |
//loadingDiv.innerHTML = "_" | |
} | |
} | |
streamDots(dots); | |
} | |