Dear community,
We are happy to announce that VisualApplets 3.5.0 has been released.
The main point of this update is to support our new imaflex penta framegrabber! A framegrabber with five CXP-12 Input ports and more DRAM Bandwidth.
Addtionally, fixed and changes improve the quality of VisualApplets further, - so updating to a new version is definitly beneficial independent of your used hardware.
VisualApplets Download:
https://www2.baslerweb.com/de/…-windows-64bit-ver-3-5-0/
VisualApplets Release Notes:
https://zh.docs.baslerweb.com/…s-for-visualapplets-3-5-0
imaFlex CXP-12 Penta:
https://www.baslerweb.com/en-sg/shop/imaflex-cxp-12-penta/
imaFlex CXP-12 Penta Documentation:
https://ja.docs.baslerweb.com/…bers/imaflex-cxp-12-penta
Best Regards,
Kevin
Posts by kevinh
-
-
Hello,
You can send me the files via e-mail, kevin.hoefle@baslerweb.com .
Thank you,
Best Regards,
Kevin -
Hello Michael,
Thank you - that would be much appreciated. If you are able to create a minimalistic version of your applet that also triggers the same error we can investigate it further.
As I see it from your screenshot you have two cameras , 4 DMAs . I assume that two DMAs will transport the original image while the other two describe a downsampled output, correct?
Best Regards,
Kevin -
Hello MiNe,
I am sorry to hear that you encountered this issue. Have you already contacted Basler Support on this case, as not to have two threads tackling the same issue. This forum is more focused on VisualApplets Design questions etc. - while the Runtime is still in the same environment, I can not give you a direct answer to this.
Addtionally, were you the one creating the Applet or was it provided to you? IF you can provide the .hap file we can try to recreate the bug on our site.
I will ask the appropiate engineers and report back to you once I know more.
Best Regards,
Kevin -
Hi Johan,
Are you working with a fixed framerate? If so the time between frames is constant and you could use that to gather the information in ms.
Otherwise you must use the signal library to get the amount of ms passed. Furthermore, it is not the time of the frame but the exact ms time of the pixel. Additionally, getting the information from a genicam node and then after retrieving the image using the C++ / Python SDK to write the time in ms on the image might be easier.
Nevertheless, it should be possible but very tricky to do it directly on the framegrabber.
Best Regards,
Kevin -
Dear Johan,
No Problem, if you have any additional questions please let me know.
Also, I hope that due to our posts being sent almost at the same time that you did not oversee the exampel I posted here:
RE: Counter text overlay imaFlex CXP-12 Quad
Best Regards,
Kevin -
To answer your question: No you will not need 10 LUTs, you will need one LUT storing all 10 numbers. However, you can only store 2^16 pixels in one LUT, that means your numbers cannot be that large in the image dimensions.
So if you only want to use one LUT : 2^16 / 10 = 6553, so one number is not allowed to take up more than 6553 pixels. Numbers are usually not square and are higher than wider, so I would go with a maximum of 60*100 (width*height) - however, smaller dimensions should work fine as well.
Best Regards,
Kevin -
Dear Johan,
Attached you can find an exemplary design that will write the image numbers 0-2 in the top left corner. This is just a starting point, for larger numbers you must change the logic etc, but it showcases the general idea.
I also attached a python script that generates the numbers 0-2 to fill up the LUT. You can find them all in the attached .zip.
Note that this is not exactly an overlay but an overwrite. If you wish to overlay it you can try to work with color or alpha channels (to work with alpha channels you must use the super pixel format).
If you wish to have Basler implement a solution for you feel free to contact your sales reprsentive.
Best Regards,
Kevin -
Dear Johan,
That's not what I meant. Instead of using a signle Pixel use a LUT where images of the numbers are stored, e.g. in a size of 16x16 and then replace the pixels of your incoming datastream with the corresponding frame numbers according to the generated LUT adresses and frame indices.
Best Regards,
Kevin -
Dear Johan,
There are two different ways to achieve this:
Using the CPU during Acquistion:
1. Use the FramegrabberSDK and some other library such as OpenCV to embed the frame counter into the image after it was recieved from the host ( https://www.tutorialspoint.com…in-opencv-using-cplusplus ). The benefit is that you can have the original image data without the counter and with the counter as well. The downside is that it is not shown on the image itself, so it won't show up using MicroDisplayX.
Using VisualApplets / FPGA:
2. You could embed the logic into the Framegrabber by using a combination of ImageNumber/ModuloCount, IF, Coordinate_X, Coordinate_Y and a LUT. In the LUT you have to save the representation of the numbers 0-9 in pixels. With the Coordinate_X, Coordinate_Y you will get the pixel Positions and may overwrite it with the needed content for the frame.What should be the highest number of the counter? 9, 99, 999, 9999,99999 - Depending on this you must adapt your logic accordingly to make more room and adress the LUT differently.
PostProcessing
3. MicroDisplayX also shows the FrameNumber under the acquired images, it is not directly on the frame but you can read it there as well. Additionally, if you take a sequence of images and have set a large buffer you can then save the images to the disk and each image gets a frame counter in its name. You could write a small script in your prefered language that iterates over the images and puts the image number on it.
pasted-from-clipboard.pngI hope that one of these solutions helps you achieve your desired goal.
Best Regards,
Kevin -
Dear Johan,
Do you wish to have a visual counter representation embedded on the image data or do you want to have an overlay? This means that after saving the image the counter would not be visible anymore.
Best Regards,
Kevin -
Hello everyone,
We at Basler started an Innovation Project to offer Python Programming for FPGAs on our Hardware. In the background Visual Applets is used, however you can now steer it with Python.
If you wish to know more about this topic you can check out this link: https://www.baslerweb.com/en/i…/fpga-programming-python/
If you wish to have a discussion about this topic please contact me directly or use the link at the bottom of the page mentioned in the link above.
Best Regards,Kevin
-
Hello Stefan,
I do not know what you exactly mean with "each VA" - do you mean at each operator?
Simple use InsertLine Followed by Appendline, this will attach the desired meta - information at the end of each line. This works for VALT_LINE1D as well as for VALT_IMAGE2D in the same way.
Best Regards,
Kevin -
Hello,
I checked the manual for the camera and on the site 39 you can find the following information:
pasted-from-clipboard.png
so you can use the 3 Tap mode for the Base camera.
Best Regards,
Kevin -
Hi,
Sorry for the late reply.
Please try / investigate:- What is the size of the file on the disk? if it is 0Kb or 1Kb the data is lost, probably due to synchronization issues with OneDrive
- VisualApplets 3.4.0 was just released, you can download it here: https://www2.baslerweb.com/en/…anguage=all;version=3.4.0 and see if this works
- I do not know the target platform of your design . If you have a plattform that is no longer supported by VisualApplets or was installed by a plattform installer you may need to install the plattform first
- If all these steps do not help you, you may upload a file here (or send via Mail) and we can see if we are able to track down the issue and hopefully can retrieve your designs
Best Regards,
Kevin -
Dear Bingnan,
Sorry for the late reply. Please try the following steps:
1. Check if you lower the frame rate at which point there is no longer an overflow (best to start with 1 FPS and then increase it until it overflows)
2. Next to changing the camera parameter you must also adapt the value "YLength" and "XLength" of the FullResBuf in your design according to the RoI of the camera, because otherwise the Buffer will add Dummy pixels. This might cause an overflow.
pasted-from-clipboard.png
Best Regards,
Kevin -
Hi Simon,
Sadly this is not possible to do with a TCL command. However, here are two workarounds that may work:
You can read out the TargetPath Variable from the VisualApplets.ini, depending on how you installed VisualApplets you may find the VisualApplets.ini under C:\ProgramData\Basler\VisualApplets\<VERSION> or under your Installationfolder. Under this path several subfolders for each plattform are created where then the .hap files are stored with its name from the .va file.
Another approach relies on setting a different variable like the UserLibDir variable to the same location as the target path under your System settings.
Then you could use the following syntax to obtain files:set designHapPath [GetAbsolutePath "%UserLibDir%/../Designs/<PlatformName>/<DesignName>.hap"]
I hope this may help to solve your problems.
Alternativaley, you may contact me via E-Mail, if you are interested we can look if it would be easier to solve your task with the help of PyWizion.
Best Regards,
Kevin -
Hello Bingnan,
I am currently quite busy, so answers may take a while or won't cover the full detail.
To your question: "1. The trigger example seems to be receiving an external trigger signal, then triggering the camera. How can I make the output-triggering signal controllable?"
If you open the "Hierachical Box" you will find the following layout:
pasted-from-clipboard.png
In the "Select" Operator you can choose the Triggermode, in your case the one you are looking for is the setting "1", so that the signal from "Generator" gets used as a Trigger.
If you go deeper into the "Generator" you can see the following:
pasted-from-clipboard.png
The Operator "Period" can then adjust your signal. Please read the textboxes for further instructions on how to adjust the trigger signal.
To your secon question:
"2. With the "Overflow", is that means I can use a larger template? Or it is limited by the resources the "Overflow" controls transfer bits but no effect on this?"
The overflow operator CUTS off an image, when a memory element is not capable of holding saving the image.
As you can see in your screenshot from MicroDisplay you have a "1" on Overflow. This means that the memory is not capable of saving the required data with the chosen bandwidth.
The following screenshots describe areas where you have bootlenekcs in your design:
pasted-from-clipboard.png
This will result in your processing pipeline only be able to handle 125 MegaPixel/s , since the SYNC operator creates dummy pixels.
Also after this HBox you have a ParallelDN that will limit your bandwidth.
This is all the help I can give you at the moment, please try to remove those bottlenecks, with operator suchs as ParallelUP before the SYNC operator etc.
Best Regards
Kevin -
Hello Bingnan,
I looked at your design, and the first thing I noticed was the parallelDN right after the ImageBuffer at the beginning. I do not know how fast your camera is set, however if you go down to a parallelsim of 1, only 1 pixel is transfered with a rate of 125 MHz.
If your camera has a resolution of 1280x860, you are transfering 1.101 MegaPixel per Frame. Thus you will only be able to have a framerate of 113 FPS.
I updated your design, and removed the parallelDN Operator. Furthermore, I added an Overflow operator. This operator has a property called "OverflowOccured". You can look at this parameter in MicroDisplay(X). If it is "1" an Overflow occured, meaning that your buffers are not large enough, or that some other bottleneck exists in your design.
Speaking of bottlenecks that is often overseen is the DMA Transfer rate, which is 1.800 MB/s for the mE5 VCX QP. So the maximum you can achieve with your resolution is 1635 Hz ( (1800 MegaByte/s / 1280*860) ) - assuming you are using the full DMA Bandwidth. The PCI can transport up to 128 bits in parallel, thus when you have an 8bit image, you can use a parallelsim of 16. In your design it was still one, due to the paralleDN. This means, that only 102 FPS were able to be achieved.
Regarding your question to the triggers:
The standard acquisition applet has these functioanlities built in, when you are using your onw custom applet you are responsible for these implementations. You can find an example for the mE5 VCX QP in your VisualApplets installation folder:
<VASINSTALLDIR>\Examples\Processing\Trigger\me5-MA-VCX-QP\Area
You can copy the trigger functionality and the camera from there.
Best Regards and a nice weekend
Kevin -
Hello dxs,
The new runtime (5.10) was released which will support higher Python Versions. you can download it here:
https://www.baslerweb.com/en/d…sdk-5-10-0-windows-64bit/
Best Regards,
Kevin