Skip to content

<ErrorCode.Timeout: 27>, 'ic4_snapsink_snap_single: Timeout elapsed'Β #22

@Claywzfb

Description

@Claywzfb

Hi, I tried using this code from the examples: save-jpeg-file.py. It was working fine before, but for some reason it stopped working (seems to have started after running the "ic4 Demo Application"). This is the error message the program gives:

runfile('D:/0/save-jpeg-file.py', wdir='D:/0')
[0] DMK 41AU02 (40024083) [IC GenTL Virtual Interface]
Select device [0..0]: 
[ic4      core][   info][             InitLibrary.cpp:99  ] Initializing IC Imaging Control 4 Core Library Version 1.2.0.2954

0

Press ENTER to snap and save a jpeg image
Traceback (most recent call last):

  File "D:\0\save-jpeg-file.py", line 44, in <module>
    example_save_jpeg_file()

  File "D:\0\save-jpeg-file.py", line 27, in example_save_jpeg_file
    buffer = sink.snap_single(1000)

  File "D:\download\anaconda\lib\site-packages\imagingcontrol4\snapsink.py", line 164, in snap_single
    IC4Exception.raise_exception_from_last_error()

  File "D:\download\anaconda\lib\site-packages\imagingcontrol4\ic4exception.py", line 46, in raise_exception_from_last_error
    raise IC4Exception(err, message.value.decode("utf-8"))

IC4Exception: (<ErrorCode.Timeout: 27>, 'ic4_snapsink_snap_single: Timeout elapsed')


[ic4      core][  error][           FrameSnapSink.cpp:117 ] ic4_snapsink_snap_single: Timeout elapsed

BTW, I am trying to use CCD to capture an image every 1 second. Is there something wrong with my code? (It worked fine before, but now I get the same error message as "save-jpeg-file.py")

import imagingcontrol4 as ic4
import time
import os
import cv2
import matplotlib.pyplot as plt
import numpy as np

#%% Function to capture multiple images for a long time and calculate the average
def capture_and_average(one_cam_device):
    # Open the camera with the grabber to control the camera information flow
    grabber = ic4.Grabber(one_cam_device)
    # Create a SnapSink to grab the buffer
    sink = ic4.SnapSink()
    # Start the camera data stream and send it to the buffer sink
    grabber.stream_setup(sink)
    # Get the camera property map
    map = grabber.device_property_map

    #%% Print the allowed range
    print("=======================================")
    print("*Get the allowed range of camera properties*")
    # Get the minimum and maximum values of the resolution width property
    WIDTH_min = map[ic4.PropId.WIDTH].minimum
    WIDTH_max = map[ic4.PropId.WIDTH].maximum
    print("*The range of resolution width is:", WIDTH_min, "~", WIDTH_max)
    # Get the minimum and maximum values of the resolution height property
    HEIGHT_min = map[ic4.PropId.HEIGHT].minimum
    HEIGHT_max = map[ic4.PropId.HEIGHT].maximum
    print("*The range of resolution height is:", HEIGHT_min, "~", HEIGHT_max)
    # Get the minimum and maximum values of the gain property
    GAIN_min = map[ic4.PropId.GAIN].minimum
    GAIN_max = map[ic4.PropId.GAIN].maximum
    print("*The range of gain is:", GAIN_min, "~", GAIN_max)
    # Get the minimum and maximum values of the exposure property
    EXPOSURE_TIME_min = map[ic4.PropId.EXPOSURE_TIME].minimum
    EXPOSURE_TIME_max = map[ic4.PropId.EXPOSURE_TIME].maximum
    print("*The range of exposure is:", EXPOSURE_TIME_min, "~", EXPOSURE_TIME_max)
    # Get the minimum and maximum values of the frame rate property
    ACQUISITION_FRAME_RATE_min = map[ic4.PropId.ACQUISITION_FRAME_RATE].minimum
    ACQUISITION_FRAME_RATE_max = map[ic4.PropId.ACQUISITION_FRAME_RATE].maximum
    print("*The range of frame rate is:", ACQUISITION_FRAME_RATE_min, "~", ACQUISITION_FRAME_RATE_max)
    # Get the minimum and maximum values of the GAMMA property
    GAMMA_min = map[ic4.PropId.GAMMA].minimum
    GAMMA_max = map[ic4.PropId.GAMMA].maximum
    print("*The range of GAMMA is:", GAMMA_min, "~", GAMMA_max)
    print("=======================================")
    #%% Set camera parameters
    #map.set_value(ic4.PropId.EXPOSURE_AUTO, "Off") # Turn off automatic exposure, there is an error
    map.try_set_value(ic4.PropId.EXPOSURE_AUTO, "Off")  # Turn off automatic exposure
    map.set_value(ic4.PropId.EXPOSURE_TIME, 100)  # Adjust exposure time

    map.set_value(ic4.PropId.WIDTH, WIDTH_max)  # Set to maximum resolution width 1280
    map.set_value(ic4.PropId.HEIGHT, HEIGHT_max)  # Set to maximum resolution height 960
    map.set_value(ic4.PropId.GAIN, GAIN_min)  # Set to minimum gain value 260
    map.set_value(ic4.PropId.ACQUISITION_FRAME_RATE, ACQUISITION_FRAME_RATE_max)  # Set frame rate to maximum value 15
    map.set_value(ic4.PropId.GAMMA, 100)  # Gamma is set to 100, which means no change to the original image
    map.set_value(ic4.PropId.PIXEL_FORMAT, ic4.PixelFormat.Mono8)  # Set to 8-bit grayscale pixel format, i.e. 8-bit grayscale image

    # You can view the set value
    #frame_rate = map[ic4.PropId.ACQUISITION_FRAME_RATE].value
    print("Parameter setting completed")
    #%%
    # Create a list to store all NumPy arrays
    all_images = []
    # Capture images and save
    for i in range(3):
        # Grab the buffer of the next image
        buffer = sink.snap_single(1000)  # Give up waiting at most 1000ms
        print(f"Capturing the {i+1}th image is complete")
        # Convert the buffer data to a NumPy array
        img_array = buffer.numpy_wrap()
        all_images.append(img_array)
        # Pause for n seconds
        time.sleep(1)

    # Calculate the average brightness of all images
    average_image = np.mean(all_images, axis=0)

    # Close the camera after use, otherwise it cannot be used next time
    grabber.stream_stop()
    grabber.device_close()
    print("Closing the camera is complete")
    return average_image, all_images

#%% 
if __name__ == "__main__":
    # Initialize the camera
    with ic4.Library.init_context(api_log_level=ic4.LogLevel.INFO, log_targets=ic4.LogTarget.STDERR):
        # Get the device list
        device_list = ic4.DeviceEnum.devices()
        # Select DMK 41AU02
        cam_41AU02 = device_list[0]
        #
        average_image, all_imgs = capture_and_average(cam_41AU02)
        # Save the average brightness image
        cv2.imwrite("average_image.bmp", average_image)
        print("=====Calculating the average image is complete=====")

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions