Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

96
LINES

< > BotCompany Repo | #1029807 // HTML WebCam Demo [LIVE at masterbot.online]

JavaX source code (Dynamic Module) [tags: use-pretranspiled] - run with: Stefan's OS

Uses 1113K of libraries. Click here for Pure Java version (2751L/15K).

1  
!7
2  
3  
cm WebCamDemo > DynPrintLog {
4  
  !include #1029545 // API for Eleu
5  
  
6  
  O html(IWebRequest request) {
7  
    //ret "URI: " + request.uri();
8  
    ret hsansserif() + hfullcenter(p("WebCam Preview")
9  
      + hfulltag video("", autoplay := true, id := "webcamPreview",
10  
          style := "width: 600px; height: 400px; border: 5px solid red;")
11  
      + tag table(tr(
12  
      td(p("Snapshot 1 " + hbutton("Grab", onclick := "snapshot(document.getElementById('snapshotCanvas1'))"))
13  
      + hfulltag canvas("", id := "snapshotCanvas1", width := 300, height := 200, style := "border: 3px solid green;"))
14  
      + td(p("Snapshot 2 " + hbutton("Grab", onclick := "snapshot(document.getElementById('snapshotCanvas2'))"))
15  
      + hfulltag canvas("", id := "snapshotCanvas2", width := 300, height := 200, style := "border: 3px solid green;"))
16  
      + td(p("Diff snapshots " + hbutton("Perform", onclick := "analysis()"))
17  
      + hfulltag canvas("", id := "analysisCanvas", width := 300, height := 200, style := "border: 3px solid green;"))))
18  
    ) + hscript([[
19  
        var video = document.querySelector("#webcamPreview");
20  
21  
        if (navigator.mediaDevices.getUserMedia) {
22  
          navigator.mediaDevices.getUserMedia({ video: true })
23  
            .then(function (stream) {
24  
              video.srcObject = stream;
25  
              getVideoSize();
26  
            })
27  
            .catch(function (err0r) {
28  
              console.log("Something went wrong: " + err0r);
29  
            });
30  
        };
31  
32  
        async function getVideoSize() {
33  
          await new Promise(resolve => video.onloadedmetadata = resolve);
34  
          console.log(`video size: ${video.videoWidth}x${video.videoHeight}`);
35  
        }
36  
37  
        var snapshotW, snapshotH;
38  
39  
        function snapshot(canvas) {
40  
          var w = video.videoWidth, h = video.videoHeight;
41  
          var w2 = canvas.width, h2 = canvas.height;
42  
          if (w/h > w2/h2)
43  
            h2 = Math.round(h*w2/w);
44  
          else
45  
            w2 = Math.round(w*h2/h);
46  
          snapshotW = w2; snapshotH = h2;
47  
          canvas.getContext("2d").drawImage(video, 0, 0, w2, h2);
48  
          canvas.grabbed = true;
49  
50  
          avgBrightness(canvas);
51  
        }
52  
53  
        function avgBrightness(canvas) {
54  
          var imageData = canvas.getContext("2d").getImageData(0, 0, snapshotW, snapshotH);
55  
          var pixels = imageData.data;
56  
57  
          var sum = 0;
58  
          for (var i = 0, il = pixels.length; i < il; i += 4) {
59  
            sum += pixels[i]+pixels[i+1]+pixels[i+2];
60  
          }
61  
          console.log("Brightness: " + sum/(snapshotW*snapshotH*255*3)*100);
62  
        }
63  
64  
        function analysis() {
65  
          if (!document.getElementById('snapshotCanvas1').grabbed)
66  
            snapshot(document.getElementById('snapshotCanvas1'));
67  
            
68  
          snapshot(document.getElementById('snapshotCanvas2'));
69  
          
70  
          var canvas1 = document.getElementById("snapshotCanvas1");
71  
          var canvasCtx1 = canvas1.getContext("2d");
72  
          var canvas2 = document.getElementById("snapshotCanvas2");
73  
          var canvasCtx2 = canvas2.getContext("2d");
74  
          var canvasOut = document.getElementById("analysisCanvas");
75  
          var canvasCtxOut = canvasOut.getContext("2d");
76  
          
77  
          var size = snapshotW*snapshotH;
78  
          var pixels = new Uint8ClampedArray(size*4);
79  
          
80  
          var pixels1 = canvasCtx1.getImageData(0, 0, snapshotW, snapshotH).data;
81  
          var pixels2 = canvasCtx2.getImageData(0, 0, snapshotW, snapshotH).data;
82  
          
83  
          for (var i = 0; i < size*4; i++) {
84  
            if ((i & 3) == 3)
85  
              pixels[i] = 255; // alpha
86  
            else
87  
              pixels[i] = 128+(pixels2[i]-pixels1[i])*0.5;
88  
          }
89  
          
90  
          var palette = canvasCtxOut.getImageData(0, 0, snapshotW, snapshotH);
91  
          palette.data.set(pixels);
92  
          canvasCtxOut.putImageData(palette, 0, 0);
93  
        }
94  
     ]]);
95  
  }
96  
}

download  show line numbers  debug dex  old transpilations   

Travelled to 5 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1029807
Snippet name: HTML WebCam Demo [LIVE at masterbot.online]
Eternal ID of this version: #1029807/45
Text MD5: 34d9d4d8f2f303837667a6f8506370c4
Transpilation MD5: e9519c0a76c0fbcc117a7c3baaa43ab4
Author: stefan
Category: javax
Type: JavaX source code (Dynamic Module)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2021-07-13 02:19:35
Source code size: 3984 bytes / 96 lines
Pitched / IR pitched: No / No
Views / Downloads: 229 / 28963
Version history: 44 change(s)
Referenced in: [show references]