예제 #1
0
class MainLoop(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.camera = Camera()
        self.detector = Detector()
        self.stop_loop = False
        self.telemetry = Telemetry()
        self.position_calculator = PositionCalculator()
        self.frame = None

    def run(self):

        if Values.PRINT_FPS:
            last_time = time.time()
            ind = 0
        while True:
            try:
                if self.stop_loop:
                    break

                #self.frame = cv2.imread("images/pole_new.jpg")
                self.frame = self.camera.get_frame()

                #self.frame = cv2.resize(self.frame, (Values.CAMERA_WIDTH, Values.CAMERA_HEIGHT))
                if self.frame is None:
                    continue

                detections = self.detector.detect(self.frame)
                self.telemetry.update_telemetry()
                self.position_calculator.update_meters_per_pixel(
                    self.telemetry.altitude)
                self.position_calculator.calculate_max_meters_area()
                for d in detections:
                    lat, lon = self.position_calculator.calculate_point_lat_long(
                        d.middle_point, self.telemetry.latitude,
                        self.telemetry.longitude, self.telemetry.azimuth)
                    d.update_lat_lon(lat, lon)
                    d.area_m = self.position_calculator.calculate_area_in_meters_2(
                        d.area)
                    d.draw_detection(self.frame)

                cv2.imshow("frame", self.frame)

                if cv2.waitKey(1) & 0xFF == ord('q'):
                    break

                if Values.PRINT_FPS:
                    ind += 1
                    if time.time() - last_time > 1:
                        print("FPS:", ind)
                        ind = 0
                        last_time = time.time()

            except Exception as e:
                print("Some error accrued: ", str(e))
        self.close()

    def close(self):
        self.camera.close()
        self.stop_loop = True
예제 #2
0
def main():
    # Clear the screen
    subprocess.call('clear', shell=True)
    config_object = Config(os.getcwd() + '/config/config.ini').raw_config_object
    transport = UdpSocket(config_object)
    camera = Camera(config_object)

    if config_object['COMPRESSION']['switch'] == 'On':
        compressor = Compressor(config_object)
        transport.add_compression(compressor)

    if config_object['ENCRYPTION']['switch'] == 'On':
        # encryptor = Encryptor(config_object)
        # transport.add_encryption(encryptor)
        pass

    try:
        while True:
            time.sleep(float(config_object['QUALITY']['delay']))
            image = camera.get_frame()
            transport.send_data(image)

    except LookupError as e:
        print(e)
        sys.exit(2)

    except KeyboardInterrupt:
        print('keyboard interruption')
        sys.exit(1)