1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #!/usr/bin/env python
- # 1. Basic image capturing and displaying using the camera module
- import pygame
- import pygame.camera
- from pygame.locals import *
- class VideoCapturePlayer(object):
- size = ( 640, 480 )
- def __init__(self, **argd):
- self.__dict__.update(**argd)
- super(VideoCapturePlayer, self).__init__(**argd)
- # create a display surface. standard pygame stuff
- self.display = pygame.display.set_mode( self.size, 0 )
- self.init_cams(0)
- def init_cams(self, which_cam_idx):
- # gets a list of available cameras.
- self.clist = pygame.camera.list_cameras()
- print (self.clist)
- if not self.clist:
- raise ValueError("Sorry, no cameras detected.")
- try:
- cam_id = self.clist[which_cam_idx]
- except IndexError:
- cam_id = self.clist[0]
- # creates the camera of the specified size and in RGB colorspace
- self.camera = pygame.camera.Camera(cam_id, self.size, "RGB")
- # starts the camera
- self.camera.start()
- self.clock = pygame.time.Clock()
- # create a surface to capture to. for performance purposes, you want the
- # bit depth to be the same as that of the display surface.
- self.snapshot = pygame.surface.Surface(self.size, 0, self.display)
- def get_and_flip(self):
- # if you don't want to tie the framerate to the camera, you can check and
- # see if the camera has an image ready. note that while this works
- # on most cameras, some will never return true.
- if 0 and self.camera.query_image():
- # capture an image
- self.snapshot = self.camera.get_image(self.snapshot)
- if 0:
- self.snapshot = self.camera.get_image(self.snapshot)
- #self.snapshot = self.camera.get_image()
- # blit it to the display surface. simple!
- self.display.blit(self.snapshot, (0,0))
- else:
- self.snapshot = self.camera.get_image(self.display)
- #self.display.blit(self.snapshot, (0,0))
- pygame.display.flip()
- def main(self):
- going = True
- while going:
- events = pygame.event.get()
- for e in events:
- if e.type == QUIT or (e.type == KEYDOWN and e.key == K_ESCAPE):
- going = False
- if e.type == KEYDOWN:
- if e.key in range(K_0, K_0+10) :
- self.init_cams(e.key - K_0)
- self.get_and_flip()
- self.clock.tick()
- print (self.clock.get_fps())
- def main():
- pygame.init()
- pygame.camera.init()
- VideoCapturePlayer().main()
- pygame.quit()
- if __name__ == '__main__':
- main()
|