Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Videoanalyse (ähnlich wie Lichtschranke) (https://www.delphipraxis.net/187660-videoanalyse-aehnlich-wie-lichtschranke.html)

Ilmug3 19. Dez 2015 13:58

Videoanalyse (ähnlich wie Lichtschranke)
 
Ich überlege mir, wie ich die Geschwindigkeit von Fahrzeugen auf einem Video analysieren kann.
Das Bild einer fest installierten Webcam beobachtet eine Ausfallstraße.
Ändert sich am Videobild ein definierter Bereich, startet ein Sekundenzähler, bis sich ein anderer Bereich des Videobildes ändert. Anhand der Zeit (im Sekundenbereich) und der Strecke, die zwischen den Bildpunkten in der Natur liegt, sollte sich die Geschwindigkeit ermitteln lassen. (nur annähern, wenn wenige Autos fahren, nicht gerichtsverwertbar, bei guter Beleuchtung, wenn das Auto nicht asphaltgrau ist, .....)

Was mir fehlt, ist eine Idee, wie ich im Millisekundenbereich einzelne oder wenige Pixel des Videobildes auf Helligkeits- /Farbschwankungen untersuchen kann.

Hat jemand einen Ansatz?

nuclearping 19. Dez 2015 14:17

AW: Videoanalyse (ähnlich wie Lichtschranke)
 
Die grundlegendste Antwort wäre hier wohl
Delphi-Quellcode:
TBitmap.ScanLine
. Das liefert dir einen Zeiger auf eine Bildzeile, wovon jeder Block (abhängig vom Pixelformat) die RGB- bzw. RGBA-Werte enthält.

Medium 19. Dez 2015 16:33

AW: Videoanalyse (ähnlich wie Lichtschranke)
 
Wenn die Straße gerade genug (waagerecht) auf dem Bild ausgerichtet ist, würde es ja sogar schon reichen eine einzelne Zeile zu betrachten. Das mittels Scanline ist problemlos im Millisekundenbereich abgefrühstückt.

hathor 19. Dez 2015 19:40

AW: Videoanalyse (ähnlich wie Lichtschranke)
 
Wenn die Bildfrequenz 50Hz ist, muss man nur alle 20 msec eine Analyse durchführen.

dummzeuch 19. Dez 2015 20:04

AW: Videoanalyse (ähnlich wie Lichtschranke)
 
Zitat:

Zitat von hathor (Beitrag 1324909)
Wenn die Bildfrequenz 50Hz ist, muss man nur alle 20 sec eine Analyse durchführen.

????

50 Hz sind 50 Bilder pro Sekunde, man muss also all 20 Millisekunden eine Bildanalyse durchfuehren.

hathor 19. Dez 2015 21:24

AW: Videoanalyse (ähnlich wie Lichtschranke)
 
Da war ein m verlorengegangen.
Übrigens:
Bei Dir ist ein e verlorengegangen.

Ilmug3 19. Dez 2015 22:29

AW: Videoanalyse (ähnlich wie Lichtschranke)
 
Danke für den Hinweis.
Erste Versuche habe ich jetzt schon gemacht.
Bildvergleich mit Scanline gibt gute Ergebnisse. Danke für den Tipp.
Meine Überlegung war weiterhin, einen kleinen Ausschnitt (30*30 Pixel) vom Desktop in die Anwendung zu kopieren
und dort mit dem hinterlegten Bild des Ausschnitts ohne Auto zu vergleichen.

Ich habe mich aus Faulheit für den Desktop entschieden. Dann muss ich mich nicht mit irgend welchen Videosstreams in Delphi rumschlagen,
sondern lasse den Stream im Browser anzeigen und kopiere es von dort in die Delphianwendung. Verschieben, darf man dann das Browserfenster natürlich nicht mehr.

Bedient habe ich mich bei diesen Codezeilen
_______________________________________
function GetScreenShot: TBitmap;
var
Desktop: HDC;
begin
Result := TBitmap.Create;
Desktop := GetDC(0);
try
try
Result.PixelFormat := pf32bit;
Result.Width := Screen.Width;
Result.Height := Screen.Height;
BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, Desktop, 0, 0, SRCCOPY);
Result.Modified := True;
finally
ReleaseDC(0, Desktop);
end;
except
Result.Free;
Result := nil;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap := GetScreenShot;
end;
_______________________________

Leider scheint die Prozedur denn Speicher nicht ordentlich aufzuräumen,
denn nach einigen Sekunden (Scannrate 100ms) gehen mir die Ressourcen aus.
Die Probleme tauchen immer dort auf, wo man sie nicht vermutet :snowball:
Ich muss vielleicht noch etwas mit FreeAndNil arbeiten.
Das werde ich morgen testen.

hathor 19. Dez 2015 22:54

AW: Videoanalyse (ähnlich wie Lichtschranke)
 
Übersicht über Programme zur Videoanalyse


http://www.physik.uni-mainz.de/lehra...S/welcome.html
www.g-heinrichs.de/software/physik.htm
http://www.didaktik.physik.uni-due.de/viana/

https://wiki.delphigl.com/index.php/Timebased_Movement

Medium 20. Dez 2015 04:26

AW: Videoanalyse (ähnlich wie Lichtschranke)
 
Zitat:

Zitat von Ilmug3 (Beitrag 1324913)
Leider scheint die Prozedur denn Speicher nicht ordentlich aufzuräumen,
denn nach einigen Sekunden (Scannrate 100ms) gehen mir die Ressourcen aus.

Das ist einer der fiesen Fälle, wo eine Funktion eine Instanz als Result zurück gibt. Es gibt hier in der DP ein paar Diskussionen dazu, die sich damit befassen wer denn in so einem Fall nun für das Aufräumen dieser Instanz zuständig ist. Um den Code von GetScreenShot() nicht anfassen zu müssen, schlage ich folgende Lösung vor:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp := GetScreenShot;
  if Assigned(bmp) then
  begin
    try
      Image1.Picture.Bitmap.Assign(bmp);
    finally
      bmp.Free;
    end;
  end;
end;

Ilmug3 20. Dez 2015 08:44

AW: Videoanalyse (ähnlich wie Lichtschranke)
 
Danke Medium.
Du hast meinen Sonntag gerettet.:cheer:
Das Aufräumen mit deinen Code funktioniert hervorragend.
Der Rest ist jetzt noch die übliche Fleißarbeit (hoffe und befürchte ich).

Beim nächsten unvorhergesehenen Problem melde ich mich ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz