Forum: PC-Programmierung Plot in Webcam Bild einbinden


von Marcus W. (Firma: keine) (wmarcus)


Lesenswert?

Moin,

ich hab auf dem Dach ne Webcam, die alle 10 Sekunden ein jpg im Netz 
speichert. Zusätzlich befindet sich dort eine Wetterstation, die alle 
paar Sekunden per 433 Mhz und mqtt Brücke - Luftfeuchtigkeit,Temperatur, 
Windstärke, Böen und Windrichtung und Niederschlagsmenge ins Netz 
speist. Diese Daten werden zusätzlich auf einer mysql Datenbank 
abgelegt.

Jede Nacht wird mit ffmpeg aus den Bilder ein Video generiert.

Ich würde nun gerne die "live" Wetterdaten als fortlaufenden Plot in die 
Webcam Bilder einbetten, allerdings weiß ich nicht so wirklich mit 
welchen "tools" ich das einigermaßen elegant gebaut bekomme. Evtl hat 
hier ja jemand nen heißen Tipp...

1. Wie ich die Daten aus der mysql Datenbank in einen Plot bekomme 
(alternativ direkt aus "mqtt") und möglichst ohne, dass das noch durch 
viele Pipe geschoben werden muss.

2. Wie ich die Plots? Ehmmm... Graphen! ... Vor dem Nachtlauf oder 
direkt während dessen, mit Match auf das Erstellungsdatum/Uhrzeit der 
Bilder, in die Bilder prügeln kann.

Cheers,
Marcus

von Marten Morten (Gast)


Lesenswert?

Es gibt diverse Linux Tools zur automatischen (batch) Bildbearbeitung.

> ohne, dass das noch durch viele Pipe geschoben werden muss.

Das ist aber genau das Prinzip wenn man es mit Linux auf die altmodische 
Tour machen würde. Es ist ein bisschen eine Fleißarbeit.

Der Ablauf den man skripten könnte wäre grob:

SQL-Query um die Daten für einen Zeitpunkt aus der Datenbank in einem 
ASCII-Format zu bekommen. Zum Beispiel als CSV.

Dann gnuplot, plotutils, etc. (bis hin zu Octave und anderen Programmen) 
um eine Grafik (ein Bild) aus den Daten zu erzeugen.

Dann kommt der große Moment von netpbm 
http://netpbm.sourceforge.net/doc/directory.html:

Ausgabe (oder Konvertierung) der Grafik im PAM, PPM, oder PNM 
netpbm-Format.

Wenn nötig Skalierung und andere Bearbeitungen (z.B. Rahmen hinzufügen) 
des Grafik PNM-Bildes mit entsprechenden Werkzeuge aus netpbm.

Umwandlung des JPEG-Bildes in ein PNM-Bild (mit jpegtopnm).

Kombinieren des Grafik-PNM mit dem Bild-PNM mit pnmpaste.

Das Ergebnis-PNM aus pnmpaste müsste sich direkt statt des 
ursprünglichen JPEGs in ffmpeg einlesen lassen. Denn zumindest so weit 
ich mich erinnere unterstützt ffmpeg die netpbm-Formate.

von Marcus W. (Firma: keine) (wmarcus)


Lesenswert?

Da bekomm ich direkt Spiralen in den Augen...
Fleißarbeit ist in dem Zusammenhang tatsächlich angesagt... Das ist 
sicherlich auch ein Projekt, an dem noch der ein oder andere Tag 
vergehen wird.

Vor dem ausbügeln der Feinheiten graut es mir schon jetzt...



Meine Vorstellung wäre aber in etwa so:

Ein Script prüft regelmäßig, ob ein neues Bild vorliegt und triggert 
dann die Erstellung der Graphen. Ein dynamisches Query holt sich jeweils 
die Daten vom beginn des aktuelle Tages bis zum jetzigen Zeitpunkt und 
legt den resultierenden Plot als Bild irgendwo ab. Vermutlich wäre es 
sinnvoll, die Dateinamen mit einer Art ID zu versehen, um das 
nachfolgende zusammenführen zu vereinfachen... Mglw. könnte man auch mit 
einer Art Arbeitsverzeichnis leben.... das ist wahrscheinlich einfacher 
und überschaubarer.

Wenn ich dich richtig verstehe, dann kann ich die Bilder mit netpbm 
zusammenführen... Skalieren wird in der Tat auch notwendig sein. Die 
Webcam spuckt in ihrem derzeitigen Ausbau nur 800x600 (oder sowas in der 
Größenordnung) aus. D.h. um einen Graphen mit sinnvoller Auflösung 
darstellen zu können muss der ganze Quatsch vorher auch noch aufgeblasen 
werden. Die erzeugten PNMs kann ich dann (vermutlich) wie gewohnt durch 
ffmpeg jagen...

klingt nach einem Plan.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Vielleicht ist es sinnvoll, in jedes Einzelbild, gleich nachdem es die 
Webcam irgendwo in einen Hotfolder abgelegt hat, die aktuellen 
Wetterdaten reinzumalen. Das dürfte sogar mit PHP zu machen sein.

Dann ändert sich an dem bisherigen Verfahren zur Videoerstellung Nichts.

Man kann die Bilder per Cronjob ja auch direkt aus der Kamera lutschen, 
dann müssen die garnicht erst als File abgelegt werden ...

Letzte Idee: Kennt ffmpeg einen "Append-Mode"? D.h. jedes Bild, sobald 
es fertig bemalt und fornatiert vorliegt gleich an ein (somit stetig 
wachsendes) Video anhängen. Dann passt die gesamte Video-Erstellung 
jeweils in einen Cronjob-Run.

: Bearbeitet durch User
von Weingut (Gast)


Lesenswert?

Hab sowas mit m RasPi gemacht, Bild aus der Cam ziehen, mit Image Magick 
Firmenlogo, aktuelle Temp und Zeitstempel rein gepinselt, Bild hochladen 
auf Webspace und täglich mit ffmpeg n Video erstellt und hoch laden. 
Crontab, shellscript und bisschen Python, fertig ist der Lack

von imonbln (Gast)


Lesenswert?

Ich glaube ich würde mit numpy die Daten aufbereiten, vielleicht erstmal 
in einen jupyter notebook, bis ich eine mir gefällige Darstellung der 
Wetterdaten habe, dann aus den Jupyter notebook, ein kleines Python 
Programm entwickeln und die Daten ins Bild einbetten, danach kannst du 
deine vorhandene Pipeline mit ffmpeg nutzen um das Video zu erstellen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.