VideoAnalyse; Schaust du weiter
Fertige DLL's nutzen
Hallo,
für die Bildverarbeitung und Mustererkennung gibt es bei http://sourceforge.net hundete von Einträgen bei der Suche nach Begriffen wie z.B. "recognition".
Es wäre Interessant, wenn jemand mit viel Zeit dort passende DLL's für PureBasic finden könnte.
Leider sind dort auch Programme gelistet, die unter die Rubrik "Bildbearbeitung" und nicht "Bildverarbeitung" gehören.
Blitzer
für die Bildverarbeitung und Mustererkennung gibt es bei http://sourceforge.net hundete von Einträgen bei der Suche nach Begriffen wie z.B. "recognition".
Es wäre Interessant, wenn jemand mit viel Zeit dort passende DLL's für PureBasic finden könnte.
Leider sind dort auch Programme gelistet, die unter die Rubrik "Bildbearbeitung" und nicht "Bildverarbeitung" gehören.
Blitzer
Wenn ihr DLLs nehmt ... wie sieht es dann mit der Kompatibilität zu MacOS und Linux aus?
Mich stört's nicht wirklich, weil ich Windows nutze. Aber für die Tragweite unserer Arbeit wäre es schon ganz gut zu wissen, wie portierbar unser Ergebnis sein wird.
Danke, dass ihr noch aktiv dran mit wirkt. Ich bin ja in letzer Zeit weniger eine Hilfe gewesen, aber wenn beruflich und privat der Stress wieder etwas nachgelassen hat und der Sommer sich dem Ende neigt, ist wieder mit vollem Einsatz von mir zu rechnen.
Lieben Gruß, Folker
Mich stört's nicht wirklich, weil ich Windows nutze. Aber für die Tragweite unserer Arbeit wäre es schon ganz gut zu wissen, wie portierbar unser Ergebnis sein wird.
Danke, dass ihr noch aktiv dran mit wirkt. Ich bin ja in letzer Zeit weniger eine Hilfe gewesen, aber wenn beruflich und privat der Stress wieder etwas nachgelassen hat und der Sommer sich dem Ende neigt, ist wieder mit vollem Einsatz von mir zu rechnen.
Lieben Gruß, Folker
Kinder an die Macht http://scratch.mit.edu/
Tja, wie es aussieht, macht das Projekt wohl
Sommerpause.
Na hier? Auch alle im WM-Fieber? Mir ist es zum Glück nicht so wichtig.
Gegen die Hitze hab ich mir gestern erstmal einen fetten Radiator zugelegt.
Mit Fernbedienung. Ist schon geil. Man kann ihn genau so einstellen wie man will und braucht nicht aufstehen.
Schön leise ist er und hatte mein Zimmer von knapp 30 Grad in unter fünf Minuten auf knapp 20 Grad runtergekühlt.
Naja, war mehr so ein Empfinden. Aber ist schon schön gewesen.
Aber bevor ich wieder Kritik ernte, weil ich über Luftzeugs und Sommer rede, schreib ich wohl lieber zum Thema.
Ab Mitte Juli hau ich wieder richtig rein, da geht's bei mir etwas entspannter zu.
Ich will nicht zu viel versprechen, aber ich hab schon einige Ideen.
Frischen luftigen Gruß an alle. Euer euch allen sympatischer Folker
Na hier? Auch alle im WM-Fieber? Mir ist es zum Glück nicht so wichtig.
Gegen die Hitze hab ich mir gestern erstmal einen fetten Radiator zugelegt.
Mit Fernbedienung. Ist schon geil. Man kann ihn genau so einstellen wie man will und braucht nicht aufstehen.
Schön leise ist er und hatte mein Zimmer von knapp 30 Grad in unter fünf Minuten auf knapp 20 Grad runtergekühlt.
Naja, war mehr so ein Empfinden. Aber ist schon schön gewesen.
Aber bevor ich wieder Kritik ernte, weil ich über Luftzeugs und Sommer rede, schreib ich wohl lieber zum Thema.
Ab Mitte Juli hau ich wieder richtig rein, da geht's bei mir etwas entspannter zu.
Ich will nicht zu viel versprechen, aber ich hab schon einige Ideen.
Frischen luftigen Gruß an alle. Euer euch allen sympatischer Folker

Kinder an die Macht http://scratch.mit.edu/
ein paar einfache geometrische grundfiguren werden jetzt zum teil identifiziert, auch wenn er manchmal unmögliche dinge für solche hält. wenn sie mathematisch perfekt sind geht's aber eigentlich problemlos. macht fast nur mit "flood-find_0" sinn.
man kann dateinamen (bmp/jpg) auch als parameter an die exe übergeben (oder an ne verknüpfung), bzw das prog per drag'n'drop starten...
http://www.wannabephoenix.de/PB/ImageRecognition.zip
man kann dateinamen (bmp/jpg) auch als parameter an die exe übergeben (oder an ne verknüpfung), bzw das prog per drag'n'drop starten...
http://www.wannabephoenix.de/PB/ImageRecognition.zip
Zuletzt geändert von #NULL am 01.02.2017 17:58, insgesamt 1-mal geändert.
Videoanalyse Reloaded
Hallo Fans,
nach langer Zeit des Wartens mal wieder ein Beitrag von mir zum Thema.
Diesmal mit neuem Ansatz. ... Ich kann euch die Tür nur zeigen, hindurch gehen müsst ihr selbst
Ansatz:
Eigentlich wollte ich mal schauen wie gut oder schlecht die Filme auf der Festplatte so sind, weil es mich aufgeregt hat, immer wieder schlechte Filme zu sehen. ...
Aber die Filme zu sortieren wollte ich nicht per Hand. Vor allem, wenn man jemanden kennt, der einen kennt, der schon mal davon gehört hat ...
Wir reden hier von gut einem Terrabye Filme aus den verschiedensten Kathegorien und in unterschiedlichster Qualität.
Also wie auch immer.
Mein Anastz:

Ich nehme mir eine beliebige (festlegbar und einstellbar) Anzahl von Bildern aus dem Video/Film (der Videodatei) und analysiere die Bilder.
Die Bilder werden zufällig über aus der ganzen Länge gewählt.
Je nach dem, wie genau man die Analyse betreiben will, nimmt man mehr oder weniger Bilder ... (Nicht dass man durch Zufall genau ein sehr schlechtes Bild genau vor dem nächsten I-Frame aufgreift)
Oder das Bild einfach mal wegen Szenewechsel schwarz war oder man hat den Abspann bzw. Vospann erwischt.
::: Ich hab also nun Bilder zu analysieren.
Sicherlich ist die Dimension schon entscheident, aber es gibt ja auch gut gerippte (hab ich gehört, das es sowas geben soll) SVCDs / MDVDs oder eben schlecht aufgenommene (illegal) abgefilmte Videos bei gleicher Auflösung.
....
Was ist Qualität?
Ich würde sagen Filme, die nicht zu hell und nicht zu dunkel sind. Filme, die nicht blau oder rot stichig sind. Also alles in allem gut ausgewogene Farben haben. >> Einen grpßen Dynamikbereich
-----------------------------------------------------------------------
Mein Programm macht nichts weiter als ein Histogramm.
Also noch nichts wildes. Zieht einfach mal verschiedene Bilder auf die Exe.
(zweites Fenster kann neben her geöffnet werden)
Verändert ruhig mit einem Bildbearbeitungsprogramm den Kontrast oder Färbt es ein oder setzt es auf Schwarzweiß. Spielt ein bisschen mit der Gradiation und der Helligkeit und auch der Sättigung.
Bei nachträglicher Kontrastastveränderung kann man das zum Beispiel am Histogramm erkennen. Denn da sind wie bei MP3 zu WAVE ...
Kleine Zacken in der Kurve. (Kaum sichtbar für's Auge)
>>>>>>>>>>>>>>>>>>>>>>>>>
Was hab ich vor (mit eurer Unterstützung)?
Das Programm kann erkennen, ob ein Bild gut oder schlecht aussieht.
Und Spekulationen machen, was drauf zu sehen ist.
Webcam-Aufnahme, High-Key/Low-Key, Amateur-Foto, Profifoto, Gegenlichtaufnahme, Tag oder Nachtaufnahme, ...
Schwarzweiß-Aufnahme ...
Bild wurde nachträglich bearbeitet ... wenn ja wie ...
Vielleicht kann man auch bei bestimmten Häufigkeiten auf bestimmte Motive schließen:
Blaues Wasser, Weißer Schnee, grüne Wiese, viel nackte Haut, ...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Wenn man danach noch die Schärfe eines Bildes ermitteln kann
(ähnlich wie bei vorrübergehendem Code ... )
dürfte einer halbwegs einfachen, schnellen und guten Videoanalyse nichts im Wege stehen und man kann wenigstens sagen:
Gute Qualität oder Miese Qualität
Und mit Kombination der Objekterkennung kann man vielleicht sogar schon genaueres sagen, worum es im Film gehen könnte.
Vielleicht um leicht bekleidete Mädels am Wasser oder im Wald
PURE BASIC V.4.x
http://de.wikipedia.org/wiki/Histogramm
Freue mich auf eure Unterstützung, vielleicht gibt es ja auch schon sowas in besser oder sogar als PB-Code.
Schreibt ruhig mal den Link. Danke, Gruß, Folker
nach langer Zeit des Wartens mal wieder ein Beitrag von mir zum Thema.
Diesmal mit neuem Ansatz. ... Ich kann euch die Tür nur zeigen, hindurch gehen müsst ihr selbst

Ansatz:
Eigentlich wollte ich mal schauen wie gut oder schlecht die Filme auf der Festplatte so sind, weil es mich aufgeregt hat, immer wieder schlechte Filme zu sehen. ...
Aber die Filme zu sortieren wollte ich nicht per Hand. Vor allem, wenn man jemanden kennt, der einen kennt, der schon mal davon gehört hat ...
Wir reden hier von gut einem Terrabye Filme aus den verschiedensten Kathegorien und in unterschiedlichster Qualität.
Also wie auch immer.
Mein Anastz:

Ich nehme mir eine beliebige (festlegbar und einstellbar) Anzahl von Bildern aus dem Video/Film (der Videodatei) und analysiere die Bilder.
Die Bilder werden zufällig über aus der ganzen Länge gewählt.
Je nach dem, wie genau man die Analyse betreiben will, nimmt man mehr oder weniger Bilder ... (Nicht dass man durch Zufall genau ein sehr schlechtes Bild genau vor dem nächsten I-Frame aufgreift)
Oder das Bild einfach mal wegen Szenewechsel schwarz war oder man hat den Abspann bzw. Vospann erwischt.
::: Ich hab also nun Bilder zu analysieren.
Sicherlich ist die Dimension schon entscheident, aber es gibt ja auch gut gerippte (hab ich gehört, das es sowas geben soll) SVCDs / MDVDs oder eben schlecht aufgenommene (illegal) abgefilmte Videos bei gleicher Auflösung.
....
Was ist Qualität?
Ich würde sagen Filme, die nicht zu hell und nicht zu dunkel sind. Filme, die nicht blau oder rot stichig sind. Also alles in allem gut ausgewogene Farben haben. >> Einen grpßen Dynamikbereich

-----------------------------------------------------------------------
Mein Programm macht nichts weiter als ein Histogramm.
Also noch nichts wildes. Zieht einfach mal verschiedene Bilder auf die Exe.
(zweites Fenster kann neben her geöffnet werden)
Verändert ruhig mit einem Bildbearbeitungsprogramm den Kontrast oder Färbt es ein oder setzt es auf Schwarzweiß. Spielt ein bisschen mit der Gradiation und der Helligkeit und auch der Sättigung.
Bei nachträglicher Kontrastastveränderung kann man das zum Beispiel am Histogramm erkennen. Denn da sind wie bei MP3 zu WAVE ...
Kleine Zacken in der Kurve. (Kaum sichtbar für's Auge)
>>>>>>>>>>>>>>>>>>>>>>>>>
Was hab ich vor (mit eurer Unterstützung)?
Das Programm kann erkennen, ob ein Bild gut oder schlecht aussieht.
Und Spekulationen machen, was drauf zu sehen ist.
Webcam-Aufnahme, High-Key/Low-Key, Amateur-Foto, Profifoto, Gegenlichtaufnahme, Tag oder Nachtaufnahme, ...
Schwarzweiß-Aufnahme ...
Bild wurde nachträglich bearbeitet ... wenn ja wie ...
Vielleicht kann man auch bei bestimmten Häufigkeiten auf bestimmte Motive schließen:
Blaues Wasser, Weißer Schnee, grüne Wiese, viel nackte Haut, ...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Wenn man danach noch die Schärfe eines Bildes ermitteln kann
(ähnlich wie bei vorrübergehendem Code ... )
dürfte einer halbwegs einfachen, schnellen und guten Videoanalyse nichts im Wege stehen und man kann wenigstens sagen:
Gute Qualität oder Miese Qualität
Und mit Kombination der Objekterkennung kann man vielleicht sogar schon genaueres sagen, worum es im Film gehen könnte.
Vielleicht um leicht bekleidete Mädels am Wasser oder im Wald

PURE BASIC V.4.x
Code: Alles auswählen
; Folker Linstedt, 22.08.2006, Farbfilter
#Image=1
#Datei=2
#Fenster=3
#Bild=4
#Histogramm=5
UseJPEGImageDecoder()
Procedure RefreshWindow(NewSizeW,ThumbH)
StartDrawing(WindowOutput(#Fenster))
DrawImage(ImageID(#Image),10,10,NewSizeW,ThumbH)
DrawImage(ImageID(#Histogramm),10,ThumbH+20)
StopDrawing()
EndProcedure
OpenWindow(#Fenster,10,10,400,550,":: FL BildANALyse :: > Histogramm RGB <",#PB_Window_SystemMenu)
;Inpu.s=Input()
;Eingabe.l=Val(Inpu)
Anzahl=CountProgramParameters()
For Index = 0 To Anzahl-1
Dim F.l(2,255)
Dim S.l(2,255)
;CreateGadgetList(WindowID(#Fenster))
LoadImage(#Image,ProgramParameter(Index))
;ImageGadget(#Bild,10,10,80,80,ImageID(#Image))
ScaleH=200
CreateImage(#Histogramm,256,ScaleH)
ThumbH.l=160
NewSizeW.l=Round((ImageWidth(#Image)/ImageHeight(#Image)*ThumbH),0)
RefreshWindow(NewSizeW,ThumbH)
StartDrawing(ImageOutput(#Image))
For y=0 To ImageHeight(#Image)-1 ; Erstellt Histogramm
For x=0 To (ImageWidth(#Image)-1)
RR.l : GG.l : BB.l : p.l : R.l : G.l : B.l : Z.l
p=Point(x,y) ; Später ersetzen durch Buffer
R=Red(p)
G=Green(p)
B=Blue(p)
F(0,R)+1
F(1,G)+1
F(2,B)+1
Next
Next
StopDrawing()
For t=0 To 255 ; Erstellt Kopie vom Histogramm
S(0,t)=F(0,t)
S(1,t)=F(1,t)
S(2,t)=F(2,t)
Next
SortArray(S(),1)
MaxH=Round(S(0,0)/ScaleH,0)
StartDrawing(ImageOutput(#Histogramm))
For t=0 To 255
;PH=Round((F(0,t)+F(1,t)+F(2,t))/3/MaxH,0)
LineXY(t,ScaleH-1,t,Round(ScaleH-F(0,t)/MaxH,0),RGB(255,0,0))
LineXY(t,ScaleH-1,t,Round(ScaleH-F(1,t)/MaxH,0),RGB(0,255,0))
LineXY(t,ScaleH-1,t,Round(ScaleH-F(2,t)/MaxH,0),RGB(0,0,255))
Next
StopDrawing()
Next
Repeat
RefreshWindow(NewSizeW,ThumbH)
Event=WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
CloseWindow(#Fenster)
Freue mich auf eure Unterstützung, vielleicht gibt es ja auch schon sowas in besser oder sogar als PB-Code.
Schreibt ruhig mal den Link. Danke, Gruß, Folker

Kinder an die Macht http://scratch.mit.edu/
Was ich noch erwähnen wollte
Denkbar wäre ja so eine Art Datenbank für ein Neurales-Netz-Dingli.
Also ein Histogramm egal für welches Bild (Größe oder Inhalt)
ist bei 24 Bit Farbtiefe immer 3072 Byte groß.
3 (Farben RGB) * 256 (Helligkeiten) * 4 (Byte für LongInt)
Man könnte jedes Bild, was man dem Programm gezeigt hat etwas zuweisen. ...
Das Programm fragt also: Was sehe ich und wie gut ist das Bild.
Bei was sehe ich könnte die Antwort sein:
Gesicht, Mensch, Auto, Landaschaft, Apfel, Haus ...
Nicht zu genau und nicht zu allgemein.
Bei der Qualität ins Stufen: ... 1 bis 10 (oder mega mies bis ultra top)
:::
Das Programm bekommt natürlich Grundkenntnisse wie oben angegeben bzw. wie aus dem Wiki-Link erkenn bar.
Das Programm rät anfangs natürlich noch und liegt oft daneben.
Aber mit der Zeit entwickelt es dann seinen eigenen Allgotithmus oder muss immer die Datenbank durchforsten, um ähnliche Proben zu finden.
Mit gewissen tolleranzen
... Und am Ende sollte es in der Lage sein, wenigstens gute Spekulationen über den Bildinhalt machen zu können.
Und in Verbindung mit der Objekterkennung ... wäre da sicherlich ne Menge drin.
Ich selbst bin eher der Typ mit Ideen, aber zu wenig Zeit für's Umsetzen.
Wird schon. Folker 
Also ein Histogramm egal für welches Bild (Größe oder Inhalt)
ist bei 24 Bit Farbtiefe immer 3072 Byte groß.
3 (Farben RGB) * 256 (Helligkeiten) * 4 (Byte für LongInt)
Man könnte jedes Bild, was man dem Programm gezeigt hat etwas zuweisen. ...
Das Programm fragt also: Was sehe ich und wie gut ist das Bild.
Bei was sehe ich könnte die Antwort sein:
Gesicht, Mensch, Auto, Landaschaft, Apfel, Haus ...
Nicht zu genau und nicht zu allgemein.
Bei der Qualität ins Stufen: ... 1 bis 10 (oder mega mies bis ultra top)
:::
Das Programm bekommt natürlich Grundkenntnisse wie oben angegeben bzw. wie aus dem Wiki-Link erkenn bar.
Das Programm rät anfangs natürlich noch und liegt oft daneben.
Aber mit der Zeit entwickelt es dann seinen eigenen Allgotithmus oder muss immer die Datenbank durchforsten, um ähnliche Proben zu finden.
Mit gewissen tolleranzen
... Und am Ende sollte es in der Lage sein, wenigstens gute Spekulationen über den Bildinhalt machen zu können.
Und in Verbindung mit der Objekterkennung ... wäre da sicherlich ne Menge drin.
Ich selbst bin eher der Typ mit Ideen, aber zu wenig Zeit für's Umsetzen.


Kinder an die Macht http://scratch.mit.edu/
Kleine Änderung
Damit man das Histogram ein bisschen besser sehen kann und vor allem die kleinen Löcher (Bei Kontrasterhöhung) besser wahrnimmt ...

Code: Alles auswählen
; Folker Linstedt, 22.08.2006, Farbfilter
#Image=1
#Datei=2
#Fenster=3
#Bild=4
#Histogramm=5
UseJPEGImageDecoder()
Procedure RefreshWindow(NewSizeW,ThumbH)
StartDrawing(WindowOutput(#Fenster))
DrawImage(ImageID(#Image),10,10,NewSizeW,ThumbH)
DrawImage(ImageID(#Histogramm),10,ThumbH+20)
StopDrawing()
EndProcedure
OpenWindow(#Fenster,10,10,600,550,":: FL BildANALyse :: > Histogramm RGB <",#PB_Window_SystemMenu)
;Inpu.s=Input()
;Eingabe.l=Val(Inpu)
Anzahl=CountProgramParameters()
For Index = 0 To Anzahl-1
Dim F.l(2,255)
Dim S.l(2,255)
;CreateGadgetList(WindowID(#Fenster))
LoadImage(#Image,ProgramParameter(Index))
;ImageGadget(#Bild,10,10,80,80,ImageID(#Image))
ScaleH=200
CreateImage(#Histogramm,512,ScaleH)
ThumbH.l=160
NewSizeW.l=Round((ImageWidth(#Image)/ImageHeight(#Image)*ThumbH),0)
RefreshWindow(NewSizeW,ThumbH)
StartDrawing(ImageOutput(#Image))
For y=0 To ImageHeight(#Image)-1 ; Erstellt Histogramm
For x=0 To (ImageWidth(#Image)-1)
RR.l : GG.l : BB.l : p.l : R.l : G.l : B.l : Z.l
p=Point(x,y) ; Später ersetzen durch Buffer
R=Red(p)
G=Green(p)
B=Blue(p)
F(0,R)+1
F(1,G)+1
F(2,B)+1
Next
Next
StopDrawing()
For t=0 To 255 ; Erstellt Kopie vom Histogramm
S(0,t)=F(0,t)
S(1,t)=F(1,t)
S(2,t)=F(2,t)
Next
SortArray(S(),1)
MaxH=Round(S(0,0)/ScaleH,0)
StartDrawing(ImageOutput(#Histogramm))
For d=0 To 1
For t=0 To 255
;PH=Round((F(0,t)+F(1,t)+F(2,t))/3/MaxH,0)
LineXY(t*2+d,ScaleH-1,t*2+d,Round(ScaleH-F(0,t)/MaxH,0),RGB(255,0,0))
LineXY(t*2+d,ScaleH-1,t*2+d,Round(ScaleH-F(1,t)/MaxH,0),RGB(0,255,0))
LineXY(t*2+d,ScaleH-1,t*2+d,Round(ScaleH-F(2,t)/MaxH,0),RGB(0,0,255))
Next
Next
StopDrawing()
Next
Repeat
RefreshWindow(NewSizeW,ThumbH)
Event=WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
CloseWindow(#Fenster)

Kinder an die Macht http://scratch.mit.edu/