pypylon icon indicating copy to clipboard operation
pypylon copied to clipboard

Failed to receive frame from basler camera for several consecutive frames

Open MiladGhorbaniG opened this issue 3 years ago • 1 comments

Hi @rgov I am using a Jetson Nano with OpenCV 4.5 to read the Basler camera every 50 ms. I call the following function:

from pypylon import pylon
global camera
global converter
# conecting to the first available camera
camera = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())
camera.Open()
camera.AcquisitionMode.SetValue('Continuous')
camera.Width.SetValue(2448)
camera.Height.SetValue(2048)
#camera.MaxNumBuffer.SetValue(80)
camera.AcquisitionMode.SetValue('Continuous')
#camera.AutoFunctionProfile.SetValue('MinimizeGain')
camera.ExposureAuto.SetValue('Continuous')
camera.ExposureMode.SetValue('Timed')

camera.AcquisitionFrameRateEnable.SetValue(True)
camera.AcquisitionFrameRate.SetValue(30.0)
#camera.BalanceWhiteAuto.SetValue('Continuous')
camera.GainAuto.SetValue('Continuous')
# Grabing Continusely (video) with minimal delay
camera.StartGrabbing(pylon.GrabStrategy_LatestImageOnly) 
converter = pylon.ImageFormatConverter()

# converting to opencv bgr format
converter.OutputPixelFormat = pylon.PixelType_BGR8packed
converter.OutputBitAqlignment = pylon.OutputBitAlignment_MsbAligned
def Cam_one(w,h):
    global camera_success,image_success,camera,converter
    camera_success=0
    image_success=0
    img = None
    if camera.IsGrabbing():
        camera_success=1
        grabResult = camera.RetrieveResult(5000, pylon.TimeoutHandling_ThrowException)
        if grabResult.GrabSucceeded():
            image_success=1
            # Access the image data
            image = converter.Convert(grabResult)
            im = image.GetArray()
            img=cv2.resize(im,(w,h))
        else:
            image_success=0
        grabResult.Release()
    else:
        camera_success=0
    return image_success , img

About 1 percent of the time, it fails for several consecutive frames, and I can receive a new frame for example 700 ms later. Does anyone have a suggestion?

MiladGhorbaniG avatar Oct 15 '21 10:10 MiladGhorbaniG

  1. first, measure the time taken for the following block.

grabResult = camera.RetrieveResult(5000, pylon.TimeoutHandling_ThrowException) if grabResult.GrabSucceeded(): image_success=1 # Access the image data image = converter.Convert(grabResult) im = image.GetArray() img=cv2.resize(im,(w,h)) else: image_success=0 grabResult.Release() else: camera_success=0

  1. Then set the AOI to 640*480 and check if the issue is still occurring.
  2. since you are already using opencv, try also use opencv for image conversation too.

SMA2016a avatar Oct 31 '21 07:10 SMA2016a