![]() |
Videokamera über Firewire auslesen
Hallo!
Ich möchte ein Programm schreiben dass auf die schnelle (also live) Bluescreen-Aufnahmen verarbeitet, den blauen Hintergrung entfernt, und das ganze auf ein Bild( oder evt. warscheinlich aber zu viel Rechenanforderung auf ein Video) kopiert. Über das Verarbeiten mache ich mir noch Gedanken, hab zwar en Ansatz der funktionieren müsste aber halt nicht ausgereift... Aber zu erst hab ich ein anderes Problem: Ich benutze die Kamera und den Bluescreen eines Freundes, der verbindet seine Kamera mit Firewire mit dem PC. Nun meine Frage, wie kann ich möglichst einfach und ohne große Rechenleistung die Bilder der Kamera in den Rechner bekommen? Ein Ansatz von mir war das Bild mit Graphics32 zu verarbeiten, kann man also irgendwie die Video-Daten in nem passenden Format bekommen? Falls ihr andere Vorschläge zur verarbeitung habt dann könnt ihr das gern sagen. Es kommt denke ich mal bei diesem Programm darauf an das ganze in möglichst kurzer Zeit zu errechenen sodass das Bild einigermaßen flüssig angezeigt werden kann. Mein Kumpel hat auch eine TV-Karte in dem PC, falls es damit einfacher geht dann sagt es. Ist mir eigendlich egal wie die Video-Daten in den PC kommen, hauptsache ich kann sie gt verarbeiten. Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Also ich hab mal was mit Firewire-Kameras gemacht. Hatte recht gute Erfahrungen mit dem
![]() |
Re: Videokamera über Firewire auslesen
Hallo
Das wär gut! Vom DSPack hab ich schon gehört. Hab es leider noch nicht geschafft das bei Delphi 2005 PE zum laufen zu bekommen. Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Hab auch nur mit der D7 Enterprise inner Firma gemacht. ABer ich schick dir dann mal ein Grundprojekt (Kamera auswählen, Einstellungen setzen o.Ä. müsste ich noch haben).
|
Re: Videokamera über Firewire auslesen
Hallo!
Ich brauch ja nur ein Beispiel wie ich die Bilder von der Kamera reinbekomme. Alles andere muss ich ja selber machen. Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Ich täte da auch interesse dran haben. Ich nehme mit 5 DV-Camcordern Videos per FireWire auf. Das erledige ich derzeit mit der FreeWare "WinDV" die auf einer tschechischen (oder russischen) Webpage bereit steht. Da ich aber selber ein Programm haben möchte, was einige Schritte auf meine Art und Weise erledigen soll, wäre das ne tolle Sache, es selbst zu schreiben.
Mir kommt es hauptsächlich auf -> Einfachheit der Oberfläche -> Wenig Einstellungen (z.B. Scenalyzer verstellt so ziemlich alles und ist unter Stress völlig ungeeignet *g*) -> Schnelligkeit an. Kurz: das Tool soll also gleich nach dem Start alle Einstellungen für DV-Aufnahmen parat haben und nur noch per "Capture" loslaufen. Mit dem DSPack habe ich zwar ein Live-Bild von der FireWire-Kamera bekommen, konnte es aufgrund der "Nur-DirectShow" Funktion jedoch nicht aufnehmen, da das DSPack bei mir nur von VfW-Treibern aufnehmen wollte. Ich habe dann die Sources wieder gelöscht, da es eh nur ein schneller Hack war. Wenn da jetzt Sourcecode verfügbar wäre, mit dem diese Routinen funktionieren, wäre das echt klasse :D Zu dem Bluescreenproblem: man muss ja "nur" Frame für Frame die Blauanteile mit ner gewissen Toleranzgrenze rausfiltern und als Transparent kennzeichnen, bzw. gleich ein anderes Video hinzufügen. Wenn du damit aber fertig bist, hast du gleich ein Videoschnittprogramm fertig ;) Hört sich nach nem größeren Projekt, wie VDub an *g* schönen Abend noch, Christian |
Re: Videokamera über Firewire auslesen
Hallo!
Also mein Programm soll ja nicht gleich ein riesen Projekt werden. Ich hab es eher als eine Art Vorschau angesehen, da ich nicht beabsichtige einen Export der Videos zu machen. Soll halt mehr zu Demonstrationszwecken verwendet werden. Ich denke dann ist das nicht so aufwändig... :???: Hmm mal sehn ob ich das zum Laufen bekomme. Hab grad geschafft DSPack zu installieren(Delphi 2005 PE). Mal sehn ob alles geklappt hat. Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Mit Videoaufnahmen übers DSPack kann ich leider nicht dienen, da es bei mir darum ging, eventuell fehlerhafte Spritzgussteile auszusortieren und diese Analyse wäre halt per Standbild gelaufen. Naja, wie auch immer, im Anhang mal der Rumpf des damaligen Projekts.
Habe allerdings einiges rausgenommen, wo es halt um die spezifische Aufgabe ging. Hoffe ich hab nix Falsches weggeschnitten. Das Projekt liegt schon etwas zurück :-D |
Re: Videokamera über Firewire auslesen
Hallo
eigendlich willst ja einen Filter zwischen ein und Ausgang Schalten (Eingan: Kamera, Ausgang: Bildschirm) und genau das hat Microsoft vorgesehen. ![]() Schau Dir doch mal GraphEdit an. Damit kannst du solche Filter implementieren und zwischenschalten. so das du dich um Ein und Ausgabe nicht mehr kümmern musst. DerDan |
Re: Videokamera über Firewire auslesen
Hallo!
Das wäre in etwa das was ich machen wollte. Doch bin ich mir nicht ganz sicher ob ich das mit einem Filter machen kann. Ich will eigendlich alle Pixel die ausserhalb eines Farbbereiches (hier Blau) liegen auf ein anderes Bild oder Video kopieren. Das dann für jedes Frame. So hätte ich das jetzt gemacht. Kann man das auch mit einem Filter machen und wenn ja: wie kann ich den Filter verwenden? Ich hab leider noch nie Filter erstellt oder in Delphi-Anwendungen benutzt, daher hab ich im Moment nicht so ne große Ahnung was man alles damit machen kann und was nicht. Werd mir mal die Seite von Microsoft ansehen. @Thanatos81: Danke für dein Beispiel ich werde mir das mal ansehen und schauen wie ich dass in meinem Programm verwenden kann. EDIT: Hab grad mal en bischen mit Graphics32 rumprobiert und gemerkt dass es doch "sehr" lange braucht um z.b. ein Frame zu errechnen. Hab es bei ner Auflösung von 640x480 probiert. Nur das abfragen der Frabinfos dauert schon recht lange, zu lange um z.b. eine flüssige Vorschau anzuzeigen. Geht das mit den Filtern oder irgendwas anderem schneller oder kann ich irgendwie die Verarbeitung von Graphics32 verschnellern? Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Hallo!
Ich hab jetzt doch noch ein Problem. Ich habe DSPack zum laufen bekommen. Ich kann auf alle Quellen zugreifen und die werden korrekt angezeigt. Aber ich bekomm es einfach nicht hin das Bild in ein Image32 zu kopieren. Weiß jemand wie es geht? Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Hmm, bei meinem Beispiel ist ja auch die Screenshot-Funktion dabei, wenn ich nicht wtäusche. Versuche doch mal nen High-Priority-Thread anzulegen, der die Screenshots auf das Image32 kopiert. Wird aber wohl nicht das schnellste sein ;-(
|
Re: Videokamera über Firewire auslesen
Hallo!
Dein Beispiel habe ich gesehn. Aber bei mir kommt immer eine Fehlermeldung wegen Zugriffsverletzung. Hab keine Ahnung wieso. Ich hab gesehn dass du ein "normales" Image benutzt hast, ich will halt ein Image32 nehmen. Kann das Probleme machen? EDIT: Sorry der Code aus deinem Programm funktioniert doch. Ich habe nur einen Fehler gemacht den ich jetzt gefunden hab. :oops: EDIT2: Das kopieren klappt. Jedoch ist die Prozessorauslastung nur von dem Kopieren schon auf 60%, ohne dass ich irgendwelche Berechnungen mache! Wie kann ich das reduzieren? Kann ich z. B. die Bildgröße reduzieren? Mehr als 320x240 brauche ich ja nicht. Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Hallo!
Also ich hab mal en bischen rumgesucht und immer wieder wurde OnBuffer erwähnt. Damit soll man irgendwie das auch direkt kopieren können. Ich hab leider keine Ahnung wie ich das anstellen könnte. Ich hoffe jemand kann mir da helfen, weil die 60% Auslastung einfach zu viel sind. Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Hi MasterDG,
kannst du mal posten, wie du das Bild capturen kannst? Wenn ich mit dem angehängten Beispiel hier versuche von dem Live-Video der DV-Kamera ein Foto zu schießen, bekomme ich nur ein schwarzes Bild. Irgendwie liest die Routine das Livebild bei mir falsch aus!? Dieses Problem hatte ich bei meinem Ersten DV-Versuch ja auch und habe deshalb nicht weiterprogrammiert, da ich keine Lösung gefunden habe - bitte gib mir ein Stück helfenden Quelltext :D besten Dank, Christian |
Re: Videokamera über Firewire auslesen
Hallo!
Also ich nehme mal an dass bei dir ein Bild im VideoWindow angezeigt wird. Hier der Code für das Capturen eines Bildes:
Delphi-Quellcode:
Achte darauf dass bei dem Samplegrabber als Filtergraph der Filtergraph auf deinem Formular gewählt wurde. Im Filtergraph muss bei Mode gmCapture gewählt werden.
procedure TForm1.CapturePic;
var bild : TBitmap; begin bild := TBitmap.Create; samplegrabber1.GetBitmap(bild); image321.Bitmap := bild; end; Also ich hoffe ich habe alles erwähnt was man einstellen muss. Falls ich was vergessen habe könnt ihr mich gerne korrigieren. Ich hoffe das jemand auch zu meinem "Problem" helfen kann. Das einzige was ich brauch ist, dass ich alles 10 ms sec ein Bild von 320x240 in ein Image32 kopieren kann. Dabei sollte das System so wenig wie möglich ausgelastet werden, weil ich die Leistung für die Berechnung des Bluescreen-Bildes brauche. Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Hallo nochmal!
Ich stehe vor einem größeren Problem. Ich habe heute etwas rumprobiert und gemerkt dass die Capturefunktion nicht so viel ausmacht wie ich gedacht habe! Das Problem scheint schon beim Anzeigen des Bildes zu bestehen: 30% Auslastung der CPU! Nur das Anzeigen des Bildes der Kamera verbraucht schon 30% der CPU-Leistung? Wieso ist das so viel? Kann man irgendwie das auf 5 - 10% reduzieren? Ich hab heute schon mal was gelesen wo über Videorenderer gesprochen wurde. Hab leider keine Ahnung was der genau macht. Ist das vielleicht der Grund für die hohe CPU Auslastung? Eine andere Komponente käme auch in Frage. Wer kennt eine schnelle Komponente? Die muss nicht so viel drumherum haben. Ich brauch ja wiegesagt "nur" ein Bild von 320x240 in einem Image32 und nichts weiter. Den Rest erledigt ja Graphics32. Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Hallo zusammen!
Ich habe da ein Problem: der Compiler (Delphi 5) zeigt an der Stelle with FilterGraph as ICaptureGraphBuilder2 do den Fehler [Fehler] main.pas(77): Operator ist auf diesen Operandentyp nicht anwendbar Das gleiche kommt bei den Stellen ... as IBaseFilter in der Renderstream-Prozedur. Weiß jemand Rat? Bei Euch scheint es da ja keine Probleme zu geben. Gruß, Jürgen |
Re: Videokamera über Firewire auslesen
Hallo Jürgen!
Schau doch mal nach ob dein Filtergraph auch wirklich Filtergraph benannt wurden. Evt. heißt ja dein Filtergraph "Filtergraph1", wie das Delphi automatisch benennen würde. Ansonsten weiß ich momentan nicht woran es liegen könnte. Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Hallo MasterDG,
danke für die schnelle Antwort! Nee, daran liegt es nicht. Ich habe das Projekt Kappenanalyse von Thanatos81 heruntergeladen und einfach versucht zu compilieren. Da trat der Fehler auf. Irgendwie scheinen sich bei meinem Delphi die DS-Objekte nicht mit den Directshow9-Objekten zu vertragen, also bezüglich des "as". Vielleicht habe ich bei der Packages-Installation etwas falsch gemacht. Seltsamerweise kann ich mit dem fertigen Programm, das beim Download KappenAnalyse mit dabei war, ohne Probleme die Daten meines Camcorders anzeigen lassen. Gruß, Jürgen |
Re: Videokamera über Firewire auslesen
Hallo!
Das ist sehr komisch. Also bei mir hat es mit Delphi 2005 PE problemlos funktioniert! Das Installieren in 2005 PE war etwas Arbeit aber danach hat es einwandfrei funktioniert. Schau doch nochmal nach ob du bei den Bibliothekspfaden alles richtig eingegeben hast. Aber ansonsten habe ich keine Ahnung mehr wieso der Fehler kommen könnte. :gruebel: Vielleicht wissen da andere besser bescheid als ich. Das das Programm was Thanatos81 hier reingestellt hat ohne Probleme läuft, ist klar da bei dir der Fehler ja schon im Compiler kommt. Gruß MasterDG |
Re: Videokamera über Firewire auslesen
Hallo MasterDG,
ich habe mir das neueste DSPack geholt und probiert, aber trotzdem weigert sich der Compiler bei dem "as" die Zeile zu compilieren. Ich habe es gemäß dem Demo "SnapShot" mit "QueryInterface" probiert und siehe da es klappt. Alles sehr merkwürdig. Vielleicht liegt es ja daran, daß Delphi5 nicht so tolerant mit Objekten und Klassen umgeht. Nochmal vielen Dank für Deine Beiträge. Grüße, Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz