File size: 4,906 Bytes
012ed80
924f8d8
 
012ed80
5dc78f1
012ed80
 
 
e2bab42
012ed80
e2bab42
9ca0acd
e2bab42
012ed80
 
 
 
 
 
5dc78f1
e2bab42
012ed80
e2bab42
012ed80
 
 
 
5dc78f1
 
 
 
 
 
 
012ed80
 
 
 
 
 
 
 
 
 
 
 
 
db6e2f8
 
012ed80
 
 
69c145b
924f8d8
 
012ed80
 
 
 
 
 
69c145b
 
 
 
012ed80
 
 
69c145b
012ed80
 
 
 
 
 
 
 
 
 
e2bab42
 
 
 
9ca0acd
e2bab42
 
 
 
 
 
9ca0acd
e2bab42
 
 
 
 
012ed80
db6e2f8
012ed80
9ca0acd
012ed80
e2bab42
 
012ed80
 
 
 
db6e2f8
012ed80
 
185303a
 
012ed80
3e9e64f
 
012ed80
 
 
 
 
 
 
 
 
3e9e64f
 
 
 
6224ce2
012ed80
 
 
 
 
924f8d8
 
 
 
 
db6e2f8
924f8d8
 
 
 
 
 
 
 
 
5dc78f1
924f8d8
 
 
 
 
db6e2f8
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
var video_facing_mode = "user"
var res_h = 1200
var res_w = 720
var video = document.getElementById("webcam")
const canvasElement = document.getElementById("output_canvas");
const canvasCtx = canvasElement.getContext("2d");
var webcamRunning
var pic_taken=false
var take_pic_btn= document.getElementById("take-pic")
var clear_pic_btn= document.getElementById("clear-pic")
var send_pic_btn= document.getElementById("send-pic")
var item_info_text= document.getElementById("user_item_info")
var taken_image;
// Check if webcam access is supported.
const hasGetUserMedia = () => { var _a; return !!((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia); };
// If webcam supported, add event listener to button for when user
// wants to activate it.
if (hasGetUserMedia()) {
    document.getElementById("switch-camera").addEventListener("click", switch_camera);
    document.getElementById("webcamButton").addEventListener("click", enable_camera);
    take_pic_btn.addEventListener("click", take_pic);
    clear_pic_btn.addEventListener("click", clear_pic);
    send_pic_btn.addEventListener("click", send_pic);
}
else {
    console.warn("getUserMedia() is not supported by your browser");
}
function enable_camera(){
        video_facing_mode = 'environment'
        load_camera()
        webcamRunning = true
        document.getElementById("webcamButton").style.display="none";
        document.getElementById("switch-camera").style.display="block";
}
async function switch_camera() {
    if (video_facing_mode == 'user') {
        webcamRunning = false
        video_facing_mode = 'environment'
        await load_camera()
        webcamRunning = true
    }
    else {
        webcamRunning = false
        video_facing_mode = 'user'
        await load_camera()
        webcamRunning = true
    }
}

function load_camera() {
  const constraints = {
      video: {
          facingMode: video_facing_mode,
          width: { ideal: res_w },
        height: { ideal: res_h } 
      }
  };
  // Activate the webcam stream.
  navigator.mediaDevices.getUserMedia(constraints).then((stream) => {
      video.srcObject = stream;
      video.addEventListener("loadeddata", img_load);
      video.addEventListener("loadeddata", ()=>{
        canvasElement.width=video.videoWidth
        canvasElement.height=video.videoHeight
      });
  });
}
function img_load(){

  canvasCtx.clearRect(0, 0, canvasElement.width, canvasElement.height);
  canvasCtx.drawImage(video, 0, 0, canvasElement.width, (video.videoHeight / video.videoWidth) * canvasElement.width)
  if(pic_taken != true){
  setTimeout(function (){img_load()}, 10);
}
}
function take_pic(){
  pic_taken=true;
  canvasCtx.clearRect(0, 0, canvasElement.width, canvasElement.height);
  canvasCtx.drawImage(video, 0, 0, canvasElement.width, (video.videoHeight / video.videoWidth) * canvasElement.width)
  taken_image = canvasElement.toDataURL()
  console.log(taken_image)
    clear_pic_btn.style.display="inline"
    send_pic_btn.style.display="inline"
    item_info_text.style.display="inline"
    take_pic_btn.style.display="none"
    
}

function send_pic(){
  send_frame(taken_image);
  item_info_text.style.display="none"
  clear_pic_btn.style.display="none"
  send_pic_btn.style.display="none"
  take_pic_btn.style.display="inline"
  pic_taken=false;
  img_load()
}

function clear_pic(){
  item_info_text.style.display="none"
  clear_pic_btn.style.display="none"
  send_pic_btn.style.display="none"
  take_pic_btn.style.display="inline"
  pic_taken=false;
  img_load()
  
}

function send_frame(dataUrl) {
  const dataToSend = {
      key: dataUrl,
      user_item_info: document.getElementById("user_item_info").value
  };
  document.getElementById("ai_output").style.display="block"
  document.getElementById("ai_output").classList.toggle('animated');
  fetch('/analyse', {
      method: 'POST',
      headers: {
          'Content-Type': 'application/json'
      },
      body: JSON.stringify(dataToSend)  // Convert the data to JSON
  })
  .then(response => response.text())
  .then(data => {
      var htmlContent = marked.parse(data)
      
      document.getElementById("ai_output").innerHTML=htmlContent;
      document.getElementById("ai_output").classList.toggle('animated');

  })
  .catch((error) => {
      console.error('Error:', error);
  });
}
function updateResolution() {
    const value = this.value;
    const resolutionK = value / 1000;
    const aspectRatio = 16 / 9;
    let width, height;

    if (resolutionK > 0) {
        width = resolutionK * 1000;
        height = Math.round(width / aspectRatio);
    } else {
        width = 0;
        height = 0;
    }

    // Update the displayed resolution
    document.getElementById('currentResolution').innerText = `${resolutionK}K`;
    res_w=width
    res_h=height
}

document.getElementById('resolution').addEventListener('input', updateResolution);