93 lines
2.7 KiB
Python
93 lines
2.7 KiB
Python
#!/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()
|