File size: 2,458 Bytes
8a35d1e
2d74efe
52841d3
8a35d1e
2d74efe
52841d3
 
 
 
 
 
 
 
 
 
 
2d74efe
52841d3
 
 
 
2d74efe
52841d3
 
 
 
 
2d74efe
14f75be
 
 
 
 
 
2d74efe
14f75be
 
 
2d74efe
14f75be
 
2d74efe
 
14f75be
8a35d1e
2d74efe
14f75be
 
2d74efe
2a21aec
52841d3
 
 
8a35d1e
14f75be
 
2d74efe
14f75be
2d74efe
 
 
8a35d1e
2d74efe
14f75be
 
 
2d74efe
 
 
 
14f75be
 
 
2d74efe
14f75be
8a35d1e
14f75be
2d74efe
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
const video = document.querySelector("#videoElement");
let currentFacingMode = "user"; // "user" = front, "environment" = back
let stream = null;

// Initialize camera with given facing mode
function startCamera(facingMode = "user") {
  if (stream) {
    stream.getTracks().forEach(track => track.stop());
  }

  navigator.mediaDevices.getUserMedia({ video: { facingMode } })
    .then((newStream) => {
      stream = newStream;
      video.srcObject = stream;
    })
    .catch((err) => {
      console.error("Error accessing camera: ", err);
      alert("Camera access failed. Please allow camera permissions.");
    });
}

// Flip between front and back camera
function toggleCamera() {
  currentFacingMode = currentFacingMode === "user" ? "environment" : "user";
  startCamera(currentFacingMode);
}

// Capture current frame from video, show it, and send to backend
function captureAndSend() {
  if (!stream) {
    alert("Camera is not started yet!");
    return;
  }

  // Create a canvas to capture the frame
  const canvas = document.createElement('canvas');
  canvas.width = video.videoWidth;
  canvas.height = video.videoHeight;

  const context = canvas.getContext('2d');
  context.drawImage(video, 0, 0, canvas.width, canvas.height);

  // Convert canvas to data URL (JPEG)
  const dataUrl = canvas.toDataURL("image/jpeg");

  // Show captured image preview in <img>
  document.getElementById("snapshotImage").src = dataUrl;

  // Send captured image to backend
  fetch("https://prime810-facefeel.hf.space/process_image", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ image: dataUrl })
  })
  .then(response => response.json())
  .then(data => {
    // Display returned emoji and emotion
    document.getElementById("emojiDisplay").innerHTML =
      <img src="${data.emoji}" style="width:200px; border-radius:10px;">;
    document.getElementById("emotionText").textContent =
      Emotion: ${data.emotion};

    // Show download button for emoji image
    const link = document.getElementById("downloadEmoji");
    link.href = data.emoji;
    link.style.display = "inline-block";

    // Play emoji sound if available
    const sound = document.getElementById("emojiSound");
    if (sound) sound.play();
  })
  .catch(error => {
    console.error("Error:", error);
    alert("Failed to get emoji. Is your backend running?");
  });
}

// Start camera automatically on page load
startCamera();