# -*- coding: utf-8 -*- from ctypes import * cdll.LoadLibrary("./libzbar.so.0.2.0") import zbar import pygame import pygame.camera from pygame.locals import * pygame.init() pygame.camera.init() class SugarBar: SIZE = (320, 240) def __init__(self): self.nueva = False self.zImg = [] self.cam = pygame.camera.Camera("/dev/video0", self.SIZE, "YUV") self.cam.start() self.scanner = zbar.ImageScanner() self.scanner.parse_config('disable') self.scanner.parse_config('qrcode.enable') self.scanner.enable_cache(True) self.grayImg = pygame.Surface(self.SIZE, depth=8) self.grayImg.set_palette([(x, x, x) for x in xrange(255)]) self.image = pygame.Surface(self.SIZE, depth=24) self.mostrarCam = False def getAndAnalize(self): if self.cam.query_image(): self.nueva = True self.cam.get_image(self.image) arr3d = pygame.surfarray.pixels3d(self.image) lumi = arr3d[0:self.SIZE[0], 0:self.SIZE[1], 0] pygame.surfarray.blit_array(self.grayImg, lumi) imgString = pygame.image.tostring(self.grayImg, "P") self.zImg = zbar.Image(self.SIZE[0], self.SIZE[1], "Y800", imgString) self.scanner.scan(self.zImg) decoded = [] for symbol in self.zImg: decoded.append(symbol.data) return decoded def blitCameraImage(self, display, position): if self.nueva: display.blit(self.grayImg, position) self.nueva = False def stop(self): self.cam.stop() def main(self): display = pygame.display.set_mode(self.SIZE) 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): # close the camera safely self.cam.stop() going = False elif e.type == KEYDOWN and e.key == pygame.K_c: self.mostrarCam = not self.mostrarCam res = self.getAndAnalize() if not res == []: print res if self.mostrarCam: self.blitCameraImage(display, (0, 0)) pygame.display.flip() if __name__ == "__main__": d = SugarBar() d.main()