3 webcams
- deify
- Beiträge: 141
- Registriert: 29.03.2010 22:01
- Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM - Kontaktdaten:
Re: 3 webcams
Also soweit läuft alles super! die bilder werden in threads auf die imagegadgets gebannt und es läuft auf jeden fall schneller! jetzt hab ich nur das problem, dass ich ständig weiße störbilder habe die zwischen drin eingestreut sind. Es blitzt sozusagen! wisst ihr an was das liegen könnte? muss ich eine abfrage einbauen, die checkt ob das bild nicht weiß ist? wobei ich natürlich auch nicht weiß ob es ein "reinweißes" bild ist!
mfg deify
mfg deify
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
-
- Beiträge: 87
- Registriert: 28.11.2010 13:07
- Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
- Wohnort: Germany
- Kontaktdaten:
Re: 3 webcams
Egal wo ich hin schaue hier ist auch alles voll mit so komischen weißen Pixeln kommen immer von oben in das Bild rein und sammeln sich an der unteren Bildkannte.deify hat geschrieben:jetzt hab ich nur das problem, dass ich ständig weiße störbilder habe
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
Re: 3 webcams
xD (srry, wollt nur was schreiben)
Noch was zum Thema: Wie wie läuft das denn mit imagegadget neu befüllen und den Bildern, die die Kameras pro sek abgeben?
Könnte ja evtl. sein, dass du "leerbilder" abgreifst, weil die Kameras grad erst noch ein neues reinstellen.
Noch was zum Thema: Wie wie läuft das denn mit imagegadget neu befüllen und den Bildern, die die Kameras pro sek abgeben?
Könnte ja evtl. sein, dass du "leerbilder" abgreifst, weil die Kameras grad erst noch ein neues reinstellen.
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
- deify
- Beiträge: 141
- Registriert: 29.03.2010 22:01
- Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM - Kontaktdaten:
Re: 3 webcams
laut internet hat sie eine maximale framerate von 30fps! allerdings weiß ich nicht wie ich das synchronisieren soll! ich meine dadurch dass ich den output jetzt seperat in einem thread habe geht das wesentlich schneller! soll ech dann etwa eine abfrage machen ob sich der buffer verändert hat?
also etwas in der art
if(PokeS(*buffer,kompletteLänge) <> oldBufferContent) --> oldbufercontent = PokeS(*buffer,kompletteLänge)
oder reicht es wenn ich das verändern eines einzelnen bytes abfgrage um zu checken ob sich quasi ein pixel verändert hat?
mfg deify
also etwas in der art
if(PokeS(*buffer,kompletteLänge) <> oldBufferContent) --> oldbufercontent = PokeS(*buffer,kompletteLänge)
oder reicht es wenn ich das verändern eines einzelnen bytes abfgrage um zu checken ob sich quasi ein pixel verändert hat?
mfg deify
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
Re: 3 webcams
Du könntest bei 30 fps jeweils im Thread einen Timer verwenden, der eben 30 mal pro Sekunde den Buffer auslesen lässt. Dann hättest du das soweit synchron gehalten.
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
- deify
- Beiträge: 141
- Registriert: 29.03.2010 22:01
- Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM - Kontaktdaten:
Re: 3 webcams
läuft! ich habs mit elapsedmilliseconds gemacht und wenn ichs auf 25 fps also 40 milliseconds pro bild runterregel sind keine störbilder mehr da! komischerweiße werden meine buffer aber anscheinend vertauscht! immerwieder blinkt das bild von der einen cam in der anderen auf! obwohl ich extra 2 buffer definiert habe
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
Re: 3 webcams
poste mal den Code, dann können wir dir helfen.
Ansonsten kann ich nur die gute alte Zauberkugel benutzen.^^
Ansonsten kann ich nur die gute alte Zauberkugel benutzen.^^
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
- deify
- Beiträge: 141
- Registriert: 29.03.2010 22:01
- Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM - Kontaktdaten:
Re: 3 webcams
also include ist die escapi.pbi die hier ja schon zu massen gepostet ist! und dann eben dieser code! ich habe keinen plan woran das mit de buffern liegt! vielleicht weil sie alle 3 nacheinander angelegt werden und auch gleich groß sind... wer weiß
irgendwie ist es auch manchmal mehr manchmal weniger );
Code: Alles auswählen
EnableExplicit
UseTGAImageDecoder()
IncludeFile "escapi.pbi"
Structure TGA_HEADER
identsize.a
colourmaptype.a
imagetype.a
colourmapstart.u
colourmaplength.u
colourmapbits.a
xstart.u
ystart.u
width.u
height.u
bits.a
descriptor.a
; pixel data follows header
EndStructure
Global quit
Define deviceno.l, version.l, count.l, *namebuffer.i, bufferlength.l, name$
Define width, height, *pImage0.i, *pImage1.i, *pImage2.i
Define header.TGA_HEADER
Define scp0.SimpleCapParams, scp1.SimpleCapParams, scp2.SimpleCapParams
Global currentDeviceno
Global currentBuffer
deviceno = 0
width = 320
height = 240
Procedure output0(buffer)
Protected StartTime=-1
Repeat
If StartTime = -1
StartTime = ElapsedMilliseconds()
EndIf
If quit = 0 And ElapsedMilliseconds()-StartTime>40
StartTime = -1
doCapture(0)
CatchImage(0, buffer)
SetGadgetState(0, ImageID(0))
EndIf
Until quit
deinitCapture(0)
EndProcedure
Procedure output1(buffer)
Protected StartTime=-1
Repeat
If StartTime = -1
StartTime = ElapsedMilliseconds()
EndIf
If quit = 0 And ElapsedMilliseconds()-StartTime>40
StartTime = -1
doCapture(1)
CatchImage(1, buffer)
SetGadgetState(1, ImageID(1))
Delay(10)
EndIf
Until quit
deinitCapture(1)
EndProcedure
Procedure output2(buffer)
Protected StartTime=-1
Repeat
If StartTime = -1
StartTime = ElapsedMilliseconds()
EndIf
If quit = 0 And ElapsedMilliseconds()-StartTime>40
StartTime = -1
doCapture(2)
CatchImage(2, buffer)
SetGadgetState(2, ImageID(2))
Delay(10)
EndIf
Until quit
deinitCapture(2)
EndProcedure
If escapiOpen()
version = ESCAPIDLLVersion()
; Debug "version: $" + RSet(Hex(version), 4, "0")
initCOM()
count = countCaptureDevices()
; Debug "count: " + Str(count)
If count > 0
*namebuffer = AllocateMemory(1000)
bufferlength = 1000
getCaptureDeviceName(deviceno, *namebuffer, bufferlength)
If *namebuffer > 0
name$ = PeekS(*namebuffer, -1, #PB_Ascii)
; Debug "name: " + name$
EndIf
header\imagetype = 2
header\width = width
header\height = height
header\bits = 32
header\descriptor = %11110100
*pImage0 = AllocateMemory(width * height * 4 + SizeOf(TGA_HEADER))
*pImage1 = AllocateMemory(width * height * 4 + SizeOf(TGA_HEADER))
*pImage2 = AllocateMemory(width * height * 4 + SizeOf(TGA_HEADER))
CopyMemory(@header, *pImage0, SizeOf(TGA_HEADER))
CopyMemory(@header, *pImage1, SizeOf(TGA_HEADER))
CopyMemory(@header, *pImage2, SizeOf(TGA_HEADER))
scp0\mWidth = width
scp0\mHeight = height
scp0\mTargetBuf = *pImage0 + SizeOf(TGA_HEADER)
scp1\mWidth = width
scp1\mHeight = height
scp1\mTargetBuf = *pImage1 + SizeOf(TGA_HEADER)
scp2\mWidth = width
scp2\mHeight = height
scp2\mTargetBuf = *pImage2 + SizeOf(TGA_HEADER)
; If initCapture(deviceno, @scp)
; Debug "cap init successful"
OpenWindow(0, 450, 200, 3*width, height+50, name$, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
ImageGadget(0, 0, 0, width, height, 0)
ImageGadget(1, width, 0, width, height, 0)
ImageGadget(2, 2*width, 0, width, height, 0)
ButtonGadget(3,width/2-width/4,height+10,width/2,30,"activate cam 1")
ButtonGadget(4,width/2-width/4+width,height+10,width/2,30,"activate cam 2")
ButtonGadget(5,width/2-width/4+2*width,height+10,width/2,30,"activate cam 3")
CreateImage(0, width, height)
SetGadgetState(0, ImageID(0))
CreateImage(1, width, height)
SetGadgetState(1, ImageID(1))
CreateImage(2, width, height)
SetGadgetState(2, ImageID(2))
Repeat
Select WaitWindowEvent(1)
Case #PB_Event_CloseWindow
quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 3
If initCapture(0,@scp0)
CreateThread(@output0(),*pImage0)
EndIf
Case 4
If initCapture(1,@scp1)
CreateThread(@output1(),*pImage1)
EndIf
Case 5
If initCapture(2,@scp2)
CreateThread(@output2(),*pImage2)
EndIf
EndSelect
EndSelect
Delay(10)
Until quit = 1
; Else
;
; Debug "init capture failed!"
;
; EndIf
If *namebuffer > 0
FreeMemory(*namebuffer)
EndIf
If *pImage0 > 0
FreeMemory(*pImage0)
EndIf
If *pImage1 > 0
FreeMemory(*pImage1)
EndIf
If *pImage2 > 0
FreeMemory(*pImage2)
EndIf
EndIf
escapiClose()
Else
MessageRequester("example", "DLL 'escapi.dll' nicht vorhanden!")
EndIf
End
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
Re: 3 webcams
@deify
Wenn ich deinen Code verwende flackert es und ich habe eine CPU-Belastung von 100%.
Beim Beenden des Programms kommt es manchmal zu dieser Fehlermeldung:
[11:52:02] [ERROR] test01.pb (Zeile: 55)
[11:52:02] [ERROR] Ungültiger Speicherzugriff. (Lesefehler an der Adresse 268443504)
[11:52:02] Die Programmausführung ist abgeschlossen.
Das flackern wird wohl hiermit zusammen hängen (32bit Bilder):
http://www.purebasic.fr/german/viewtopi ... e+flackern
-----------------------------------------------
Hier hab ich nochmal einen Code mit Thread,
damit komme ich auf FPS: 500 ohne Flackern.
Ich verwende aber wieder StartDrawing um
aus dem Kamerabild ein 24Bit Bild zu erstellen:
Wenn ich deinen Code verwende flackert es und ich habe eine CPU-Belastung von 100%.
Beim Beenden des Programms kommt es manchmal zu dieser Fehlermeldung:
[11:52:02] [ERROR] test01.pb (Zeile: 55)
[11:52:02] [ERROR] Ungültiger Speicherzugriff. (Lesefehler an der Adresse 268443504)
[11:52:02] Die Programmausführung ist abgeschlossen.
Das flackern wird wohl hiermit zusammen hängen (32bit Bilder):
http://www.purebasic.fr/german/viewtopi ... e+flackern
-----------------------------------------------
Hier hab ich nochmal einen Code mit Thread,
damit komme ich auf FPS: 500 ohne Flackern.
Ich verwende aber wieder StartDrawing um
aus dem Kamerabild ein 24Bit Bild zu erstellen:
Code: Alles auswählen
EnableExplicit
UseTGAImageDecoder()
IncludeFile "escapi.pbi"
If escapiOpen() = 0
MessageRequester("Kamera", "DLL 'escapi.dll' nicht vorhanden!")
End
EndIf
;- Enumerations / DataSections
;- Windows
Enumeration
#Window_0
EndEnumeration
;- Gadgets
Enumeration
#Image_Gadget_0
EndEnumeration
;- Image
Enumeration
#Image_Start
#Image_Capture
#Image_Copy
EndEnumeration
;- Structure
Structure TGA_HEADER
imageid.a
colourmaptype.a
imagetype.a
colourmapstart.u
colourmaplength.u
colourmapbits.a
xstart.u
ystart.u
width.u
height.u
pixeldepth.a
descriptor.a
EndStructure
;- Define
Define Event.l, EventWindow.l, EventGadget.l, EventType.l, EventMenu.l
;- Global
Global quit.i, q1.i, captureTH.i
Procedure OpenWindow_Window_0()
Protected res.i
res = #False
If OpenWindow(#Window_0, 450, 200, 320, 240, "Kamera", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
ImageGadget(#Image_Gadget_0, 0, 0, 320, 240, 0)
res = #True
EndIf
ProcedureReturn res
EndProcedure
Procedure FPSCounter()
Protected t1.q
Static fps.i, timer.i
t1 = timeGetTime_()
If timer < t1
SetWindowTitle(#Window_0, "FPS: " + Str(fps))
timer = t1 + 1000
fps = 0
EndIf
fps + 1
EndProcedure
Procedure capture(temp.i)
Protected width.l, height.l, *pImage.i
Protected deviceno.l, count.l, *namebuffer.i, bufferlength.l, name$
Protected tgaheader.TGA_HEADER, scp.SimpleCapParams
Protected depth.i
deviceno = 0
width = 320
height = 240
If CreateImage(#Image_Start, width, height)
SetGadgetState(#Image_Start, ImageID(#Image_Start))
EndIf
CreateImage(#Image_Copy, width, height, 24)
depth = ImageDepth(#Image_Copy)
Debug "depth: " + Str(depth)
initCOM()
count = countCaptureDevices()
Debug "count: " + Str(count)
If count > 0
bufferlength = 1000
*namebuffer = AllocateMemory(bufferlength)
If *namebuffer > 0
getCaptureDeviceName(deviceno, *namebuffer, bufferlength)
name$ = PeekS(*namebuffer, -1, #PB_Ascii)
If name$ <> ""
Debug "name: " + name$
SetWindowTitle(#Window_0, name$)
EndIf
EndIf
tgaHeader\imageid = 0
tgaHeader\colourmaptype = 0
tgaheader\imagetype = 2
tgaHeader\colourmapstart = 0
tgaHeader\colourmaplength = 0
tgaheader\width = width
tgaheader\height = height
tgaHeader\xstart = 0
tgaHeader\ystart = 0
tgaheader\pixeldepth = 32
tgaheader\descriptor = % 11110100
*pImage = AllocateMemory(width * height * 4 + SizeOf(TGA_HEADER))
If *pImage > 0
CopyMemory(@tgaheader, *pImage, SizeOf(TGA_HEADER))
scp\mWidth = width
scp\mHeight = height
scp\mTargetBuf = *pImage + SizeOf(TGA_HEADER)
Debug "memory: " + Str(scp\mWidth * scp\mHeight * 4)
If initCapture(deviceno, @scp)
Debug "initCapture"
Repeat
FPSCounter()
doCapture(deviceno)
; While isCaptureDone(deviceno) = 0
; If quit = 1
; Break
; EndIf
; Delay(1)
; Wend
If quit = 1
Break
EndIf
If CatchImage(#Image_Capture, *pImage)
StartDrawing(ImageOutput(#Image_Copy))
DrawImage(ImageID(#Image_Capture), 0, 0)
StopDrawing()
;CopyImage(#Image_Capture, #Image_Copy)
SetGadgetState(#Image_Gadget_0, ImageID(#Image_Copy))
;depth = ImageDepth(#Image_Copy)
;Debug "depth: " + Str(depth)
EndIf
Delay(1)
Until quit = 1
deinitCapture(deviceno)
Debug "deinitCapture"
EndIf
EndIf
If *namebuffer > 0
FreeMemory(*namebuffer)
EndIf
If *pImage > 0
FreeMemory(*pImage)
EndIf
EndIf
EndProcedure
If OpenWindow_Window_0()
StickyWindow(#Window_0, 1)
captureTH = CreateThread(@capture(), 0)
;- Event loop
Repeat
Event = WaitWindowEvent(100)
EventGadget = EventGadget()
EventType = EventType()
EventWindow = EventWindow()
Select Event
Case #PB_Event_Gadget
If EventGadget = #Image_Gadget_0
EndIf
Case #PB_Event_CloseWindow
quit = 1
EndSelect
q1 = IsThread(captureTH)
Until quit = 1 And q1 = 0
EndIf
escapiClose()
End
PB v5.72 x86/x64
Windows 10 Pro 64bit
Windows 10 Pro 64bit
- Blackskyliner
- Beiträge: 532
- Registriert: 28.07.2005 00:54
- Wohnort: /home/Blackskyliner/
Re: 3 webcams
Wenn das ganze gut läuft wäre der Code ja mal was für die Tipps und Tricks Sektion
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher