Machine Vision

cancel
Showing results for 
Search instead for 
Did you mean: 

High fps image acquiring

I'm trying to build a triggered VI, which can acquire high speed images and save them (400fps 1200*300) using a ring buffer. First I allocate the buffers in the RAM, then I acquire the images and start saving at the same time. Since the saving can not keep up with the acquiring of the images, buffers are allocated before acquiring and saving is done paralel to the acquiring. 

I think it's working the way it is now. But which VI of the 3 get/extract/copy buffer is the best to use?

When I want to record for a very long time, I get memory problems (64bit Windows, 64 bit Labview, 16GB RAM, somewhere around 1.5 minute). I'm searching for ways to improve this. But I think as long as the disk speed is too slow to save images in real-time, it's always needed to allocate the buffers before starting? It takes around 10 minutes to allocate the buffers...

0 Kudos
Message 1 of 5
(4,475 Views)

Another question is: is it also possible to create image buffers during the acquisition?

So first 1 image buffer, acquire 1 image, second image buffer, acquire second image, etc, etc...

I tried to implement this, but I think this isn't possible with the ring buffer VI's. At least, I'm not able to do it.

0 Kudos
Message 2 of 5
(4,456 Views)

Hi, 

 

To start, could you please specify the hardware you are using and what bus you use? 

 

I can also not see exactly what you want to do with the downmost part of the VI, could you explain this? You are first starting the IMAQ, then waiting two seconds and after this setting up some kind of timing; what kind of signal do you want to use to trigger the acquisition?

 

Regarding the read buffer i think the get  buffer VI works well, but why do you want to use one-shot mode and why do you only read one image at a time? I suppose you could increase the speed you save the images if you would read the whole buffer at once. 

 

If I understand it correctly it takes a very long time to alocate the buffer and there will not be time to do this during acquisition. 

 

/Anton 

0 Kudos
Message 3 of 5
(4,414 Views)

@AntonSundqvist wrote:

Hi, 

 

To start, could you please specify the hardware you are using and what bus you use? 

 

A Basler aCA2040-180km connected by Camera Link to a NI PCIe-1433 card

 

I can also not see exactly what you want to do with the downmost part of the VI, could you explain this? You are first starting the IMAQ, then waiting two seconds and after this setting up some kind of timing; what kind of signal do you want to use to trigger the acquisition?

 

This is a program for myself to learn how the timing works. In a much bigger program the camera is triggered from another part of the program not in this way.

 

Regarding the read buffer i think the get  buffer VI works well, but why do you want to use one-shot mode and why do you only read one image at a time? I suppose you could increase the speed you save the images if you would read the whole buffer at once. 

 

One shot is used to acquire the exact amount of specified images. 

So moving the get buffer out of the for loop and use the images out in stead of the image out?

 

If I understand it correctly it takes a very long time to alocate the buffer and there will not be time to do this during acquisition. 

 

Yes, I'm searching for ways to reduce this time. But I can't find any solutions besides saving in real time, which is not possible with the current hardware. It's a real problem when trying to aqcuire images for more than 2 minutes at 400fps. 

 

/Anton 


 

0 Kudos
Message 4 of 5
(4,398 Views)

@wielrenner wrote:

@AntonSundqvist wrote:

Hi, 

 

To start, could you please specify the hardware you are using and what bus you use? 

 

A Basler aCA2040-180km connected by Camera Link to a NI PCIe-1433 card

 

Are you using a PCIe 4x port? Up-plugging mat reduce the transfer rate on some motherboards.  

 

I can also not see exactly what you want to do with the downmost part of the VI, could you explain this? You are first starting the IMAQ, then waiting two seconds and after this setting up some kind of timing; what kind of signal do you want to use to trigger the acquisition?

 

This is a program for myself to learn how the timing works. In a much bigger program the camera is triggered from another part of the program not in this way.

 

Okay, I see. The IMAQ part looks ok, but I do not understand what you want to do with the delay in the sequence structure and why you are using the same DAQmx VI twice. 

 

Regarding the read buffer i think the get  buffer VI works well, but why do you want to use one-shot mode and why do you only read one image at a time? I suppose you could increase the speed you save the images if you would read the whole buffer at once. 

 

One shot is used to acquire the exact amount of specified images. 

So moving the get buffer out of the for loop and use the images out in stead of the image out?

 

This might be one option, but I am not sure if it will help. The thing is that I have not understood where the bottleneck lies. I am thinking that you might have some issues due to the fact that you are acquiring the images at two places in parallell and this might cause some problems with the performance. You could try using an other programming structure, please see the attache VI for a quick example of what I am suggesting. I do not have access to the hardware here, but you could test if it improves the performance. 

 

If I understand it correctly it takes a very long time to alocate the buffer and there will not be time to do this during acquisition. 

 

Yes, I'm searching for ways to reduce this time. But I can't find any solutions besides saving in real time, which is not possible with the current hardware. It's a real problem when trying to aqcuire images for more than 2 minutes at 400fps. 

 

/Anton 


 


 

Message 5 of 5
(4,379 Views)