Margiela fit detector

Version från den 17 november 2025 kl. 17.19 av Love Snarfsson (diskussion | bidrag) (Skapade sidan med '<!-- Margiela Fit Detector 🥼🫐 --> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]"></script> <div style="text-align:center; color:#ddd; font-family:Arial, sans-serif; background:#111; padding:20px; border-radius:12px; margin:20px auto; max-width:780px;"> <h2>Margiela Fit Detector 🥼🫐</h2> <p>Ladda upp en bild för att se om din fit liknar Maison Margiela.</p> <input type="file" id="inputImage" accept="image/*" style="margin:10px;"><b...')
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]"></script>

Margiela Fit Detector 🥼🫐

Ladda upp en bild för att se om din fit liknar Maison Margiela.

 <input type="file" id="inputImage" accept="image/*" style="margin:10px;">
<button onclick="classifyMargiela()" style="padding:10px 16px; background:#333; border:none; border-radius:8px; color:#eee; cursor:pointer;"> Kör analys </button>
Ingen analys ännu…

Din bild

     <img id="userImg" style="max-width:240px; border-radius:8px; border:2px solid #555;">

Referens (Margiela vibe)

     <img id="refImg" src="https://i.ibb.co/0KfYm1f/margiela-ref.jpg" style="max-width:240px; border-radius:8px; border:2px solid #555;">

<script> let mgModel; const MG_THRESHOLD = 0.62; // Margiela-tröskel, kan justeras

async function mgLoadModel() {

 mgModel = await tf.loadLayersModel(
   "https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v2_1.0_224/model.json"
 );

} mgLoadModel();

function mgImageToTensor(imgEl) {

 return tf.tidy(() => {
   return tf.browser.fromPixels(imgEl)
     .resizeNearestNeighbor([224,224])
     .toFloat()
     .div(127.5).sub(1)
     .expandDims();
 });

}

async function mgCosineSimilarity(a, b) {

 const dot = a.mul(b).sum();
 const magA = a.norm();
 const magB = b.norm();
 return (await dot.data())[0] / ((await magA.data())[0] * (await magB.data())[0]);

}

async function classifyMargiela() {

 const fileInput = document.getElementById("inputImage");
 if (!fileInput.files.length) {
   document.getElementById("margielaResult").innerText = "Du måste ladda upp en bild först.";
   return;
 }
 const userImg = document.getElementById("userImg");
 userImg.src = URL.createObjectURL(fileInput.files[0]);
 await new Promise(r => userImg.onload = r);
 const refImg = document.getElementById("refImg");
 const embUser = mgModel.predict(mgImageToTensor(userImg));
 const embRef  = mgModel.predict(mgImageToTensor(refImg));
 const sim = await mgCosineSimilarity(embUser, embRef);
 const pct = (sim * 100).toFixed(1);
 document.getElementById("margielaResult").innerHTML =
   (sim >= MG_THRESHOLD)
     ? `🔥 Din fit är Margiela-liknande! Likhet: ${pct}%`
     : `😐 Inte särskilt Margiela… Likhet: ${pct}%`;
 embUser.dispose();
 embRef.dispose();

} </script>