Arsala Grey
initial commit
7e2f64e
raw history blame
No virus
3.51 kB
const { createApp, ref, onMounted } = Vue;
import { HfInference } from "https://cdn.skypack.dev/@huggingface/inference@latest";
const getRandomImageUrl = async () => {
const randomImageRequest = await fetch("https://source.unsplash.com/random/640x480")
return randomImageRequest.url
}
const ObjectDatectionModels = ["facebook/detr-resnet-50"]
const getImageBuffer = async (imageUrl) => {
const imageRequest = await fetch(imageUrl)
const imageBuffer = await imageRequest.arrayBuffer()
return imageBuffer
}
const drawDetectedObjects = (img, detections) => {
const container = document.createElement('div');
container.id = 'detected-objects-container';
container.style.top = `${img.offsetTop}px`;
container.style.left = `${img.offsetLeft}px`;
container.style.width = `${img.width}px`;
container.style.height = `${img.height}px`;
img.parentNode.insertBefore(container, img);
detections.forEach(detection => {
const { xmin, ymin, xmax, ymax } = detection.box;
const label = detection.label;
const confidence = Math.floor(detection.score * 100) + '%';
const box = document.createElement('div');
box.classList.add('bounding-box');
box.style.left = `${xmin}px`;
box.style.top = `${ymin}px`;
box.style.width = `${xmax - xmin}px`;
box.style.height = `${ymax - ymin}px`;
const tooltip = document.createElement('div');
tooltip.classList.add('tooltip');
tooltip.innerText = `${label}: ${confidence}`;
box.appendChild(tooltip);
container.appendChild(box);
});
};
const app = createApp({
setup() {
const token = ref(localStorage.getItem("token") || "");
const models = ref(ObjectDatectionModels);
const selectedModel = ref("");
const imageUrl = ref("");
const detectedObjects = ref([]);
const run = async () => {
try {
const hf = new HfInference(token.value);
const imageData = await getImageBuffer(imageUrl.value);
const result = await hf.objectDetection({
data: imageData,
model: selectedModel.value,
});
console.log(result);
detectedObjects.value = result
drawDetectedObjects(document.getElementById('current-image'), result)
} catch (e) {
console.log(e);
}
};
const shuffle = async () => {
imageUrl.value = await getRandomImageUrl()
document.getElementById('detected-objects-container').remove()
document.getElementsByClassName('bounding-box').forEach(box => box.remove())
};
onMounted(async () => {
const localStorageToken = localStorage.getItem("token")
if (localStorageToken) {
token.value = localStorageToken;
}
selectedModel.value = models.value[0]
imageUrl.value = await getRandomImageUrl()
window.onresize = () => {
document.getElementById('detected-objects-container').remove()
document.getElementsByClassName('bounding-box').forEach(box => box.remove())
}
});
return {
token,
run,
shuffle,
models,
selectedModel,
imageUrl
};
},
});
app.mount("#generate-text-stream-app");