Videó rögzítése webkamerákról és mozgásérzékelés

Szóval, további vágyakozás nélkül, kezdjük.

Hozzon létre és adjon hozzá AviCap32Unit.pas modulot a projekthez. ahol leírjuk az AVICAP32.DLL könyvtár külső funkcióit és konstansait. Két funkcióra van szükségünk: capGetDriverDescriptionA és capCreateCaptureWindowA. Amire szükség van - később elmondom. 4 üzenetre van szükségünk: WM_CAP_START. WM_CAP_DRIVER_CONNECT. WM_CAP_GRAB_FRAME és WM_CAP_STOP.

AviCap32Unit modulkód:

CamCaptureUnit modulkód:

Mint látható, itt két osztály van - a TCamera és a TCamList. A leginkább szükséges módszer a TCamera.CaptureBMP. Végrehajtja a keret rögzítését a fényképezőgépből.

Formanyomtatvány létrehozásakor a rendszerben lévő kamerákat rendezzük:

Ha rákattint a "Start" gombra - indítsa el a fényképezőgépet:

Az időzítőnél kapjuk a képet:

Próbáltam fordítani, semmi sem történik: (
Először is, nem fordítja le, hibák az érzékelő modulban
unatkozott a projektből (nem szükséges),
a program összeállt és elindult, de nem könnyebbé vált
A rendszerben 2 eszköz van, és csak egy Microsoft WDM van a listában, és így tovább.
és egy fehér képernyő helyett egy kép
kérem, segítsen, nagyon szükséges fogó
ha lehetséges, jobb e-mailben
Üdvözlettel
Kotovich

Prompt pozhaluysta- Delphi programot fordításkor (7) kifogásolja, hogy húrok tartalmazó „exit (0)” és az „exit (hamis)”, azaz a „Hiányzó üzemeltető vagy pontosvessző”. Hogyan lehet ezt a hibát kijavítani? Köszönöm előre.

A tomskfarm, egy paraméterrel való kilépés csak a Delphi-ban lehetséges a XE verzió óta.
A Delphi 7 írásához

Jó napot!
Először is: köszönöm a kemény munkát, nagyon érdekes!

Dmitry, használj kettős pufferelést

Konzerv, és még két részlet?
1) hogyan lehet megvalósítani a kettős pufferelést
2) hogyan segíthet, vagy miért van ilyen hatása megfigyelhető?

Nekem nincs ilyen hatása, de gyakran találkoztam azzal, hogy néhány operációs rendszer beállítása "villog".

Ez azért van így, mert a kép rajzolásának folyamata időbe telik, és ez a folyamat látható a képernyőn.

Meg kell néznie az időzítő kezelőjének irányát (CamTimer1Timer). Valószínűleg Image1.Picture.Assign (bmp); Próbáld ki a belső kettős pufferelő mechanizmust Delphi:

vagy kézzel rajzoljon a vászonra a BitBlt segítségével.

Konzervek, köszönöm, ez segített. Úgy gondolom, hogy ez a módosítás hozzáadható a cikk testéhez)

Jó napot!
Most egy másik probléma jött ki, körülbelül egy óra műsor után a program lóg, a kép lefagy, az óra a formában is fagyott, nem akar tovább dolgozni.
A tünet alapján valami túlhúzott valahol.
Van ötleted, hol kell keresned ebben az esetben?
Köszönöm előre, tisztelettel, Dmitry.

Megpróbálta Cam.Stop-ot készíteni a későbbi Cam.Start-el, de a Cam.Stop kódnak megfelelően valamilyen oknál fogva nem működik.

TCamera.Stop () függvény: logikai;
kezdődik
ha (Fh<>0)
kezdődik
SendMessage (Fh, WM_CAP_STOP .0, 0);
CloseHandle (Fh);
Fh: = 0;
végén;
végén;

összeomlik a hibával A projekt kivette a $ C0000008 kivételes osztályt a rendszer kivételével (kód: 0xc0000008) a 0x771112f7 "

A kódodban hibát találtál, még akkor is, ha az objektumot megtisztítod, a memória továbbra is betöltődik! A probléma elkerülése érdekében tanácsot adok az időzítő objektumainak tisztításában, ahol létrejönnek.

eljárás TMainFormCamera.CamTimer1Timer (Sender: TObject);
var BMP, orig. TBitmap;
kezdődik
bmp: = TBitmap.Create;
bmp.PixelFormat: = pf24bit;
cam.CaptureBMP (bmp);
orig: = TBitmap.Create;
orig.Width: = bmp.Width;
orig.Height: = bmp.Height;
orig.Assign (bmp);
orig.Free;
bmp.free;

Üdvözlünk! Kérem, mondja meg, hogyan távolítsuk el a képet a webkameráról, tegyük fel a TMemoryStreambe, és küldje el, mondjuk az ügyfélen (TCPServer / TCPClient)?

@Serega
Röviden elmondom:
cam.CaptureBMP (bmp);
bmp.savetostream (stream);

Ezután a TCPServer / TCPClient protokollon keresztül közvetítjük streamünket.

Jobb, persze, előkódolás a JPEG-be.

Nagyon jó program. Nagyon szeretném megérteni, de nem tudom összeállítani a programot, hibákat ad ki, amelyeket nem tudok megjavítani. Kérjük, állítsa alaphelyzetbe a programot a kóddal az e-mail címre. Nagyon hálás leszek

Üdvözlünk! Nagyon tetszett a program. Meg akartam érteni, hogy működik, de nem tudom összeállítani. Kérjük, állítsa alaphelyzetbe a programot a kóddal az e-mail címre. Nagyon hálás leszek

@Patrik
A forrás és az EXE-shnik linkek a cikk végén találhatók.

A Delphi 7 már nagyon elavult, jobb vagy többé-kevésbé modern verziót használni.

A fekete képernyőről. 1. Nyomta meg a "Start" gombot?
2. Utoljára hibásan zárta le a készüléket, vagy a webkamerát már használják más programok? Indítsa újra a számítógépet és futtassa a programot "tiszta". Próbálja ki egy másik számítógépen.
3. Be van állítva és működik a webkamera? Más programok a kamera munkához?
4. Mi a Windows verziója?

Nemrégiben megtudtam, hogy a fényképezőgépen lévő kép eltávolításra kerül, de a képen nem jelenik meg. Mi lehet az üzlet?

Hello, hogyan lehet megfelelően módosítani a fényképezőgép felbontását? Amikor sorokat cserél a CamCaptureUnit modulban
FWidz: = 1280;
FHeight: = 800;
Nem teljes Kép jelenik meg, a kép körülbelül egy negyed. A Kép 1280x800 alatt átméretezett. A fényképezőgép támogatja ezt a felbontást és ellenőrzi.

@ Anatórium
Furcsa. Kell dolgozni.

640x480-os vagyok. Sajnos nem tudom ellenőrizni a "nagyobb" kamerát.

@Patrik
Az AVICAP32 könyvtár elavult. Problémákat észleltem, amikor a programot helytelenül zárta (a WM_CAP_STOP üzenet elküldése nélkül). Problémák merültek fel a program újbóli megnyitásakor.

Az AVICAP32 inkább játék. Súlyos projektek (például Skype) a DirectShow-t használják. Nincs tapasztalatom a DirectShow használatával.

Köszönöm a választ. Sajnálatos, hogy az AVICAP32 támogatás már nem elérhető.
Csak hogy minden rendben van.

Jó napot. Mondja, mikor hívsz
FH: = capCreateCaptureWindowA ( 'teszt', WS_VISIBLE vagy WS_CHILD, 10000,10000, FWidth, FHeight, GetDesktopWindow, 0);
Egy új ablak nyílik meg, annak ellenére, hogy az ablak kívül van a képernyőn (10000,10000 koordináták), a tálcán látható. Valamit el kell rejteni?

Megértettük, ha valaki szüksége van rá, majd utána
FH: = capCreateCaptureWindowA ( 'teszt', WS_VISIBLE, 10000,10000, FWidth, FHeight, GetDesktopWindow, 0);

hozzáad
ShowWindow (Fh, SW_HIDE);
SetWindowLong (Fh, GWL_EXSTYLE,
GetWindowLong (Fh, GWL_EXSTYLE) VAGY WS_EX_TOOLWINDOW);
ShowWindow (Fh, SW_SHOW);

Kinyitottam a programot egy delfi XE 5-re. De nem fordul elő. Itt van ilyen hiba. Modul betöltése: CLBCatQ.DLL. Nincs hibakeresési információ. Alap cím: $ 76FD0000. Folyamat WebCam.exe (1980). A Build Konfigurációt kiadáskor készítettem. és hibakeresés. De még mindig vannak ilyen hibák. Mi a teendő. Segíts, hello!

Az XE3 egyszerre megy:

Kapcsolódó cikkek