Mercurial > pygame
annotate examples/camera.py @ 3172:d1b367fc08bc tests-returncode
Use a return code of 1 when the tests fail.
| author | Thomas Kluyver <takowl@gmail.com> |
|---|---|
| date | Wed, 09 Jan 2013 10:13:57 +0000 |
| parents | df86e7f9b1d1 |
| children |
| rev | line source |
|---|---|
|
1417
9132a5f8289d
changed to /usr/bin/env python
Nirav Patel <nrp@eclecti.cc>
parents:
1416
diff
changeset
|
1 #!/usr/bin/env python |
| 1416 | 2 |
| 3 # 1. Basic image capturing and displaying using the camera module | |
| 4 | |
| 5 import pygame | |
| 6 import pygame.camera | |
| 7 from pygame.locals import * | |
| 8 | |
| 9 | |
| 10 class VideoCapturePlayer(object): | |
| 11 | |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
12 size = ( 640, 480 ) |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
13 def __init__(self, **argd): |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
14 self.__dict__.update(**argd) |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
15 super(VideoCapturePlayer, self).__init__(**argd) |
|
1431
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
16 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
17 # create a display surface. standard pygame stuff |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
18 self.display = pygame.display.set_mode( self.size, 0 ) |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
19 self.init_cams(0) |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
20 |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
21 def init_cams(self, which_cam_idx): |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
22 |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
23 # gets a list of available cameras. |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
24 self.clist = pygame.camera.list_cameras() |
| 3000 | 25 print (self.clist) |
|
1431
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
26 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
27 if not self.clist: |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
28 raise ValueError("Sorry, no cameras detected.") |
|
1431
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
29 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
30 try: |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
31 cam_id = self.clist[which_cam_idx] |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
32 except IndexError: |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
33 cam_id = self.clist[0] |
|
1431
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
34 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
35 # creates the camera of the specified size and in RGB colorspace |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
36 self.camera = pygame.camera.Camera(cam_id, self.size, "RGB") |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
37 |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
38 # starts the camera |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
39 self.camera.start() |
|
1431
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
40 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
41 self.clock = pygame.time.Clock() |
|
1431
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
42 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
43 # create a surface to capture to. for performance purposes, you want the |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
44 # bit depth to be the same as that of the display surface. |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
45 self.snapshot = pygame.surface.Surface(self.size, 0, self.display) |
| 1416 | 46 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
47 def get_and_flip(self): |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
48 # if you don't want to tie the framerate to the camera, you can check and |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
49 # see if the camera has an image ready. note that while this works |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
50 # on most cameras, some will never return true. |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
51 if 0 and self.camera.query_image(): |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
52 # capture an image |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
53 |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
54 self.snapshot = self.camera.get_image(self.snapshot) |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
1431
diff
changeset
|
55 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
56 if 0: |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
57 self.snapshot = self.camera.get_image(self.snapshot) |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
58 #self.snapshot = self.camera.get_image() |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
59 |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
60 # blit it to the display surface. simple! |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
61 self.display.blit(self.snapshot, (0,0)) |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
62 else: |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
63 self.snapshot = self.camera.get_image(self.display) |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
64 #self.display.blit(self.snapshot, (0,0)) |
|
1431
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
65 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
66 |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
67 pygame.display.flip() |
| 1416 | 68 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
69 def main(self): |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
70 going = True |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
71 while going: |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
72 events = pygame.event.get() |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
73 for e in events: |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
74 if e.type == QUIT or (e.type == KEYDOWN and e.key == K_ESCAPE): |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
75 going = False |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
76 if e.type == KEYDOWN: |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
77 if e.key in range(K_0, K_0+10) : |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
78 self.init_cams(e.key - K_0) |
| 1416 | 79 |
|
2176
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
80 |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
81 self.get_and_flip() |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
82 self.clock.tick() |
|
296a8aece85a
Some examples.camera cleanups
Rene Dudfield <renesd@gmail.com>
parents:
1610
diff
changeset
|
83 print (self.clock.get_fps()) |
| 1416 | 84 |
|
1431
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
85 def main(): |
|
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
86 pygame.init() |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
1431
diff
changeset
|
87 pygame.camera.init() |
|
1431
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
88 VideoCapturePlayer().main() |
|
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
89 pygame.quit() |
|
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
90 |
|
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
91 if __name__ == '__main__': |
|
0eb69a939a65
updated examples so that they all have a main() and use pygame.quit
Rene Dudfield <renesd@gmail.com>
parents:
1417
diff
changeset
|
92 main() |
