live-vision / public /sketch.js
fffiloni's picture
Upload 953 files
f9f0fec verified
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);
}