20. februar 2012 - 21:15 Der er 9 kommentarer og
1 løsning

MOTION DETECTOR + END OF MOVIE DETECTOR ..

HEJ Eksperter

Jeg har 8 store tapes BetaMax (12o minutter) og en Sony Beta-spille (med et RS485 interface) med video-film på.  Jeg kan kontrollere Beta-spillen på alle leder og kanter via et Delphi interface-program, (primært via COM1 porten) så jeg kan vise enkeltframes, spole frem / tilbage til frame HH:MM:SS:FF, styre Cue'ing og meget andet - det eneste jeg ikke kan er programmeringsmæssigt at finde ud af hvor de enkelte billedsekvenser (læs "video-film") starter i HH:MM:SS:FF-format og der har jeg brug for denne motion-detector.

Jeg har en USB enhed (framegrabber) som konverterer video-signalet (RGB--> USB) så jeg kan få det ind på PC'en, som video. Her vises det på et PANEL (som er en del af ovennævnte program styring). Tidsvisningen i HH.MM.SS.FF er interrupt styret, for at sikre korrekt tidsvisning. (Meget kort fortalt)..

Det jeg ønsker er at kunne finde første start på en video-sekvens (læs "video-film"), længden på denne "film", længden på det mellemrummet til næste "video-film" og så fremdeles (der kan være op til 2 - 10 "kortfilm" på en tape.)

I "gamle dage" gjorde jeg dette: Hentede et billede, gemte det som en BMP-fil. Analyserede hvert billede (via MS BMP formatbeskrivelse med X.lænde, Y.længde , bits per pixel mm. ) og lavede en "statistik base" på dette billede. Hentede derefter det næste billede (gentog hele analysen på det nye billede) og sammenlignede. Ved store forskelle var det et andet billede. Ved EOM (end of movie) er hele billedet sort (eller rettere 95-100 pct). Ved at aflæse FRAMEnummeret i HH:MM:SS:FF format har jeg så EOM. Når den procent del igen fald til en lavere værdi (erfaringsmæssig) havde jeg SOV (Start of Video) og igen en ny aflæning i HH.MM....FF formatet.

Efter at have læst nogle indlæg her på Eksperten har jeg erfaret at dette IKKE er the delphi-way to do it og at det er en (håbløs) forældet måde at gøre det på... så jeg har brug for
en Motion-detector, men også en detector som kan detectere END OF MOVIE (EOM). Det sker som sagt når flere FRAMES (typisk 1-5 minutter) er totalt sorte.

Kristian
Avatar billede martinlind Nybegynder
20. februar 2012 - 21:51 #1
Spændene projekt :-)

havde engang noget web-cam prg. der kunne med COM-interface, logitech noget tror jeg nok det var :-)
Avatar billede mbsnet Nybegynder
21. februar 2012 - 18:33 #2
Hej.

Jeg har en desideret motion detector her: http://www.mortenbs.com/it/delphi/motiondetector/

Men hvis din opgave kun er at finde sorte frames, kan du sikkert nøjes med at analysere enten
farve eller lysstyrke, og dermed spare din pc for en masse. I modsætning til dette eksempel
har du nok behov for at scanne hver frame. Den hurtigste metode jeg kender er at bruge
pointere. Så kan du scanne dine frames som du har gjort før, og sætte en tæller på, for
at finde de tomme frames.

Kig i eksemplet for at se hvordan den looper hver frame med brug af scanline.
Inden i loopet kan du analysere de forskellige ting.

while p<eP do with pRgb(p)^ do begin//loop pixels af linie Y
k:=abs(lP^-b);lP^:=b;inc(lP);//find bevægelse og skriv til "sidste frame"
n:=abs(lP^-g);lP^:=g;inc(lP);if n>k then k:=n;
n:=abs(lP^-r);lP^:=r;inc(lP);if n>k then k:=n;
if k>aMaxDiff then aMaxDiff:=k;//find max forskel
if k>=fMinDiff then inc(v);//value by tolerance
if fUseDetectLight then inc(l,(r+g+b) div 3); //find lysstyrke
inc(p,3);//næste pixel
if mP<>nil then begin mP^:=k;inc(mP) end;//eventuel 8-Bit maske af pixel forskel
end;

//mvh mbs
21. februar 2012 - 19:10 #3
Hej,

1 milliørd tak for eksemplet og downloaded kode. Kigger på det (og gennemtester).  Melder tilbage .

Kristian
28. februar 2012 - 16:14 #4
HEJ,

har nu afprøvet din MOTION detector, inkluderet mine forsøg på tilpasninger.

Desværre gør den ikke det jeg havde håbet den ville, så som "MIN" motion detector må jeg sige at den ikke fungerer som jeg ønskede.

MEN, der er nogen meget interessante aspekter i den (COM-programmeringen) og de kan jeg bruge i en anden sammenhæng. Så hvis du ønsker point, så drop et svar, og du får dem snarest derefter.

KRISTIAN
Avatar billede mbsnet Nybegynder
29. februar 2012 - 01:06 #5
svar, men troede egentlig du var indstillet på at lave lidt selv, for at få det til at virke...
29. februar 2012 - 11:34 #6
Hej,

Som jeg skrev:

"..har nu afprøvet din MOTION detector, inkluderet mine forsøg på tilpasninger."

Jeg har arbejdet en hel del med din kode. Prøvet at ændre, lægge nye funktioner ind, læse om COM-funktioner, nye rettelser , osv ... (det er årsagen til at jeg ikke har svaret i en uges-tid), men jeg får den ikke til at fungere som jeg ønsker. Årsagen til dette er (er jeg overbevist om) mit (endnu noget) overfladiske kendskab til COM /ACtiveX (CA) og hvad CA egentlig kan. Og det er det jeg udtrykker ved citatet

"MEN, der er nogen meget interessante aspekter i den (COM-programmeringen) og de kan jeg bruge i en anden sammenhæng."

Og som en konsekvens heraf, har jeg bestilt en bog om COM-programmering. Skulle komme om ca. 14 dage fra "over there".

Så - om ikke andet - det har resulteret i at jeg får mindre plads på boghylden, jeg får mindre ledig hjernekapacitet (fylder lidt af det som er tilbage op med COM-viden) og at konen himmelvender sine kønne blå øjne over endnu en "umulig" programmeringsbog  (he he ).. (men det er jo en anden sag...)

KRISTIAN


PS: Sender dig en mail når det virker (hvis det er OK ?)

KR
Avatar billede mbsnet Nybegynder
29. februar 2012 - 12:11 #7
ja det er ok. godt hvis koden kan bruges, men hvis det er fordi du ikke kan finde de sorte frames stadig, så handler det jo om at lave en funktion der kan finde dem :) hvis det ikke virker, hvad er så problemet.. ville du ikke teoretisk kunne gennemgå hver frame og så måle lysstyrken? hvis den fremgangsmåde vil fungere burde det ikke være så svært... ja det er også godt med com objekter, bruger dem til at lave web på asp med delphi, og så directx.
29. februar 2012 - 13:19 #8
HEJ,

Jeg kan sagtens finde hver frame, vise hver frame på panelet og dermed det binære mønster for hver frame, men af en eller anden grund virker det som om der er tidsproblemer (især) ved 25 fps (der er ikke tid nok til at analysere framen inden næste frame er klar - min tanke - ikke nødvendigvis det rigtige problem). Efter ca. 1 - 1,5 minut går programmet i deadlock. CTL-ALT DEL og "kill progam". 

Har prøvet at nedsætte FPS til ca. 10, samme resultat, udover DEADlocken kommer senere. 

Uden frame-det. kører det (fra ca 15 fps --> 25fps) - ikke prøvet under 15 fps.

Har en mistanke om stack-overflow, men har ikke noget konkret at hænge hatten på. Der fremkommer ingen meningsfulde fejlmeddelser.

Med frame-det installeret (uden at være virksom) ingen problemer. Jeg synes det bekræfter min mistanke om tidsproblemer.

Har som konsekvens deraf læst en masse om COM (specielt de anvendte funktioner i Frame-det), blev noget klogere, prøvede at ændre noget i koden (havde sikkerhedskopi) - kompilerede og afprøvede. Fejl - ny læsning - Trial and Error metoden en mass....

Besluttede herfra at lære COM fra bunden- resten kender du.

(er stædig som et gammelt æsel, VIL (<censur>) have det til at køre... )

Jeg foreslår vi lukker sagen, jeg arbejder videre med sagen til det kører, kontakter dig (kode-kopi) ???

Drop et lukkende svar - OK ?

Under alle omstændigheder: Tak for koden.

KR
Avatar billede mbsnet Nybegynder
29. februar 2012 - 23:02 #9
ok. jeg har droppet svar længere oppe. tror gerne det er tidsproblemer, det tager mange ressourcer at gøre alt det hele på en gang. ja bare luk den, og sig til hvis du vil have hjælp til at skrive en funktion som er mere specifik og hurtig..
01. marts 2012 - 00:27 #10
OKIDOKI - lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester