Zum Inhalt springen

Videobearbeitung mit Java


Kampfzwerg

Empfohlene Beiträge

Guten Tag!

Ich bin neu hier. Bitte verbessert mich wenn ich was falsch mache :-) .

Ich hoffe dass der Titel dieses Themas mein Problem gut bescheibt. Naja...vielleicht hilfts wenn ich jenes Problemchen erstmal erkläutere:

Also ich wollte mich gerne zum Thema Videobearbeitung schlau machen. Wenn ich das jedoch bei Google eingebe krieg ich halt Infos zur "normalen Videobearbeitung". Damit meine ich, dass man nen Videoclip mit nem Programm zum Beispiel anders aussehen lässt

( altmodischer Flair oder sowas).Ich würd jedoch gernen eine Webcam an meinen Pc anschließen und Live an den Bildern rumspielen ...und das mit Java.

Also ich möchte zum Beispiel einen Raum Filmen und wenn sich etwas bewegt ein Signal ausgeben.

Ich hab auf dem Gebiet wirklich nicht viel Ahnung. Den Umgang mit Java beherrsche ich zwar einigermaßen, aber ich wüsste nicht wie und wo ich anfangen sollte.

Kennt vielleicht jemand ne Seite wo ich mich über das Thema schlau machen kann oder weiß genaueres über das Thema?

Für Hilfe wär ich sehr dankbar.

Lg Kampfzwerg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Sache ist, dass das nen Schulprojekt ist. Und dafür ham wir halt nen Jahr Zeit. Wollt jetzt keine Lösung von euch wie genau man das macht sonder evtl Links wo man sowas lernen kann.

Dieses Projekt halte ich für zu schwer für ein Schulprojekt (sofern man nicht ggf fertige Bibliotheken verwendet). Hast Du Dir überhaupt mal Gedanken gemacht was "eine Bewegung" ist? Nehmen wir einmal an, dass Du eine fest stehende Kamera hast, die einen AVI Stream liefert, d.h. Du bekommst pro Sekunde eine gewisse Anzahl "statische" Bilder (bei Streams, die MPEG codiert sind, bekommst Du nur die Veränderungen von dem letzten Keyframe). Du musst in den Bildern nun Dein Objekt dedektieren, hierzu solltest Du die Mathematik über Phasenräume und Bildfiltertechnologien besitzen (z.B. Sobelfilter), damit Du überhaupt Dein Objekt im Bild finden kannst und dann musst Du eben die Veränderung des Objektes bestimmen. Wenn sich das Objekt in einem festen Radius zur Kamera bewegt geht das noch, wenn das Objekt aber sich auf / weg von der Kamera bewegt dann macht sich das durch eine Skalierung des Objektes bemerkbar (mal davon ausgehend, dass die Kamera eine feste Brennweite besitzt), gleichzeitig wird das Objekt unscharf (bei fester Brennweite), die Du auch kompensieren musst. Wenn Du nun sagst "ich möchte einen roten Ball" dedektieren, dann musst Du erst einmal dem Rechner verständlich machen, was ein "roter Ball" ist, dann sind wir direkt im Bereich des maschinellen Lernens.

Zusätzlich wirst Du das Problem haben, dass Du das ganze in "annähernder Echtzeit" umsetzen musst und Java dafür sicherlich keine gute Wahl ist (außer Du nutzt die Realtime Version oder bindest extern über JNI / JNA entsprechende Bibliotheken an).

Wenn Du das als Schulprojekt in einem Jahr umsetzen willst, dann brauchst Du kein Studium mehr

Bearbeitet von flashpixx
Link zu diesem Kommentar
Auf anderen Seiten teilen

alos ....danke nochmal für die antwort. Sagen wir so. Ich hab informatik als Leistungskurs und bin gerade in der 12 Klasse. Wir sollten uns halt die letzten Tage ein Projekt aussuchen und unserem Lehrer vorstellen. Der hat uns dann halt gesagt, ob das machbar ist oder nicht. Grundvorraussetztung ist, dass es (am besten) mit java zu tun hat.

Mein Projekt war halt, eine Kamera eine augemalte Tastatur malen zu lassen und einzulesen , was getiuppt wird. Natürlich nur in 2d, also dass man zum Beispiel einen Finger 2 Sekungen über einer Taste halten muss. Wäre dass immer noch nicht realisierbar oder is dass nochmal was anderes?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mein Projekt war halt, eine Kamera eine augemalte Tastatur malen zu lassen und einzulesen , was getiuppt wird. Natürlich nur in 2d, also dass man zum Beispiel einen Finger 2 Sekungen über einer Taste halten muss. Wäre dass immer noch nicht realisierbar oder is dass nochmal was anderes?

Du hast das gleiche Problem, denn Du musst einmal erkennen auf welchem Buchstaben man sich befindet und Du musst die Zeit dedektieren und das ganze auch wieder in annähernd Echtzeit. Wie soll der Rechner denn erkennen, wo die Tastatur ist? Wenn Du die Kamera selbst senkrecht über der Tastatur platzierst und die Maße der Tastatur fest vorgibst (Abstand der Tasten, Position der Tasten), dann hast Du automatisch mit der Problem der Überdeckung zu tun, denn die Hände werden immer mehrere Tasten überdecken, was dann zu der Erkennung mehrere Tasten führen würde. Zusätzlich musst Du die Finger erkennen, was charakterisiert einen Finger? Wenn ich mir meine Hand anschaue, dann habe ich zwar 10 Finger, die alle ähnlich aufgebaut sind, sie aber nicht 100%ig identisch im Sinne einer booleschen Bedingung. D.h. Du musst hier wieder eine Bewegung eines einzelnen Objektes erkennen, das Du aber nur "ungenau" beschreiben kannst.

Du solltest ein Projekt wählen was Du mit Deinen Kenntnissen real auch bewältigen kannst. Video- & Bildverarbeitung in Echtzeit halte ich für nicht praktikabel, weil Dir die Grundlagen sowohl in der Praxis, wie auch in der Theorie fehlen, ebenso irgendetwas in Daten automatisch zu finden. In diesen drei Fällen fehlen Dir die mathematischen Grundlagen. Z.B. um etwas von einem Rechner lernen zu wollen, solltest Du Numerik beherrschen z.B. Backpropagation um ein neuronales Netz zu trainieren, den mit solchen Techniken ist es möglich dem Rechner etwas verständlich zu machen mit dem er arbeiten kann. Schulmathematik reicht dafür nicht aus. Dann sollte man sicherlich nicht jede Komponente selbst implementieren, sondern eben fertige Bibliotheken dafür nutzen z.B. LAPACK — Linear Algebra PACKage wobei Du dann in Java durchaus schon Probleme bekommst, denn mir ist keine Bibliothek bekannt, die unter Java numerische Lösungsverfahren implementiert, d.h. Du brauchst dafür die Kenntnisse über JNI. Die LAPack und die Automatically Tuned Linear Algebra Software (ATLAS) sind dafür geeignet aber unter Windows nicht leicht zu installieren.

Such Dir ein Projekt, dass Deinem Wissensstand entspricht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kenne Dein Wissen nicht. Wenn Du OOP bereits sicher kannst, dann kann man natürlich schon etwas schneller in die Praxis gehen, als wenn Du erst Java komplett lernen musst. Wenn Du Java / Programmieren nicht kannst, dann würde ich 2-3 Monate einplanen das OOP zu lernen und zu verstehen.

Als nächstes ist die Frage zu klären, was soll als Komplexität heraus kommen: Liegt der Schwerpunkt auf dem Algorithmus oder der praktischen Umsetzung? Ich denke eine Aufgabe wie "programmiert was in Java" ist etwas sehr schlecht formuliert. Evtl wäre etwas mit GUI, Netzwerkanbindung oder Datenbank etwas passendes.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok. Ich hab den Lehrer nochmal gefragt. Is jetzt auch nich wichtig was er gesagt hat , aber ich muss das halt probieren. ( wenns nich klappt isses nich schlimm, solang der Aufsatz das Scheitern richtig erläuter und so).

Wärs du so lieb mir nochmal die Links, die du kennst, aufzulisten von den Seiten wo sowas annähern beschrieben wird ? Und Seiten die mir bei dem Thema weiter Helfen könnten?

Lg Kampfzwerg :-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

doch ist es. doch irgendwo muss man sowas ja lernen können. oder?

Ja, Du machst Dein Abitur, gehst studieren und als Projektarbeit im Studium kannst Du Dich dann damit beschäftigen.

Du brauchst für ein solches Projekt mit Videobearbeitung und automatisch irgendetwas aus dem Video extrahieren mehr als nur Java- und Programmier-Kenntnisse. Das was Du machen willst umfasst nichtlineare mehrdimensionale Optimierung mit Hilfe von numerischen und stochastischen Algorithmen, dazu gleich ne ganze Latte an linearer Algebra. Alleine für die mathematischen Grundlagen brauchst Du 1-2 Jahre (2-4 Semester an einer Uni) um sie zu lernen. Die gleiche Zeit brauchst Du dann auch noch einmal um Dir die notwendigen Algorithmen an zu eigenen. Wenn Du das dann hast, dann kannst Du darüber nachdenken ein solches Projekt umzusetzen

Bearbeitet von flashpixx
Link zu diesem Kommentar
Auf anderen Seiten teilen

hm ok....ich werd meinen Lehrer Draufhinweisen. Er meintte halt heute in der Schule, dass das Projekt schon erste Teile des Studiums miteinschließt. Außerdem meitne er, dass es ruhig sein kann, dass ich mir erst 3 Moante Vorwissen aneignen muss um was machen zu können.

Kann mir denn wenigstens einer sagen, wie ich mit zum Beispiel Java eine Kamera ansteuere?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Er meintte halt heute in der Schule, dass das Projekt schon erste Teile des Studiums miteinschließt. Außerdem meitne er, dass es ruhig sein kann, dass ich mir erst 3 Moante Vorwissen aneignen muss um was machen zu können.

Du scheinst es nicht verstehen zu wollen, oder !?

Für das notwendige Wissen kannst Du fast ein komplettes Bachelorstudium (3 Jahre) und/oder ggf noch einige Semester des Masterstudiums rechnen.

Kann mir denn wenigstens einer sagen, wie ich mit zum Beispiel Java eine Kamera ansteuere?

Da die Kamera einen Treiber braucht Java Native Interface

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das was Du machen willst umfasst nichtlineare mehrdimensionale Optimierung mit Hilfe von numerischen und stochastischen Algorithmen, dazu gleich ne ganze Latte an linearer Algebra. Alleine für die mathematischen Grundlagen brauchst Du 1-2 Jahre (2-4 Semester an einer Uni) um sie zu lernen. Die gleiche Zeit brauchst Du dann auch noch einmal um Dir die notwendigen Algorithmen an zu eigenen. Wenn Du das dann hast, dann kannst Du darüber nachdenken ein solches Projekt umzusetzen

Das was Du schreibst kann ja wohl kaum ernst gemeint sein, nach den letzten Beiträgen hier im Thread habe ich den Eindruck Du willst abschrecken, egal wie. So wie ich seine Aufgabe interpretiere, geht es ihm darum über einem (festen) aufgemalten und per Webcam (aus günstiger Sicht) gefilmten Tastenfeld (wenige große Tasten?) eine Taste mit einem (günstig gehaltenen) Finger zu "aktivieren" (was scheinbar auch schon mal ein paar Sekunden dauern darf) und nicht um perfekte virtuelle Tastaturen und eine super Echtzeitfähigkeit, die Rücksicht auf Schnelltipper nimmt...

Ich teile zwar gewissen Bedenken, wenn er noch nie in Java eine Bitmap von einer Webcam eingelesen und auf die Pixel zugegriffen hat, aber vor dem Rest muss man keine gezielte Panik machen, denn es geht vermutlich um einen einfach machbaren Ansatz mit Einschränkungen und nicht um eine ganz tolle super allgemeine Luxuslösung.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So wie ich seine Aufgabe interpretiere, geht es ihm darum über einem (festen) aufgemalten und per Webcam (aus günstiger Sicht) gefilmten Tastenfeld (wenige große Tasten?) eine Taste mit einem (günstig gehaltenen) Finger zu "aktivieren" (was scheinbar auch schon mal ein paar Sekunden dauern darf)

Ah ja, und wie soll das dann bitte in der Realität umgesetzt werden? Wir haben eine fest installierte Kamera, die in irgendeiner Position zu der Tastatur steht. Woher weiß man, wo welche Taste ist? Das ist erst einmal ein Video / Bild. Entweder muss man dann die Tasten manuell fest legen, wobei man dann bei jeder Neuposititionierung der Kamera diese Kalibrierung wiederholen muss (wozu z.B. Änderungen der Brennweite auch dazu zählen).

Wie dedektiert man dann einen Finger? Das Video ist ein 2D Bild, ggf noch ein komprimierter Stream, wozu bei einer MPEG Codierung ggf je nach Einstellung Artefakte hinzukommen, bei Bewegungen verstärkt sich dieser Effekt. Wie erkennt man ob nun eine Taste gedrückt / nicht gedrückt wurde? Durch die 2D Aufnahme fehlt eine Dimension, woher weiß man also ob der Finger nicht überhalb der Taste schwebt ohne sie zu drücken und wie erkennt man dann, dass sie gedrückt wurde? Wie erkennt man überhaupt einen Finger im Bild und z.B. nicht irgendetwas anderes?

Man hat bei einem Videostream letztendlich ein Bild zu einem Zeitpunkt t und zu einem Zeitpunkt t+1 (ggf bei MPEG nur die Veränderungen zum letzten Keyframe). Man muss nun in dem Bildmaterial eine Unterscheidung zwischen "was ist Tastatur", "was ist das für ein Objekt", "welche Position hat das Objekt" und "welche Aktion führt das Objekt aus" treffen. Eine farbbasierte Erkennung fällt aus, denn dafür müsste man eine entsprechende Kamera mit Kalibrierung verwenden.

In der Realität hat einen 3-dimensionalen Raum, in den Daten eine 2-dimensionale Projektion. Wie berechnet man aus der 2-dimensionalen Projektion die richtige Höhenkoordinate, denn man muss ja unterscheiden ob der Finger eine Taste drückt oder nur darüber gehalten wird? Da man in einem Bild keine exakten Kannten hat, wie erkennt man dann die Grenzen der Tasten, z.B. wenn sich der Finger genau über eine solchen Grenze befindet und man ggf die Kamera leicht schräg positioniert hat, denn durch einen veränderte Position muss man den Fehler, der in der Projektion entsteht zurückrechnen, damit man die richtige Taste fest stellen kann? Wenn die Kamera eine automatische Fokusierung hat, diese braucht in der Realität auch etwas Zeit um zu regeln, wie erkennt man, ob innerhalb des Videosstreams das richtige Bild vorhanden ist bzw. wie entfernt man die noch vorhandene Unschärfe, wenn die Kamera regelt?

Ich teile zwar gewissen Bedenken, wenn er noch nie in Java eine Bitmap von einer Webcam eingelesen und auf die Pixel zugegriffen hat, aber vor dem Rest muss man keine gezielte Panik machen, denn es geht vermutlich um einen einfach machbaren Ansatz mit Einschränkungen und nicht um eine ganz tolle super allgemeine Luxuslösung.

Wie greift man denn von Java auf die Kamera zu (ich gehe jetzt mal von einfachen USB Webcam aus)? Es ging hier nicht um ein Bild, sondern um einen Videostream. Wenn z.B. eine Unterstützung durch das JMF nicht möglich ist, muss man sich selbst darum kümmern. Sofern das JMF eine entsprechende Anbindung mitbringt wäre der Hardwarebereich das kleinere Problem.

Selbst wenn ich das Problem darauf reduziere, dass man JMF Unterstützung hat, vielleicht eine Taste hat (großer roter Notausbutton) auf einem Stück Karton aufmalt und dann versucht einen Druck durch die Hand festzustellen, würde ich sagen, dass es extrem schwierig wird alleine ohne Anleitung das ganze funktionsfähig umzusetzen. Ich kann zwar wie man es auf HTML kennt einen Bereich des Bildes als "clickable" kennzeichnen, aber den eigentlich "Click" kann man mit einer Kamera nicht direkt finden. Mit einer Kamera kann man entweder die Positition des Objektes genau herausfinden oder den Click genau finden, beides zusammen geht nicht, denn die Kamera müsste an zwei verschiedenen Positionen existieren. Einmal auf der Ebene wie die Taste, um den Klick zu finden und einmal auf dem Lot zur Tastatur um die Position zu ermitteln. Hat man nur eine Kamera muss man die fehlende Komponente berechnen.

@Bubble: Wenn Du meinst, dass es als Projekt etwas sinnvolles hergibt, dann mach doch mal einen Vorschlag, wie man es machen könnte. Ich lass mich gerne überzeugen. Nur ein Projekt zu machen, was toll klingt, aber was eigentlich zum scheitern verurteilt ist, weil die notwendigen Kenntnisse fehlen, finde ich nicht in Ordnung. Dann man sollte ja eigentlich ein Projekt machen, bei dem man davon ausgeht, dass man es schafft und dabei etwas lernt.

Bearbeitet von flashpixx
Link zu diesem Kommentar
Auf anderen Seiten teilen

um mal eine andere Idee einzubringen:

du könntest auch einen Compiler für eine einfache Programmiersprache schreiben, der ausführbaren Java-Bytecode liefert

allerdings solltest du keine Sprache wählen, die komplizierter als BASIC ist, da dies (für eine einzelne, nicht sehr erfahrene Person) zu komplex werden könnte

ggf. müsstest du auch nur einen Teil dessen oder eine esoterische Programmiersprache, wie Brain**** oder Whitespace verwenden

wie viel Zeit wirst du denn für das Projekt nutzen können?

sollte es wirklich 1 Jahr sein (1 Jar -> 365 Tage -> 8760 Stunden), dann wäre das wirklich viel zu viel, als dass man ein geeignetes Projekt finden könnte (bei einer Ausbildung zum FIAE muss man zur Abschlussprüfung ein 70 Stunden Projekt durchführen ;) )

ihr werdet doch bestimmt nicht die gesamte Schulzeit dafür verwenden können, oder?

wie viel Zeit werdet ihr während der Schulzeit haben?

sollt ihr zusätzlich auch eure Zeit nach der Schule dafür aufbringen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

du könntest auch einen Compiler für eine einfache Programmiersprache schreiben, der ausführbaren Java-Bytecode liefert

allerdings solltest du keine Sprache wählen, die komplizierter als BASIC ist, da dies (für eine einzelne, nicht sehr erfahrene Person) zu komplex werden könnte

Einen Compiler entwickeln !? Ich werfe mal das Schlagwörter Parser / Lexer, LR(k) Grammatik in den Raum. Ohne mal die Grundkenntnisse von Grammatiken (vor allem der Chomsky Hierarchie) zu haben, wird das schon schwer überhaupt eine lauffähige Grammatik zu entwerfen.

Was spricht bitte dagegen einfach ein Projekt, wie es auch ein FIAE machen muss zu verwenden und dieses eben komplexer zu gestalten? GUI, Netzwerk und Datenbankanbindung wird ohne Kenntnisse wird schon genügend Raum zum Lernen bieten z.B. ein Kartenspiel über Netzwerk, wenn es mehrere direkt Spielen wollen und ggf dazu als Fallback mit Hilfe einer Datenbank ermöglichen auch zu spielen, wenn ein Spieler offline ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Monate später...

Flashpixx kann ich da nur absolut zustimmen. Das ist einfach ein viel zu komplexes Projekt für einen Informatikkurs an der Schule. Und die Warnungen sind sicher nicht übertrieben. Was sich der Lehrer dabei nur gedacht hat, keine Ahnung. Auch Compilerbau kann man ohne entsprechende Vorkenntnisse vergessen und diese Vorkenntnisse sind nicht ohne.

Flashpixx' Tipp mit der Software, die ein paar Netzwerk- und Datenbankfunktionen hat, klingt doch ganz gut. Das erfordert immer noch genug Einarbeitung in diverse Themenbereiche, aber da hat der TE wenigstens eine grundsätzliche Chance auf Erfolg.

Trotzdem viel Glück bei deinem Projekt, lieber TE!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schau dir mal die VLCJ-API an. In der aktuellen Version kannst du dir das Video Frame-Weise hohlen (als java2d-Image). Darin kannst dann entsprechend rumpinseln und das anzeigen. Ich weiß leider nicht genau was du machen willst. Wenn ein simpler Player werden soll der das Video in schwarz/weiß oder mit Overlay etc. darstellt könnte dir das helfen. Wenn selbst neue Videos erzeugen willst schau dir mal Xuggler an. Desweiteren existieren auch sehr schöne ffmpeg-Libs für JAVA.

Nachtrag:

1. Wenn du mit dem Frame-Buffer arbeitest ist Performance ein Thema (Full-HD kannst im Prinzip vergessen).

2. JMF (Java-Media-Framework) ist tot: Da gibts längst bessere und Performantere Libs.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...