MVTec HALCON is the comprehensive standard software for machine vision with an integrated development environment (HDevelop) that is used worldwide. It enables cost savings and improved time to market. HALCON’s flexible architecture facilitates rapid development of. MVTec Software GmbH will release HALCON 19.11, the latest version of its standard software HALCON, on November 15. The release will include many new and improved functions that advance the level of machine vision technology available to OEMs, integrators, and end-users worldwide.
In this proof of concept, we want to show you how to easily integrate a QR code reader on an embedded device using MVTec HALCON and HDevEngine. In our example, we used a Raspberry Pi 3 Model B with the standard camera module v2.
In the final application, we want to use two HDevelop procedures: One that initializes the camera and the data code reader, and one that finds the data codes (in our case, QR codes) and returns a result message. Let's have a look how easily these procedures can be created using HDevelop.
First, we create the procedure init_acquisition.hdvp. Here, we open and configure the image acquisition device. The output variable AcqHandle can later be used to grab images of the camera.
open_framegrabber ('Video4Linux2', 4, 4, 0, 0, 0, 0, 'default', -1, 'gray', -1, 'default', 'default', 'default', -1, -1, AcqHandle)
Secondly, we create the handle for the data code reader. We specify that we want to detect QR codes.
create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)
Thus, the output of this procedure are the handles AcqHandle and DataCodeHandle.
Then, we create the procedure find_qr_code.hdvp. Here, we grab an image using the AcqHandle.
grab_image (Image, AcqHandle)
Then, we find QR codes in this image using the DataCodeHandle.
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
The rest of the program simply assembles the output message, that we want to return in a shell.
get_system_time (MSecond, Second, Minute, Hour, Day, YDay, Month, Year) Date := Year + '-' + Month + '-' + Day $ '.2d' + ' ' + Hour $ '.2d' + ':' + Minute $ '.2d' + ':' + Second $ '.2d' if (DecodedDataStrings []) ResultMessage := 'No QR code found.' + ' (' + Date + ')' else ResultMessage := 'Decoded QR code(s): ' + DecodedDataStrings + ' (' + Date + ')' endif
In the C++ project, we use these HDevelop procedures directly, with HDevEngine. Uploadify limit number of files. First, we define the location of the procedures.
std::string ext_proc_path = './hdevelop_procedures'; HDevEngine().SetProcedurePath(ext_proc_path.c_str());
Then, we call the first procedure and get the output variables.
HTuple acq_handle; HTuple data_code_handle; InitializeAcquisition(acq_handle, data_code_handle);
The function InitializeAcquisition looks like this:
HDevProcedure proc('init_acquisition'); HDevProcedureCall proc_call(proc); proc_call.Execute(); proc_call.GetOutputCtrlParamTuple('AcqHandle', &acq_handle); proc_call.GetOutputCtrlParamTuple('DataCodeHandle', &data_code_handle);
Similarly, we call the second procedure in a loop to find the QR codes and return a result message.
while (keepRunning) { HString result_message; FindQRCodes(proc, acq_handle, data_code_handle, result_message); printf(result_message); printf('n'); }
When building and running the application, we need to set some parameters. Thus, we created a simple setup.env file.
export HALCONROOT=$(pwd)/halcon export HALCONARCH=armv7ahfneon-linux-gcc48 export PATH=$HALCONROOT/bin/$HALCONARCH:$PATH export LD_LIBRARY_PATH=$HALCONROOT/lib/$HALCONARCH
export NATIVE=yes export DISPLAY=192.168.0.1:0 export XLOCALEDIR=$(pwd)/arm-xilinx-linux-gnueabi/share/X11/locale export LD_LIBRARY_PATH=$(pwd)/arm-xilinx-linux-gnueabi/lib:$LD_LIBRARY_PATH
# To use the Video4Linux API, load the driver sudo modprobe bcm2835-v4l2
When executing the application, the output looks something like this:
Note: If more QR codes are within the camera's field of view, the QR code reader uses the code with the best quality.
The Raspberry Pi 3 with the camera module
Image acquisition with GigE Vision® and USB3 Vision® cameras in real-time
The Camera Module serves the purpose of capturing image data of industrial cameras according to GigE Vision or USB3 Vision standards in real time. It provides all necessary functions for detection and management and for creating real-time streams.
Large buffer memory along with real-time network drivers reliably prevent any loss of data packets. The reaction to incoming GigE Vision or USB3 Vision images takes place instantly in the context of the real-time environment within a few microseconds. An immediate real-time task can be triggered, in order to execute an instant control reaction.
Thanks to the real-time drivers, the Camera Module allows for maximal data throughputs according to interface and system configuration, even up to the theoretical maximum. For the real-time processing of image data, refer to Halcon and OpenCV extension.
The results of the image processing can be given to the process even in the real-time context without any delay, e. g. over EtherCAT or CANopen. Accordingly, automation solutions can be easily combined with several other functions within Kithara RealTime Suite.
The Camera Module requires Network Module for GigE Vision or USB RealTime Module for USB3 Vision respectively.
For the processing of image data see: Halcon Extension or OpenCV Extension
Fifa 18 patch download free. If file is multipart don't forget to check all parts before downloading!. 2.