Camera exposure adjustment on JetsonXavier

We are trying to take images with the ArduCam at regular intervals with the Jetson Xavier. For this, we are using OpenCV with python and Gstreamer. We are able to do the same using the script attached below. But, for our purposes, we need to change the exposure settings as well. When we try to change that setting, the camera does not start capturing images and the script stops, simply showing the error ‘pipeline not created’.

At the same time, using the command below in the terminal, we are able to control the exposure and see the stream on the screen. -

“gst-launch-1.0 nvarguscamerasrc wbmode=0 awblock=true gainrange=“8 8” ispdigitalgainrange=“4 4” exposuretimerange=“5000000 5000000” aelock=true ! nvvidconv ! xvimagesink”

Our purpose is to capture images at pre-defined intervals of time at a certain exposure setting and save it to the disk. Please let us know of a way to do the same or the changes to be made in the attached script in order to make it work in this way

Below is my test result. Could you breakdown which parameter cause the problem?

nvidia@nvidia-desktop:~$ gst-launch-1.0 nvarguscamerasrc wbmode=0 awblock=true gainrange='8 8' ispdigitalgainrange='4 4' exposuretimerange='5000000 5000000' aelock=true ! nvvidconv ! xvimagesink
GST_ARGUS: NvArgusCameraSrc: Setting Gain Range : 8 8
GST_ARGUS: NvArgusCameraSrc: Setting ISP Digital Gain Range : 4 4
GST_ARGUS: NvArgusCameraSrc: Setting Exposure Time Range : 5000000 5000000
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
GST_ARGUS: Creating output stream
CONSUMER: Waiting until producer is connected...
GST_ARGUS: Available Sensor modes :
GST_ARGUS: 3840 x 2160 FR = 59.999999 fps Duration = 16666667 ; Analog Gain range min 1.000000, max 44.400002; Exposure Range min 44000, max 478696000;

GST_ARGUS: 1920 x 1080 FR = 59.999999 fps Duration = 16666667 ; Analog Gain range min 1.000000, max 177.000000; Exposure Range min 58000, max 184611000;

GST_ARGUS: 3840 x 2160 FR = 29.999999 fps Duration = 33333334 ; Analog Gain range min 1.000000, max 30.000000; Exposure Range min 864000, max 20480000;

GST_ARGUS: 1920 x 1080 FR = 59.999999 fps Duration = 16666667 ; Analog Gain range min 1.000000, max 177.000000; Exposure Range min 859000, max 15649000;

GST_ARGUS: Running with following settings:
   Camera index = 0
   Camera mode  = 3
   Output Stream W = 1920 H = 1080
   seconds to Run    = 0
   Frame Rate = 59.999999
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.

Hi , We are able to do this in terminal and the following script.
def gstreamer_pipeline(
capture_width=1280,
capture_height=720,
display_width=1280,
display_height=720,
framerate=60,
flip_method=0,
):
return (
"nvarguscamerasrc ! "
"video/x-raw(memory:NVMM), "
"width=(int)%d, height=(int)%d, "
"format=(string)NV12, framerate=(fraction)%d/1 ! "
"nvvidconv flip-method=%d ! "
"video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
"videoconvert ! "
“video/x-raw, format=(string)BGR ! appsink”
% (
capture_width,
capture_height,
framerate,
flip_method,
display_width,
display_height,
)
)

But I am not able to manually control the exposure and gain in the script. How can I control that

Do you want to set the exposure and gain manually after the pipeline is running?
I would suggest to reference to the nvgstcapture-1.0 for it.

Yes. I am able to adjust the exposure. But how can I set the ISO to 100

Only have exposure/gain/frame rate can adjust.

How can I change exposure and gain.

As your pipeline change the gain and exposure range for it.

Hi, am using nvgstcapture -1.0. But on changing the exposure manualy it’s not reflecting on the images

Change the max and min to the same value of the exposure range to force it take effect.