<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css"> <title>Heelo huggingface.js</title> </head> <body> <script type="module"> import { HfInference } from 'https://cdn.skypack.dev/@huggingface/inference@1.5.2'; let hf = new HfInference() document.querySelector("#tokenBtn").addEventListener("click", (e) => { const token = document.querySelector("#token").value; hf = new HfInference(token) init() }) document.addEventListener("DOMContentLoaded", async () => { init(); }) function init() { const img = document.querySelector("#example-img"); fetch(img.src) .then((res) => res.blob()) .then((blob) => { detectObjects(blob, img.naturalWidth, img.naturalHeight); }) } async function detectObjects(imgBlob, imgW, imgH) { try { const objectDetectionRes = await hf.objectDetection({ data: imgBlob, model: "facebook/detr-resnet-50" }) document.querySelector("#output").innerText = JSON.stringify(objectDetectionRes, null, 2); const container = document.querySelector("#image-container"); container.querySelectorAll(".box").forEach((el) => el.remove()); const boxes = objectDetectionRes.map((obj) => { const w = (100 * (obj.box.xmax - obj.box.xmin)) / imgW; const h = (100 * (obj.box.ymax - obj.box.ymin)) / imgH; const box = document.createElement("div"); box.classList.add("box"); box.style.position = "absolute"; box.style.border = "solid 2px red"; box.style.top = (100 * obj.box.ymin) / imgH + "%"; box.style.left = (100 * obj.box.xmin) / imgW + "%"; box.style.width = w + "%"; box.style.height = h + "%"; box.appendChild(document.createTextNode(obj.label)); return box; }) boxes.forEach((box) => { container.appendChild(box); }) } catch (e) { document.querySelector("#output").innerText = e.message; } } document.querySelector("#image-file").addEventListener("change", async (e) => { const file = e.target.files[0]; const newImage = new Image(); newImage.src = URL.createObjectURL(file) const img = document.querySelector("#example-img"); img.src = newImage.src; newImage.onload = () => { detectObjects(file, newImage.naturalWidth, newImage.naturalHeight); } }); </script> <h1> Hello huggingface.js </h1> <div> <label for="token">HF Token</label> <div style="display: flex"> <input style="flex: 2 1 0%" type="password" id="token" /> <button style="flex: 1 1 0%" id="tokenBtn">Set Token</button> </div> </div> <input type="file" id="image-file" accept="image/*" /> <div style="position: relative;" id="image-container"> <img id="example-img" width="100%" src="https://raw.githubusercontent.com/huggingface/huggingface.js/main/packages/inference/test/cats.png"> </div> <pre><code id="output"></code></pre> </body> </html>