1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
import pygame
def list_cameras():
return [0]
# this just cycles through all the cameras trying to open them
cameras = []
for x in range(256):
try:
c = Camera(x)
except:
break
cameras.append(x)
return cameras
def init():
global vidcap
import vidcap as vc
vidcap = vc
def quit():
global vidcap
pass
del vidcap
class Camera:
def __init__(self, device =0,
size = (640,480),
mode = "RGB",
show_video_window=0):
"""device: VideoCapture enumerates the available video capture devices
on your system. If you have more than one device, specify
the desired one here. The device number starts from 0.
show_video_window: 0 ... do not display a video window (the default)
1 ... display a video window
Mainly used for debugging, since the video window
can not be closed or moved around.
"""
self.dev = vidcap.new_Dev(device, show_video_window)
width, height = size
self.dev.setresolution(width, height)
def display_capture_filter_properties(self):
"""Displays a dialog containing the property page of the capture filter.
For VfW drivers you may find the option to select the resolution most
likely here.
"""
self.dev.displaycapturefilterproperties()
def display_capture_pin_properties(self):
"""Displays a dialog containing the property page of the capture pin.
For WDM drivers you may find the option to select the resolution most
likely here.
"""
self.dev.displaycapturepinproperties()
def set_resolution(self, width, height):
"""Sets the capture resolution. (without dialog)
"""
self.dev.setresolution(width, height)
def get_buffer(self):
"""Returns a string containing the raw pixel data.
"""
return self.dev.getbuffer()
def start(self):
"""
"""
def set_controls(self, **kwargs):
"""
"""
def stop(self):
"""
"""
def get_image(self, dest_surf = None):
return self.get_surface(dest_surf)
def get_surface(self, dest_surf = None):
"""Returns a pygame Surface.
"""
abuffer, width, height = self.get_buffer()
if abuffer:
if 1:
surf = pygame.image.frombuffer(abuffer, (width, height), "RGB")
# swap it from a BGR surface to an RGB surface.
r,g,b,a = surf.get_masks()
surf.set_masks((b,g,r,a))
r,g,b,a = surf.get_shifts()
surf.set_shifts((b,g,r,a))
surf = pygame.transform.flip(surf, 0,1)
# if there is a destination surface given, we blit onto that.
if dest_surf:
dest_surf.blit(surf, (0,0))
return dest_surf
else:
# Need to flip the image.
surf = pygame.image.fromstring(abuffer, (width, height), "RGB", 1)
# swap it from a BGR surface to an RGB surface.
r,g,b,a = surf.get_masks()
surf.set_masks((b,g,r,a))
r,g,b,a = surf.get_shifts()
surf.set_shifts((b,g,r,a))
return surf
if __name__ == "__main__":
import pygame.examples.camera
pygame.camera.Camera = Camera
pygame.camera.list_cameras = list_cameras
pygame.examples.camera.main()
|