Forum: Mikrocontroller und Digitale Elektronik Aus einer Graustufen Matrix ein usb webcam Signal erzeugen


von Dr. Ralph W. (drralph_w)


Lesenswert?

Hallo ich habe eine Frage,

aus der Abtastung eines Rasterelektronenmikroskops erhalte ich eine 
Matrix mit
640 x 480 Elementen (Pixeln). Jedem Element (xn, ym) ist ein Wert Z von 
0 bis 255 als Graustufeninformation zugeordnet Z(xn, ym). Aus dieser 
Matrix möchte ich nun ein Bild erzeugen, wie es beispielweise eine usb 
Webcam macht. Mein Ziel ist es, die ursprüngliche Matrix am PC mithilfe 
eines Webcamprogramms als Bild darzustellen und verarbeiten zu können.

Hat jemand einen Lösungsvorschlag dazu?

VG

Ralph

von Chris R. (hownottobeseen)


Lesenswert?

Die erste Frage ist natürlich: wie kommen die Informationen in den PC?

Wenn du schon eine Anwendung hast, die die Daten abholt und aus den 
Werten ein Bild rendern kann, und daraus einfach nur eine Quelle für 
Videocalls machen willst: Mit OBS Studio das Fenster capturen und über 
die virtuelle Webcam (ist mittlerweile integriert) ausleiten.

Du kannst natürlich auch die Sourcen der virtuellen Webcam von OBS 
(https://github.com/CatxFish/obs-virtual-cam) nehmen und dich selber 
damit herumschlagen.
Alternativ: https://github.com/roman380/tmhare.mvps.org-vcam

Wenn das REM einen Composite-, VGA- oder gar DVI/HDMI-Ausgang hat: 
entsprechende Capture-Hardware bekommt man recht billig. Entweder als 
TV-Karte oder als USB-Dongle (einfach mal nach HDMI USB 4K capture 
suchen).

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

> aus der Abtastung eines Rasterelektronenmikroskops erhalte ich eine
> Matrix mit
> 640 x 480 Elementen (Pixeln). Jedem Element (xn, ym) ist ein Wert Z von
> 0 bis 255 als Graustufeninformation zugeordnet Z(xn, ym).

Wo genau erhältst du diese Matrix?

> Aus dieser
> Matrix möchte ich nun ein Bild erzeugen, wie es beispielweise eine usb
> Webcam macht.

Das ist "einfach": das Bild durch einen Kompressor laufen lassen. Wenn 
WebCam-like-Einzelbild, dann wohl JPEG-Kompressor.

> Mein Ziel ist es, die ursprüngliche Matrix am PC mithilfe
> eines Webcamprogramms als Bild darzustellen und verarbeiten zu können.

Das ist dann das zweite Problem: Womit du auch immer genau nun deine 
Matrix empfängst, Richtung PC muss es als standardmäßiges 
USB-VideoDevice erscheinen, um seine Ergebnisse ohne besondere Treiber 
an übliche WebCam-Programme übermitteln zu können.

von Ralph (Gast)


Lesenswert?

Hallo,

ein Mikroprozessor steuert die xy Ablenkspulen an. Dies geschieht mit 
den Stellungen der Matrixelementen proportionalen Signalen, d.h. es 
werden zwei Sägezähne generiert. Zu jedem Ansteuerpunkt also einem xy 
Wert, liest nun der up einen Analogwert vom REM Sensor ein. Im Speicher 
des up stehen also an den xy Adressen die Analogwerte des Sensors. nun 
soll in dem up ein "usb cam bild" Signal aus diesen Speicherdaten 
erzeugt werden.

Die Quelle, REM-Daten oder einfach ein Graustufenmatrix, spielt dafür 
(zur Bilderzeugung) keine Rolle. Das REM wird selbst angesteuert, 
besitzt also keine vga Schnittstelle etc.

Also vereinfacht:

Ein 640 x 480 Adressfeld mit 8 Bit Werten in ein Bild umsetzen, weleches 
analog einer usb Webcam angezeigt werden kann

von c-hater (Gast)


Lesenswert?

Ralph schrieb:

> ein Mikroprozessor steuert die xy Ablenkspulen an. Dies geschieht mit
> den Stellungen der Matrixelementen proportionalen Signalen, d.h. es
> werden zwei Sägezähne generiert. Zu jedem Ansteuerpunkt also einem xy
> Wert, liest nun der up einen Analogwert vom REM Sensor ein. Im Speicher
> des up stehen also an den xy Adressen die Analogwerte des Sensors. nun
> soll in dem up ein "usb cam bild" Signal aus diesen Speicherdaten
> erzeugt werden.

Naja, dann musst du also diesem µP bloß zwei Sachen beibringen:

1) Die Bilddaten durch einen JPEG-Kompressor zu nudeln.
2) Ein standardmäßiges USB-Video-Device zu sein, was auf Anfrage vom 
Host das Ergebnis des JPEG-Kompressors ausliefert.

Wo genau ist dein Problem dabei?

von Ralph (Gast)


Lesenswert?

na ja,
das Problem dabei ist, dass ich gerade dafür Hilfe angefragt habe, wie 
das genau zu machen ist. Es wäre sehr hilfreich, eine detaillierte 
Beschreibung der Vorgehensweise zu haben. Eventuell kennt jemand einen 
code beispiel oder Lit. dazu oder hat selber schon ein ähnliches Problem 
behandelt.

von Georg (Gast)


Lesenswert?

Ralph schrieb:
> Im Speicher
> des up stehen also an den xy Adressen die Analogwerte des Sensors

Also gibt es keine Dateien, z.B. mit 640 x 480 Zahlen von 0..255? Und um 
was für ein µP-System handelt es sich? Wie wird es programmiert?

Ein Array von Helligkeitswerten IST praktisch schon eine Bilddatei, aber 
die Frage ist wie wird sie vom µP ausgegeben zur weiteren Verarbeitung, 
wenn überhaupt. Das ist unabhängig davon, ob es sich um reine Rohdaten 
handelt oder ob diese mit etwas drum herum zu einer Bilddatei ergänzt 
wurden.

Es gibt für PCs unzählige Bildbearbeitungsprogramme, eine 
Webcam-Anwendung ist dafür ziemlich ungeeignet.

Georg

von Ralph (Gast)


Lesenswert?

richtig,

es geht nun darum dieses Array von Helligkeitswerten über eine USB 
Schnittstelle so auszugeben, dass ein webcam Programm das besagte Bild 
darstellen kann. Das ist die Aufgabe.

Also das Array von Helligkeitswerten aus dem Speicher so im 
Mikroprozessor aufzubereiten, dass an zwei Leitungen (USB-Signal) dieses 
dem PC zur Verfügung gestellt werden kann.

Z.b. up => UART => USB => PC => Webcamprogramm. Eventuell könnte das USB 
Signal auch über andere Pins ausgegeben werden.

Ist genau so etwas möglich und wenn ja wie?

Bitte nicht falsch verstehen, aber ich frage konkret nach diesem 
Lösungsweg mit diesem Anzeigeprogramm für usb webcams.

Grüsse Ralph

von Ralph (Gast)


Lesenswert?

Nachtrag:
das up system ist vorerst frei wählbar, es soll aber mindestens 2 DA 
Wandler ansteuern können, für die Spulenansteuerung, einen AD Wandler 
besitzen für das Sensorsignal und ein USB Signal für die Weiterleitung 
der Daten an den PC erzeugen können.

von N. M. (mani)


Lesenswert?

Ralph schrieb:
> es geht nun darum dieses Array von Helligkeitswerten über eine USB
> Schnittstelle so auszugeben, dass ein webcam Programm das besagte Bild
> darstellen kann.

Da gibt es mindestens 2 Möglichkeiten:
1) Der uP den du verwendest unterstützt nativ USB. Du implementiert ein 
USB Video Device auf diesem uP damit der PC beim anstecken eine Webcam 
erkennt. Der (gleiche) uP übernimmt die Ansteuerung des REM (ADC/DAC). 
Eher ein dickerer uP notwendig.

2) Du überträgst die erhobenen Rohwerte in deinem eigenen proprietären 
Protokoll z.B. über einen COM Port o.ä.. Damit sind die Daten schon Mal 
auf dem PC. Damit dein Webcam Tool die Daten aber interpretieren kann 
benötigst du ein Stück Zwischensoftware das die Daten vom COM Port 
abholt und ein virtuelles Video Device bereitstellt. Hier wäre der uP 
deutlich kleiner da er nur die Daten erheben muss. Je nach dem bräuchte 
er noch nicht Mal viel RAM.

Ralph schrieb:
> das up system ist vorerst frei wählbar, es soll aber mindestens 2 DA
> Wandler ansteuern können, für die Spulenansteuerung, einen AD Wandler

Was für genaue Anforderungen hat man da genau an Auflösung, Genauigkeit, 
Samplerate, simultanes Sampling?

Ralph schrieb:
> Ist genau so etwas möglich und wenn ja wie?

Klar, möglich ist viel. Es Ist halt die Frage nach dem Willen das selbst 
durchzuziehen.

von Frank K. (fchk)


Lesenswert?

Erhältst Du wirklich ein Video, oder sind das nicht eher Fotos? Für 
Fotos gibt es andere Schnittstellen (WIA, Twain, PTP, MTP) wie für Video 
(UVC).

fchk

von Karadur (Gast)


Lesenswert?

Evtl. könnte man mit dem uC die X/Y Ansteuerung vom Timeing an die alte 
analoge Videonorm anpassen und dann mit einem Framegrabber arbeiten.

von ja nee (Gast)


Lesenswert?

Auf Display anzeigen und mit Webcam abfilmen. Galvanische Trennung 
inklusive.

von Georg (Gast)


Lesenswert?

Ralph schrieb:
> das up system ist vorerst frei wählbar

Also geht es um eine komplette Entwicklung von Hard- und Software, das 
ist nichts was man mit ein paar Forenposts erledigen könnte, da geht es 
um 5stellige Entwicklungskosten. Klar ist das technisch machbar, die 
Frage ist ob es bezahlbar ist.

Eines der ersten Probleme dabei ist dass man das nicht komplett im 
Homeoffice entwickeln kann, dafür muss das zu steuernde Gerät (REM) zur 
Verfügung stehen. Mein Eindruck ist dass die Aufgabe um Grössenordnungen 
unterschätzt wird. Aber vielleicht findet sich hier im Forum jemand der 
das für einen Kasten Bier regelt, aus Ehrgeiz oder weil er den Aufwand 
auch nicht überschauen kann, soll vorkommen.

Georg

von Lenny D. (le-do)


Lesenswert?

Ist es wirklich so wichtig das es sich ohne ZusatzSoftware als USB 
Webcam (UVC device) meldet?
Andernfalls würde es ja reichen selber eine Schnittstelle (USB oder 
Serual je nach Framerate) und Client Software zu schreiben. Wie oben 
geschrieben gibt es sogar Software die das Fenster dann abfilmt und an 
andere Programme als Webcam füttert/emuliert.

Für die Lösung auf Hardware Basis habe ich durch googlen von ARM und UVC 
device dieses Demo gefunden:
https://www.nxp.com/docs/en/application-note/AN12103.pdf
Keine Ahnung ob man den UVC middleware Treiber auch auf andere uC mit 
USB portieren kann bzw. Wie leicht...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Wie siehst du das Bild denn jetzt? Es muss ja irgendeine Anzeige geben, 
sonst wäre das REM ja sinnlos.
Ja, man kann z.B. mit einem STM32 eine USB Kamera nachbilden, die z.B. 
internen RAM oder Flash als Kamera auswirft. Da du rund 300kByte als RAM 
vorhalten musst für einen Frame, bietet sich einer der grösseren F4 oder 
F7 mit Anbindung eines externen RAMs an.

Spontan überlegt, könnte das STM32F429 Discovery Board geeignet sein, da 
da schon ein (8Mb ?) SDRAM montiert ist. Das interne TFT könnte zur 
Vorschau dienen.

von Nils (Gast)


Lesenswert?

Hier ist ein ganz nettes Beispiel wie man die USB Endpoints und Configs 
so konfiguriert, das die gängigen Betriebssysteme ein USB Device als 
Webcam erkennen:

https://www.xmos.ai/download/AN00127:-USB-Video-Class-Device(2.0.2rc1).pdf

Das lässt sich natürlich auf andere USB Stacks und Microcontroller 
portieren.

Wahnsinnig aufwendig ist es nicht, aber auch nicht mal so eben gemacht. 
Wer schon mal ein USB Device programmiert hat, wird sich sicher (mit 
grauen) daran erinnern was für lustige Effekte man auf dem Host USB 
Stack produzieren kann indem man im falschen Moment einen Breakpoint 
triggert oder das Device neu startet.

Bis das richtig stabil läuft können Wochen bis Monate vergehen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich habs geahnt, sowas hat jemand schon mal mit dem STM32 gemacht:
https://github.com/iliasam/STM32F4_UVC_Camera

Wenn man Windows als Developer Platform benutzt, können Tools wie 
USBlyzer o.ä. recht hilfreich sein.

von Karadur (Gast)


Lesenswert?

Die Aufgabe entspricht der Ansteuerung einer Röhrenkamera ( z.B. Vidicon 
)
mit Framegrabber.

von Nils (Gast)


Lesenswert?

Kleine Anekdote:

Es gibt jede Menge vermurkste USB Devices auf dem Markt. Die 
Betriebssysteme haben daher einen riesen Haufen Work-Arounds eingebaut.

Nun kann es passieren, das Du z.B. durch einen Breakpoint einen 
Aussetzer im Datenstrom produzierst und der Host sich sagt: "Aha, den 
Bug kenne ich. Ich gehe jetzt mal in den Work-Around XYZ damit der 
Benutzer nicht meckert".

Du programmierst fleißig an deinem Device weiter.

Am Abend läuft alles und Du gehst glücklich nach hause.

Und am nächsten Tag startest Du Dein Rechner neu, und der Code, der 
gestern noch problemlos lief läuft nicht mehr?

Was ist passiert? Seit dem Neustart des Hosts ist Work-Around XYZ halt 
nicht mehr aktiv und Dein Device funktioniert nicht mehr, weil es zwar 
den Work-Around braucht ihn aber nicht auslöst.

Pech gehabt.

Und das mach mal über drei Betriebssysteme hinweg. Been there, done it. 
Wasn't fun.

von Ralph (Gast)


Lesenswert?

Hallo,

Danke für die Antwort, der Wille ist da aber die Zeit ist oft das 
Problem...

von Ralph (Gast)


Lesenswert?

hi, eher Fotos in kurzer Zeitfolge...

von Ralph (Gast)


Lesenswert?

ja, das geht dann auch mit einem digitalen Oszi mit Schnittstelle, ist 
ne Idee!

von Ralph (Gast)


Lesenswert?

Hi, sicher die Sache ist nicht so einfach wie eine LED zum blinken zu 
bringen, war aber auch nicht die Frage, das mit dem Rem ist nur die 
Geschichte drumrum, darum kümmern wir uns schon.

von Ralph (Gast)


Lesenswert?

Matthias S. schrieb:
> Wie siehst du das Bild denn jetzt? Es muss ja irgendeine Anzeige
> geben,
> sonst wäre das REM ja sinnlos.
> Ja, man kann z.B. mit einem STM32 eine USB Kamera nachbilden, die z.B.
> internen RAM oder Flash als Kamera auswirft. Da du rund 300kByte als RAM
> vorhalten musst für einen Frame, bietet sich einer der grösseren F4 oder
> F7 mit Anbindung eines externen RAMs an.
>
> Spontan überlegt, könnte das STM32F429 Discovery Board geeignet sein, da
> da schon ein (8Mb ?) SDRAM montiert ist. Das interne TFT könnte zur
> Vorschau dienen.

klingt gut, gibt es dazu einen Link auf die Applikation?

von Ralph (Gast)


Lesenswert?

Ralph schrieb:
> Hi, sicher die Sache ist nicht so einfach wie eine LED zum blinken zu
> bringen, war aber auch nicht die Frage, das mit dem Rem ist nur die
> Geschichte drumrum, darum kümmern wir uns schon.

von Ralph (Gast)


Lesenswert?

Nils schrieb:
> Hier ist ein ganz nettes Beispiel wie man die USB Endpoints und
> Configs
> so konfiguriert, das die gängigen Betriebssysteme ein USB Device als
> Webcam erkennen:
>
> https://www.xmos.ai/download/AN00127:-USB-Video-Class-Device(2.0.2rc1).pdf
>
> Das lässt sich natürlich auf andere USB Stacks und Microcontroller
> portieren.
>
> Wahnsinnig aufwendig ist es nicht, aber auch nicht mal so eben gemacht.
> Wer schon mal ein USB Device programmiert hat, wird sich sicher (mit
> grauen) daran erinnern was für lustige Effekte man auf dem Host USB
> Stack produzieren kann indem man im falschen Moment einen Breakpoint
> triggert oder das Device neu startet.
>
> Bis das richtig stabil läuft können Wochen bis Monate vergehen.

hi, Danke, schau ich mir an.

Matthias S. schrieb:
> Ich habs geahnt, sowas hat jemand schon mal mit dem STM32 gemacht:
> https://github.com/iliasam/STM32F4_UVC_Camera
>
> Wenn man Windows als Developer Platform benutzt, können Tools wie
> USBlyzer o.ä. recht hilfreich sein.

Prima, vielen Dank.

von Ralph (Gast)


Lesenswert?

Karadur schrieb:
> Die Aufgabe entspricht der Ansteuerung einer Röhrenkamera ( z.B.
> Vidicon
> )
> mit Framegrabber.

Ja!

von Karadur (Gast)


Lesenswert?

Welche Daten gibt es denn?
Frequenz X,Y ?
Amplitude X,Y ?
Amplitude Z ?

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.