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
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
> 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.
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
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?
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.
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
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
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.
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.
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
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.
Auf Display anzeigen und mit Webcam abfilmen. Galvanische Trennung inklusive.
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
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...
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.
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.
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.
Die Aufgabe entspricht der Ansteuerung einer Röhrenkamera ( z.B. Vidicon ) mit Framegrabber.
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.
Hallo, Danke für die Antwort, der Wille ist da aber die Zeit ist oft das Problem...
hi, eher Fotos in kurzer Zeitfolge...
ja, das geht dann auch mit einem digitalen Oszi mit Schnittstelle, ist ne Idee!
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.
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?
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.
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.
Karadur schrieb: > Die Aufgabe entspricht der Ansteuerung einer Röhrenkamera ( z.B. > Vidicon > ) > mit Framegrabber. Ja!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.