Seite 1 von 1

Fotos zur Dokumentation

Verfasst: Fr, 16. Aug 2019 12:15
von Werner_Bayern
Servus,

hat sowas von Euch schon mal jemand realisiert? Wir brauchen sowas für einen Produktionsprozess - nach Fertigstellung sollen 1-3 Bilder dazu abgespeichert werden können. Eine Webcam, die wir softwaremäßig ansteuern können? Muss aber automatisiert über Xbase++ möglich sein.
Wäre unschön, wenn man da auf eine mitgelieferte Software angewiesen wäre, bei der man erst den Pfad zum Abspeichern der Aufnahmen einstellen müsste und wir dann diesen Pfad überwachen auf neue Bilder.
Sollte schon über einen Button "Aufnahme" gehen...

Re: Fotos zur Dokumentation

Verfasst: Fr, 16. Aug 2019 12:32
von Martin Altmann
Moin,
Manfred hat das bereits gemacht - in HTML. Funzt ganz leicht.
Sollte auch in deinem Fall einfach gehen - einfach HTML mit in den Dialog einbinden.

Viele Grüße,
Martin

Re: Fotos zur Dokumentation

Verfasst: Fr, 16. Aug 2019 13:36
von Werner_Bayern
Servus Martin,

dann bin ich ja mal gespannt auf Manfreds Post 8)

Re: Fotos zur Dokumentation

Verfasst: Fr, 16. Aug 2019 13:41
von Martin Altmann
Im Prinzip war es ähnlich dem hier (wenn ich mich recht erinnere):

Code: Alles auswählen

<input type="file" id="mypic" accept="image/*" capture="camera">
Also entscheidend das capture und das accept im input-Tag.
Viele Grüße,
Martin

Re: Fotos zur Dokumentation

Verfasst: Fr, 16. Aug 2019 15:41
von Manfred
auf den ersten Blick habe ich nichts hinzuzufügen. Martins Line ist alles.

Re: Fotos zur Dokumentation

Verfasst: Fr, 16. Aug 2019 16:07
von brandelh
capture="camera"

ist das camera hier ein Eigenname des Treibers oder nimmt der automatisch eine eingerichtete Web Cam ?

Re: Fotos zur Dokumentation

Verfasst: Fr, 16. Aug 2019 16:52
von Martin Altmann
Letzteres.
Gibt ähnliches für Video bzw. Audio - je nachdem, was gewünscht wird.
HTML5!

Viele Grüße,
Martin

Re: Fotos zur Dokumentation

Verfasst: Fr, 16. Aug 2019 18:28
von ramses
Wir haben das mit AXIS Web Cams gemacht. Bei Bewegungserkennung in einem markierten Feld oder per Inputsignal(Lichtschranke) sendet die Cam Bilder per FTP an den Server. Die Bilder können aber auch jederzeit aus dem Xbase-Programm heraus angefordert werden. Das Steuerprogramm (Xbase-Programm als Dienst) verarbeitet die Bilder dann entsprechend den anderen vorhandenen Infos.

Bei der AXIS-Cam können Bilder z.B. mit folgenden Zeilen XBase Code angefordert werden

Code: Alles auswählen

            cComm := "http://192.168.155.128/axis-cgi/jpg/image.cgi?compression=45&clock=1&date=1&resolution=2592x1994"
            // Funktion mit Xbase Socketfunktion
            oResp :=  HttpClient():new( cComm )
            **oResp:setTimeout( [<nResolveTimeout>], [<nConnectTimeout>], [<nSendTimeout>], [<nReceiveTimeout
            oResp:setTimeout( 2000,2000,2000,2000 )  // nicht zu lange warten
            oResp:SetAuthorization( get_axisData("User",""), get_axisData("PSW","") )
            oResp:getFile( cJPGFile )  // Filename mit welchem Bild gespeichert wird
            if oResp:getStatusCode() != 200
               // Handle error
               ?  oResp:getStatusCode(),  oResp:httpResponse:statusText
            endif
            oResp:disconnect()
            oResp := nil
Die IP-Adresse, Auflösung, User und Passwort muss der Kamera angepasst werden. Mit diesem Code in einem Dienst haben wir problemlos viele Bilder von vielen Kameras gelesen und gespeichert. Neuerdings verwenden wir dazu wieder xb2net zur Abfrage weil die Xbase-Funktionen IPv6 als dies dringend benötigt wurde gar nicht unterstützt hat. Ein Durchlauf des Codes für den Abruf eines Bilds benötigt ca. 8/100 Sek.

Re: Fotos zur Dokumentation

Verfasst: Fr, 16. Aug 2019 22:59
von Werner_Bayern
Danke.
Wenn ich das über

Code: Alles auswählen

oHtml := XbpHTMLWindow():new(drawingArea)
oHtml:HTML := '<input type="file" id="mypic" accept="image/*" capture="camera">'
mache, erscheint aber nur eine leere Eingabezeile? Klicke ich in das SLE, kommt ein Dateiauswahldialog?

Re: Fotos zur Dokumentation

Verfasst: Sa, 17. Aug 2019 0:17
von Martin Altmann
Werner,
zumindest innerhalb einer Webseite bekommst du hinter dem Eingabefeld auch einen Knopf mit einer Kamera drauf angezeigt. Wenn du darauf klickst, öffnet sich die Kameraaufnahme.
Ist an dem Rechner, an dem du das getestet hattest auch eine eingeschaltete Kamera angeschlossen?
Ist XbpHTMLWindow HTML 5? Oder kann man da entsprechende Header setzen?

Viele Grüße,
Martin

Re: Fotos zur Dokumentation

Verfasst: Sa, 17. Aug 2019 5:00
von Jan
Ich hole Bilder bei Mobotix-Kameras ab. Wie Carlo per HTTPClient:

Code: Alles auswählen

oHc := HttpClient():new(cPfad)
oHc:setAuthorization("meinekennung", "meinpasswort")
cFoto := oHc:send()
oHc:disconnect()
oHc := NIL

oBild:loadData(cFoto)
oBild:display()
Die Bilder zeige ich dann ganz klassisch per con XbpBitmap() abgeleiteter Klasse an.

Da ich dort mehrer Kameras auslese im Sekundentakt muß man aber darauf hinweisen, daß das das Netz massiv belasten kann.

Jan

Re: Fotos zur Dokumentation

Verfasst: Sa, 17. Aug 2019 5:24
von Jan
Martin Altmann hat geschrieben: Sa, 17. Aug 2019 0:17Ist XbpHTMLWindow HTML 5? Oder kann man da entsprechende Header setzen?
XBPHTMLWindow() basiert auf htmlayout.dll. Einer Bibliothek eines Drittanbieters aus Kanada aus dem Jahr 2009 für HTML und CSS. Soweit ich das in Erinnerung habe kann die bis HTML 3.2 und CSS 2. Alaska will lt. Aussage von Steffen vor mehreren Jahren auf Chromium umsteigen, damit ginge dann wohl auch HTML 5. Liegt in der Priorität aber anscheinend nicht sehr weit oben. Vielleicht mit der angekündigten Web-Strategie? Wo die ersten Ergebnisse im April- oder Mai- Update kommen sollten?

Jan

Re: Fotos zur Dokumentation

Verfasst: Sa, 17. Aug 2019 10:42
von ramses
Wie ein Test mit der aktuellen Xbase Version und lokalen IPv6 Adresse soeben gezeigt hat funktioniert jetzt HttpClient() auch mit IPv6 Adressen. Auf jeden fall mit lokalen.

Re: Fotos zur Dokumentation

Verfasst: Sa, 17. Aug 2019 21:30
von Werner_Bayern
Servus Martin,

ja, eine USB-Kamera ist angeschlossen und funktioniert auch unter Windows. HTML 5 funktioniert sicherlich nicht mit XbpHTMLWindow - das scheint ein entscheidender Hinweis zu sein.
Wenn ich obige Zeile aber in eine htm-Datei speichere und die mit Firefox, IE 11 oder Edge starte, kommt auch nur ein Dateiauswahl-Dialog.
Auch mit

Code: Alles auswählen

<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Titel</title>
  </head>
  <body>

  </body>
  <input type="file" id="mypic" accept="image/*" capture="camera">
</html>
kein Erfolg.

Re: Fotos zur Dokumentation

Verfasst: Sa, 17. Aug 2019 21:31
von Werner_Bayern
Jan hat geschrieben: Sa, 17. Aug 2019 5:00 Ich hole Bilder bei Mobotix-Kameras ab. Wie Carlo per HTTPClient:

oHc := HttpClient():new(cPfad)
Servus Jan,

was verwendest Du für cPfad? Die IP-Adresse der Mobotix?

Re: Fotos zur Dokumentation

Verfasst: Sa, 17. Aug 2019 22:32
von Martin Altmann
Werner,
Hast du mal versucht, die HTML-Seite mit einem Smartphone oder Tablet zu öffnen?
Bei Manfred und seinen Kunden funktioniert das (wobei die Smartphones für den Zugriff auf einen XB2.Net-Server nutzen und damit Bilder aufnehmen und hochladen).

Viele Grüße,
Martin

Re: Fotos zur Dokumentation

Verfasst: Sa, 17. Aug 2019 22:49
von Martin Altmann
Ich sehe gerade: dein Body-Ende-tag steht zu früh!
Das muss direkt vor dem html-Ende-tag kommen (dein Input steht außerhalb der Webseitendefinition)!

Viele Grüße,
Martin

Re: Fotos zur Dokumentation

Verfasst: Sa, 17. Aug 2019 23:12
von Martin Altmann
Yup,
habe gerade einen Beitrag auf Stackoverflow gefunden: Desktop-Browser ignorieren das Camera-Attribut. Geht nur mit mobilen Browsern.
Oder du nimmst GetUserMedia, das sollte auch auf Desktop-Browsern klappen:
https://www.w3.org/TR/mediacapture-streams/

Viele Grüße,
Martin

Re: Fotos zur Dokumentation

Verfasst: So, 18. Aug 2019 14:34
von Werner_Bayern
Danke Martin!

Das mit GetUserMedia() hatte ich schon gelesen, aber noch nicht getestet.
Zum HTML-Aufbau: Nach meinem Verständnis ist das Input so schon richtig, gehört nicht in den body-Bereich.

Re: Fotos zur Dokumentation

Verfasst: So, 18. Aug 2019 15:24
von Werner_Bayern
So, dank Martins Hinweise funktionierts mit Firefox schon mal so:

Code: Alles auswählen

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <title>HTML5 Medien-Zugriff</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
    video, img {
      max-width:100%;
    }
  </style>
</head>
<body>

<video autoplay></video>

<script>
  (function() {
    'use strict';
    var video = document.querySelector('video')
      , canvas;

    /**
     *  generates a still frame image from the stream in the <video>
     *  appends the image to the <body>
     */
    function takeSnapshot() {
      var img = document.querySelector('img') || document.createElement('img');
      var context;
      var width = video.offsetWidth
        , height = video.offsetHeight;

      canvas = canvas || document.createElement('canvas');
      canvas.width = width;
      canvas.height = height;

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

      img.src = canvas.toDataURL('image/png');
      document.body.appendChild(img);
    }

    // use MediaDevices API
    // docs: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia
    if (navigator.mediaDevices) {
      // access the web cam
      navigator.mediaDevices.getUserMedia({video: true})
      // permission granted:
        .then(function(stream) {
          video.srcObject = stream
		  //video.src = window.URL.createObjectURL(stream);
          video.addEventListener('click', takeSnapshot);
        })
        // permission denied:
        .catch(function(error) {
          document.body.textContent = 'Auf eine Kamera kann nicht zugegriffen werden! Fehler: ' + error.name;
        });
    }
  })();

</script>
</body>
</html>
Quellcode aus GitHub. Damit können Snapshots gemacht werden, die dann im Body des Dokumentes abgelegt erscheinen.

Für meinen Fall aber leider nicht brauchbar - funktioniert nicht mit XbpHTMLWindow und kann nicht automatisiert ablaufen, weil ich dann keinen Zugriff auf das erstellte Bild habe.

Da muss es einen anderen Weg geben?

Re: Fotos zur Dokumentation

Verfasst: So, 18. Aug 2019 16:12
von Tom
Als Formularelement in einem HTML-Formular, das per POST (!) abgeschickt wird, funktioniert das mit Martins einer Zeile Code. Wie ist der Server aufgebaut?

Re: Fotos zur Dokumentation

Verfasst: So, 18. Aug 2019 21:46
von Werner_Bayern
Servus Tom,

der entscheidende Hinweis kam von Martin:
Desktop-Browser ignorieren das Camera-Attribut. Geht nur mit mobilen Browsern.

Re: Fotos zur Dokumentation

Verfasst: Mo, 19. Aug 2019 6:48
von Jan
Werner_Bayern hat geschrieben: Sa, 17. Aug 2019 21:31was verwendest Du für cPfad? Die IP-Adresse der Mobotix?
Moin Werner,

ja, plus ein paar Parameter. das sieht dann z. B. so aus:

Code: Alles auswählen

http://192.168.0.21/cgi-bin/image.jpg?imgprof=XGA
Jan

Re: Fotos zur Dokumentation

Verfasst: Mo, 19. Aug 2019 22:08
von Werner_Bayern
Danke.