Пример #1
0
def manual_cal():
    c = Camera()
    sweep = list(range(EXP_MIN, EXP_MAX, EXP_STEP))
    imgs = c.exposure_sweep(sweep)

    for e, i in zip(sweep, imgs):
        debug_save_img(i, str(e) + '.jpg')
Пример #2
0
def cap_deck():
    c = Camera()
    sd = SerialDevice()
    dispenser = Dispenser(serial_device=sd)
    count = 0
    for i in range(10):
        _ = input('press enter to start...')
        for j in range(10):
            img = c._capture_image(enable_and_disable=True)
            debug_save_img(img, '/home/pi/pics/{}.jpg'.format(count))
            count += 1
            dispenser.dispense_card()
Пример #3
0
def auto_cal():
    print("Ensure blank white playing card is being used")
    c = Camera()
    img_raw = c._capture_image(enable_and_disable=True)
    img_greyscale = cv2.cvtColor(img_raw, cv2.COLOR_BGR2GRAY)
    img_gs_blur = cv2.GaussianBlur(img_greyscale, (5, 5), 0)
    img_gs_blur_crop = img_gs_blur[cfg.H_MIN:cfg.H_MAX, cfg.W_MIN:cfg.W_MAX]

    debug_save_img(img_gs_blur_crop,
                   'Shuffle-o-matic/helpers/Card_Imgs/cal.jpg')

    print("Calibration image updated!")
Пример #4
0
def main():
    sd = SerialDevice()
    d_motor = DispenseStep(serial_device=sd)
    p_motor = PushStep(serial_device=sd)
    b_motor = BinStep(serial_device=sd)
    dispenser = Dispenser(serial_device=sd)
    camera = Camera()

    b_motor.zero()
    p_motor.zero()
    d_motor.zero()

    t_start = time.time()
    d_motor.enable()
    d_motor.raise_stage()

    print('READY')
    try:
        while True:
            try:
                cmd, data = check_for_cmd()
                if cmd is not None:
                    pre_shuffle(d_motor, p_motor, b_motor, dispenser)
                    if 'RAND' in cmd:
                        random_shuffle(d_motor, p_motor, b_motor, dispenser,
                                       data)
                    elif 'BJACK' in cmd or 'HOLD' in cmd:
                        planned_shuffle(d_motor, p_motor, b_motor, dispenser,
                                        camera, data)
                    post_shuffle(d_motor, p_motor, b_motor, dispenser)
                    print('Shuffle Completed!')
            except Exception as e:
                print('Shuffle Errored!', e)
                pass

            time.sleep(0.1)
    except KeyboardInterrupt:
        post_shuffle(d_motor, p_motor, b_motor, dispenser)
        d_motor.disable()
Пример #5
0
def cam_test():
    c = Camera()
    while True:
        _ = input('Press enter to read card')
        card = c.read_card(enable_and_disable=True)
        print(card.rank, card.suit)
Пример #6
0
def planned_shuffle(d_motor:DispenseStep, p_motor:PushStep, b_motor:BinStep, dispenser:Dispenser, camera:Camera, deck):
    # Initialize vars
    dispenser.enable_motor()
    dispenser.baseline_motor_cur()
    t_last_dispense = time.time()
    n_bins = len(cfg.bin_heights_load_mm)
    cards_in_trash = 0

    camera.start_camera()

    # Generate bin reqs for deck
    deck.break_into_bins(n_bins=n_bins)

    def empty_trash():
        p_motor.enable()
        b_motor.unload_bin_pos(n_bins-1)
        time.sleep(0.1)
        p_motor.run()
        p_motor.disable()

    junk_cards_dispensed = 0
    last_card = camera.read_card()
    while junk_cards_dispensed < cfg.planned_shuffle_timeout:
        card = camera.read_card()

        # Determine where to put card. If it is the same as last, it probs failed to dispense
        if card.rank is None and card.suit is None:
            bin_index = None
        elif last_card.rank is card.rank and last_card.suit is card.suit:
            print('Previous card failed to dispense. Re-dispensing')
            pass
        else:
            bin_index = deck.get_bin(card)
            last_card = card
            print(card.rank, card.suit, ":", bin_index)

            # Handle vars if trash card
            if bin_index is None:
                bin_index = n_bins - 1
                cards_in_trash += 1
                junk_cards_dispensed += 1

            # Move to bin location
            b_motor.load_bin_pos(bin_index)

        # Dispense card
        while time.time() < t_last_dispense + cfg.min_time_between_dispenses_s:
            pass
        if not dispenser.dispense_card():
            raise Exception("Card Jam")
        t_last_dispense = time.time()

        # Check for full trash
        if cards_in_trash >= cfg.max_cards_per_bin:
            empty_trash()
            cards_in_trash = 0

        # Check for shuffle completion
        if deck.is_shuffle_complete:
            return_all_cards(p_motor, b_motor)
            break

    else:
        print("Planned Shuffle Timeout")

    camera.stop_camera()
Пример #7
0
def main():
    c = Camera()
    c.start_camera()
    card = c.read_card()
    print(card.rank, card.suit)
    c.stop_camera()