def __init__(self, verbose=False, output_dir='images'):
        self.new_msg = False
        self.idx = 0
        self.last_msg = None
        self.verbose = verbose
        self.calib = None
        self.output_dir_orig = path.join(output_dir, 'orig')
        self.output_dir_undist = path.join(output_dir, 'undist')
        if not path.exists(self.output_dir_orig):
            makedirs(self.output_dir_orig)
        if not path.exists(self.output_dir_undist):
            makedirs(self.output_dir_undist)

        # camera class to simplify uEye API access
        self.verbose_print("Start uEye interface")

        self.cam = Camera()
        try:
            self.cam.init()
        except uEyeException:
            self.verbose_print("Camera init failed")
            self.cam = None
            return

        check(
            ueye.is_SetExternalTrigger(self.cam.handle(),
                                       ueye.IS_SET_TRIGGER_SOFTWARE))
        self.cam.set_colormode(ueye.IS_CM_BGR8_PACKED)
        self.cam.set_aoi(0, 0, 2048, 2048)

        # pixel clock
        self.verbose_print("Pixel clock")
        self.cam.get_pixel_clock_range(self.verbose)
        self.cam.set_pixel_clock(20)
        self.cam.get_pixel_clock(self.verbose)

        # set expo
        self.verbose_print("Expo")
        self.cam.get_exposure_range(self.verbose)
        self.cam.set_exposure(1.)
        self.cam.get_exposure(self.verbose)

        self.verbose_print("Init done")
        self.buff = self.cam.alloc_single()
        check(ueye.is_SetDisplayMode(self.cam.handle(), ueye.IS_SET_DM_DIB))
        self.verbose_print("Alloc done")
Example #2
0
    def camera_connect(self, device_id):
        print_style("Camera Connect", mode="blue")
        if self.cam_status[device_id]:
            self.cam[device_id] = Camera(device_id)
            # self.cam[device_id].init()
            self.cam[device_id].alloc()

        else:
            print_style("Camera ID:", device_id, " Unavailable", color="red")
def main():
    get_camera_status()
    print_style("Insert number of camera(s) that you want to use", color="blue")
    number_of_camera = int(input())
    cam = [[]]*number_of_camera
    thread = [[]]*number_of_camera

    for i in range(number_of_camera):
        print_style("Insert Camera ID", color="blue")
        device_id = int(input())
        cam[i] = Camera()
        cam[i].init()

        cam[i].alloc()
        cam[i].capture_video()

        print_style("Camera ID:", device_id, "Start", color="green")
        thread[i] = FrameThread(cam[i], device_id)
        thread[i].start()
Example #4
0
def main():

    # camera class to simplify uEye API access
    cam = Camera()
    cam.init()
    #    cam.set_colormode(ueye.IS_CM_BGR8_PACKED)
    #    cam.set_aoi(0,0, 640, 480)

    cam.alloc()
    cam.capture_video()

    # a thread that waits for new images and processes all connected views
    thread = FrameThread(cam)
    thread.start()

    time.sleep(60)

    thread.stop()
    thread.join()

    cam.stop_video()
    cam.exit()
Example #5
0
def main():
    # we need a QApplication, that runs our QT Gui Framework    
    app = PyuEyeQtApp()
 
    # a basic qt window
    view = PyuEyeQtView()
    view.show()
    view.user_callback = process_image

    # camera class to simplify uEye API access
    cam = Camera()
    cam.init()
    cam.set_colormode(ueye.IS_CM_MONO8)
    print('Color Mode:', cam.get_colormode())

#     print(ueye.IS_CM_BGR8_PACKED)
    cam.set_aoi(0, 0, 1280, 4)
    aoi = cam.get_aoi()
    print('AOI:', aoi.x, aoi.y, aoi.width, aoi.height)
    
    print('Framerate Range:', cam.get_FrameTimeRange()[0], cam.get_FrameTimeRange()[1],cam.get_FrameTimeRange()[2])
    
#     cam.set_fps(10)
    cam.set_fps(1/cam.get_FrameTimeRange()[0])
    
    cam.set_exposure(0.1)
    print('Exposure Time:', cam.get_exposure())
    
#     print(cam.get_colordepth()[0], cam.get_colordepth()[1])
    cam.alloc()
    cam.capture_video()
    
    #a thread that waits for new images and processes all connected views
    thread = FrameThread(cam, view)
#     thread.setDaemon(True)
    thread.start()
    
    
    # cleanup
    app.exit_connect(thread.stop)
    app.exec_()
 
    print('Frame Rate:', cam.get_fps())
    thread.stop()
    thread.join()

    cam.stop_video()
    cam.exit()
Example #6
0
def main():
    parent_conn, child_conn = Pipe()
    cpt = 0
    max_frames = int(input("How many pictures would you like?: "))

    # camera class to simplify uEye API access
    cam = Camera()
    cam.init()
    cam.set_colormode(ueye.IS_CM_BGR8_PACKED)
    cam.set_aoi(0, 0, 1920, 1080)

    cam.alloc()
    cam.capture_video()

    # a thread that waits for new images and processes all connected views
    thread = FrameThread(cam, child_conn)

    thread.start()
    while cpt < max_frames:
        img = parent_conn.recv()
        cv.imshow("Image", img)
        cv.waitKey(200)
        cv.imwrite('train_file/image%04i.jpg' % cpt, img)
        print("image captured")
        #print(input_q.qsize())

        time.sleep(5)
        cpt += 1

    #time.sleep(10)

    thread.stop()
    #thread.join()

    cam.stop_video()
    cam.exit()
    print("Exiting the program")
# Each score represents level of confidence for each of the objects.
# The score is shown on the result image, together with the class label.
detection_scores = detection_graph.get_tensor_by_name('detection_scores:0')
detection_classes = detection_graph.get_tensor_by_name('detection_classes:0')

# Number of objects detected
num_detections = detection_graph.get_tensor_by_name('num_detections:0')

# Initialize the pipeline connecting the thread and the main function
parent_conn, child_conn = Pipe()



# camera class to simplify uEye API access
cam = Camera()
cam.init()
cam.set_colormode(ueye.IS_CM_BGR8_PACKED)
cam.set_aoi(0, 0, 2048, 2048)

cam.alloc()
cam.capture_video()
cam.set_full_auto()

# a thread that waits for new images and processes all connected views
thread = FrameThread(cam, child_conn)
thread.start()
time.sleep(8)

while(True):
class uEyePprzlink:
    def __init__(self, verbose=False, output_dir='images'):
        self.new_msg = False
        self.idx = 0
        self.last_msg = None
        self.verbose = verbose
        self.calib = None
        self.output_dir_orig = path.join(output_dir, 'orig')
        self.output_dir_undist = path.join(output_dir, 'undist')
        if not path.exists(self.output_dir_orig):
            makedirs(self.output_dir_orig)
        if not path.exists(self.output_dir_undist):
            makedirs(self.output_dir_undist)

        # camera class to simplify uEye API access
        self.verbose_print("Start uEye interface")

        self.cam = Camera()
        try:
            self.cam.init()
        except uEyeException:
            self.verbose_print("Camera init failed")
            self.cam = None
            return

        check(
            ueye.is_SetExternalTrigger(self.cam.handle(),
                                       ueye.IS_SET_TRIGGER_SOFTWARE))
        self.cam.set_colormode(ueye.IS_CM_BGR8_PACKED)
        self.cam.set_aoi(0, 0, 2048, 2048)

        # pixel clock
        self.verbose_print("Pixel clock")
        self.cam.get_pixel_clock_range(self.verbose)
        self.cam.set_pixel_clock(20)
        self.cam.get_pixel_clock(self.verbose)

        # set expo
        self.verbose_print("Expo")
        self.cam.get_exposure_range(self.verbose)
        self.cam.set_exposure(1.)
        self.cam.get_exposure(self.verbose)

        self.verbose_print("Init done")
        self.buff = self.cam.alloc_single()
        check(ueye.is_SetDisplayMode(self.cam.handle(), ueye.IS_SET_DM_DIB))
        self.verbose_print("Alloc done")

    def stop(self):
        if self.cam is not None:
            self.cam.free_single(self.buff)
            self.verbose_print("Free mem done")
            self.cam.exit()
            self.verbose_print("leaving")

    def set_calib(self, conf_file):
        with open(conf_file, 'r') as f:
            conf = json.load(f)
            self.verbose_print(json.dumps(conf))
            K = np.array(conf['K'])
            D = np.array(conf['D'])
            dim = tuple(conf['dim'])
            map1, map2 = cv2.fisheye.initUndistortRectifyMap(
                K, D, np.eye(3), K, dim, cv2.CV_16SC2)
            self.calib = (map1, map2)
            self.verbose_print("Calib set")

    def verbose_print(self, text):
        if self.verbose:
            print(text)

    def process_msg(self, ac_id, msg):
        self.new_msg = True
        self.idx = int(msg['photo_nr'])
        self.last_msg = msg

    def set_gps_exif(self, file_name, lat, lon, alt):
        """Adds GPS position as EXIF metadata
        file_name -- image file
        lat -- latitude (1e7 deg, as int)
        lon -- longitude (1e7 deg, as int)
        alt -- altitude MSL (in mm, as int)
        """
        def get_loc(value, loc):
            if value < 0:
                return loc[0]
            elif value > 0:
                return loc[1]
            else:
                return ""

        try:
            exiv_lat = (make_fraction(abs(lat), 10000000), make_fraction(0, 1),
                        make_fraction(0, 1))
            exiv_lng = (make_fraction(abs(lon), 10000000), make_fraction(0, 1),
                        make_fraction(0, 1))
            if alt > 0.:
                exiv_alt = make_fraction(alt, 1000)
            else:
                exiv_alt = make_fraction(0, 1)

            exiv_image = pyexiv2.ImageMetadata(file_name)
            exiv_image.read()
            exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat
            exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = get_loc(
                lat, ["S", "N"])
            exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng
            exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = get_loc(
                lon, ["W", "E"])
            exiv_image["Exif.GPSInfo.GPSAltitude"] = exiv_alt
            exiv_image["Exif.GPSInfo.GPSAltitudeRef"] = '0'
            exiv_image["Exif.Image.GPSTag"] = 654
            exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
            exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'
            exiv_image.write()
            self.verbose_print("writing exif done")
        except:
            self.verbose_print("writing exif failed")
            pass

    def process_image(self, image_data, file_type='jpg'):
        # reshape the image data as 1dimensional array
        image = image_data.as_1d_image()
        lat = int(self.last_msg['lat'])
        lon = int(self.last_msg['lon'])
        alt = int(self.last_msg['hmsl'])
        phi = int(self.last_msg['phi'])
        theta = int(self.last_msg['theta'])
        psi = int(self.last_msg['psi'])
        time = int(self.last_msg['itow'])
        image_name = "img_{:04d}_{:d}_{:d}_{:d}_{:d}_{:d}_{:d}_{:d}.jpg".format(
            self.idx, lat, lon, alt, phi, theta, psi, time)
        image_name_full = path.join(self.output_dir_orig, image_name)
        cv2.imwrite(image_name_full, image)
        # also set GPS pos in exif metadata
        self.set_gps_exif(image_name_full, lat, lon, alt)
        self.verbose_print("save image: {}".format(image_name_full))
        if self.calib is not None:
            map1, map2 = self.calib
            undist_img = cv2.remap(image,
                                   map1,
                                   map2,
                                   interpolation=cv2.INTER_LINEAR,
                                   borderMode=cv2.BORDER_CONSTANT)
            undist_name_full = path.join(self.output_dir_undist,
                                         "undist_{}".format(image_name))
            cv2.imwrite(undist_name_full, undist_img)
            self.set_gps_exif(undist_name_full, lat, lon, alt)
            self.verbose_print("save undist: {}".format(undist_name_full))