import subprocess import tempfile try: from pyA20.gpio import gpio, port except ImportError: from unittest.mock import Mock gpio = Mock() class Tmpobj(): pass port = Tmpobj() port.PG0 = 42 from bureau import Bureau, add_api class Photography(Bureau): """ The Photography dept. provides document camera and other image capture services for other bureaus. """ name = "Photography Dept." prefix = "PX" version = 0 doc_light_pin = port.PG0 def __init__(self): Bureau.__init__(self) # set up the gpios for lamp & knobs gpio.init() gpio.pullup(self.doc_light_pin, 0) # reset pullup state gpio.pullup(self.doc_light_pin, gpio.PULLDOWN) def _doc_light_on(self): gpio.output(self.doc_light_pin, gpio.HIGH) def _doc_light_off(self): gpio.output(self.doc_light_pin, gpio.LOW) @add_api("photo", "Get Document Photo") def photo(self): """ Takes a photograph using the document camera. Returns the file name. """ self._doc_light_on() tmpimg = tempfile.NamedTemporaryFile(suffix=".jpg", delete=False) tmpimg.close() # TODO: make more reliable # TODO: make resolution config variable # this is a dirty hack to keep the webcam system calls from hanging #cmd1 = "fswebcam --jpeg 95 --no-banner --resolution 320x240 /dev/null" #cmd2 = "fswebcam --jpeg 95 --no-banner --resolution 1920x1080 " #cmd2 += "-F 2 -S 1" + tmpimg.name #cmd1 = "uvccapture -d/dev/video1 -x320 -y240 -o /dev/null" cmd2 = "uvccapture -d/dev/video1 -D2 -m -x3264 -y2448 -o" + tmpimg.name #subprocess.check_output(cmd1.split()) subprocess.check_output(cmd2.split()) self._doc_light_off() return {"photo": tmpimg.name} def main(): px = Photography() px.run() if __name__ == "__main__": main()