Example #1
0
 def get(self, api):
     memory_file = StringIO()
     g = Grabber(api)
     g.grab(memory_file)
     self.response.headers['Content-Type'] = 'application/zip'
     self.response.headers[
         'Content-Disposition'] = ('attachment;filename={}.zip'.format(api))
     self.response.write(memory_file.getvalue())
     memory_file.close()
Example #2
0
 def process_queue(self):
     map_fromsettings = True
     if not self.cell_list:
         self.cell_list = []
         if self.config.get('map','render_from') == 'webdir':
             self.cell_list.extend(self._get_regions_from_apache_dir(self.config.get('service','render_webdir')))
         elif self.config.get('map','render_from') == 'dsm':
             self.cell_list.extend(self._get_regions_from_dsm())
         else:
             print 'select a valid(db/webdir) scavenging method!'
             return
         self._clean_tilepath()
         self.processor.write_helpers()
         map_fromsettings = False
     self.init_map(map_fromsettings)
     grabber = Grabber(self,self.config.getint('service','grab_workers'))
     grabber.grab(self.cell_list)
     return {'cells':len(self.cell_list)}
Example #3
0
class Toddler:
    MOTOR_PORT = 1
    BUMP_SENSOR_SHELF_1 = 0
    BUMP_SENSOR_SHELF_2 = 1
    BUMP_SENSOR_GRABBER_FRONT = 2
    BUMP_SENSOR_GRABBER_BACK = 3

    def __init__(self, onRobot):
        IO = IOTools(onRobot)
        print('Grabber initialised')
        self.camera = IO.camera.initCamera('pi', 'low')
        self.getInputs = IO.interface_kit.getInputs
        self.getSensors = IO.interface_kit.getSensors
        self.mc = IO.motor_control
        self.mc.stopMotors()
        self.sc = IO.servo_control
        self.sc.engage()
        self.grabber = Grabber(self.mc, self.MOTOR_PORT, self.sc)
        #self.grabber.prepare_grabber()
        self.lift = Lift(onRobot, self.mc)

        self.lift_pos = 0
        self.s = None
        # self.mc.setMotor(self.MOTOR_PORT, 100)
        # time.sleep(3)
        # self.mc.stopMotors()

    def kill_socket(self):
        s.close()

    def listen(self):
        global halt
        try:
            PORT = 65432  # Port to listen on (non-privileged ports are > 1023)
            self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            # HOST = socket.gethostbyname(socket.gethostname())
            HOST = '192.168.105.139'
            self.s.bind(('192.168.105.139', PORT))
            print("Listening on {}:{}".format(HOST, PORT))

            self.s.listen(1)
            conn, addr = self.s.accept()
            while not (halt['stop']):

                data = conn.recv(1024)
                data = data.decode('utf-8')
                data = data.split(' ')
                print("Listen: " + data[0])
                if data[0] == 'grab':
                    self.grabber.grab(self)
                elif data[0] == 'upper_grab':
                    self.grabber.upper_grab(self)
                elif data[0] == 'prepare':
                    self.grabber.prepare_grabber()
                elif data[0] == 'retract':
                    self.grabber.retract_grabber()
                elif data[0] == 'wait_for_bump':
                    inp = self.getInputs()
                    while inp[self.BUMP_SENSOR_SHELF_1] == 0 or inp[
                            self.BUMP_SENSOR_SHELF_2] == 0:
                        print(inp)
                    print("bump")
                elif data[0] == 'lift':
                    if int(data[1]) < self.lift_pos:
                        print('down')
                        self.lift.lift('down')
                    elif int(data[1]) > self.lift_pos:
                        print('up')
                        self.lift.lift('up')
                    self.lift_pos = int(data[1])
                    time.sleep(0.5)
                elif data[0] == 'drop':
                    self.grabber.prepare_grabber()
                    while inp[self.BUMP_SENSOR_GRABBER_BACK] == 0:
                        print('Waiting for collection')
                    self.grabber.retract_grabber()
                print("Listen done")
                conn.sendall(b'done')
            conn.close()
        except KeyboardInterrupt:
            conn.close()
            return

    def control(self):
        global halt

        try:
            thread = Thread(target=self.listen)
            thread.daemon = True
            thread.start()
            print("here")
            rjr = RobotJobListener(('192.168.105.38', 9000),
                                   ('192.168.105.139', 65432),
                                   ('192.168.105.94', 65433))
            rjr.start_reliable_listener('robot')
            # start pinging the server
            # server, rasppi, ev3
        except KeyboardInterrupt:
            halt['stop'] = True
            self.sc.disengage()
            return

    def vision(self):
        # image = self.camera.getFrame()
        # self.camera.imshow('Camera', image)
        time.sleep(0.05)
        return
Example #4
0
class ScreenRecorder(object):
    grp = None
    dimmensions = None # Screen area

    attempt = 1
    keypresses = []
    buffer_write = None     # Write pointer
    buffer_read = None      # Read pointer
    space_pressed = False

    attempt_startime = 0
    attempt_endtime = 0

    times = []              # List with the time progression of each attempt

    writter = None      #  For saving video

    # sfrag example: (1, 26, 1601, 926) captures 1600x900 
    # without the window bar 
    def __init__(self, sfrag, buffer_len=2):
        self.grb = Grabber(bbox=sfrag)

        # Calculate screen size
        size = (sfrag[2]-sfrag[0], sfrag[3]-sfrag[1])
        self.dimmensions = size + (3,)

        # Set the frame buffer to zeros
        self.buffer_write = np.zeros(self.dimmensions, dtype=np.int8)
        self.buffer_read = np.zeros(self.dimmensions, dtype=np.int8)

        self.space_pressed = False   

   

    # Grabs a frame and sotores it in buffer[buffer_head]
    # Also grabs the key value
    def refresh_frame(self):
        if wapi.GetAsyncKeyState(32):
            self.space_pressed = True
        else:
            self.space_pressed = False
            
        self.buffer_write = self.grb.grab(None)
        self.buffer_write, self.buffer_read = self.buffer_read, self.buffer_write
        
 

    # Gets the newest frame from buffer[buffer_head]
    def get_newest_frame(self):
        return self.buffer_read

    def capture_live(self, show=False, save=False, savePath="video_raw.mp4", time_frame=5, cut_attempt=False):
      
        time_start = time.time()
        if save and (savePath != None): 
            fps=60 # !!!
            
            if cut_attempt:
                size = (self.dimmensions[0]-200, self.dimmensions[1]-100)
            else:
                size = (self.dimmensions[0], self.dimmensions[1])

            fourcc = cv2.VideoWriter_fourcc(*'mp4v')
            writer = cv2.VideoWriter(savePath, fourcc, fps, size)  

        self.attempt_startime = time.time()
        while True:
            
            # Cambiar por tecla !!!
            if time.time() - time_start > time_frame:
                break

            self.refresh_frame()
            self.keypresses.append(self.key_check(32))
            self.update_attempt()
                    
            # Recortar el frame
            if cut_attempt:
                frame = self.reduce_frame(self.buffer_read)
            else:
                frame = self.buffer_read

            # Muestra la grabacion
            if show:
                #frame = self.buffer_read
                cv2.imshow('frame',frame)
                cv2.waitKey(1) 

            if save:
                #frame = self.buffer_read
                time.sleep(0.01)
                writer.write(frame)
    
        if save: 
            writer.release()
            np.asarray(self.keypresses)
            np.savez_compressed("keypresses_raw.npz", self.keypresses, allow_pickle=True)

    def update_attempt(self, tolerance=0):
        last_frame = self.get_attempt_area(self.buffer_read)
        last_last_frame = self.get_attempt_area(self.buffer_write)
        
        if self.attempt_has_changed(last_frame, last_last_frame, tolerance):
            self.attempt_endtime = time.time()
            self.times.append(self.attempt_endtime - self.attempt_startime)
            
            print(f"Attempt: {self.attempt}, Time: {self.times[-1]}")
            self.attempt += 1
            self.attempt_startime = time.time()
            return True
        return False

    # Isolates a small area that indicates the attempt number 
    # from a frame
    def get_attempt_area(self, frame):
        return frame[0:100, 390:480]        


    def attempt_has_changed(self, frame1_attempt_area, frame_2_attempt_area, tolerance=0):
        diff = frame1_attempt_area - frame_2_attempt_area

        m_norm = np.sum(abs(diff))         # Manhattan norm
        #z_norm = norm(diff.ravel(), 0)    # Zero norm

        if m_norm > tolerance:
            return True
        return False


    def reduce_frame(self, frame):
        return frame[100:, 200:] 



    def key_check(self, key):
        if wapi.GetAsyncKeyState( key):
            return True
        return False
Example #5
0
from grabber import Grabber
from flask import Flask, jsonify, request, Response
import json
import os.path
import re

# Variables
URL = "https://cat-fact.herokuapp.com/facts"
FILENAME = "data.json"

if not os.path.isfile(FILENAME):
    g = Grabber()
    g.grab(URL, FILENAME)

app = Flask(__name__)


@app.route('/', methods=["GET"])
def home():
    return "Welcome to cat facts"


@app.route('/api/v1/catfacts', methods=["GET"])
def get_catfacts():

    # Create a params dict to hold query parameters
    params = {}
    params['firstname'] = request.args.get('firstname')
    params['lastname'] = request.args.get('lastname')
    params['id'] = request.args.get('id')
    print("params is ", params)