.
Today, we want to share our first screencast using Asciinema with you. The screencast is recorded on a per-character-basis directly from the Windows terminal. This allows you to copy'n'paste commands and output as needed, saves bandwidth and looks sharp and pretty.
We assume you have bought a new Raspberry Pi 3 together with a Micro USB power supply (at last 2.1A) and a Micro SD card. We also assume that the Micro SD card is formatted as FAT32 and available as drive D: on an updated Windows 10 installation. Watch the screencast (explanations follow in the next section):
Download NOOBS from https://www.raspberrypi.org/downloads/noobs/.
Unzip to Micro SD card (drive D:)
Automatically have SSH enabled directly after the Raspbian installation has finished by creating a file ssh in D:\
echo . >D:\ssh
Make sure Raspbian OS will be installed automatically (disable prompting for other OS):
rd /s /q D:\os\LibreELEC_RPi2
rd /s /q D:\os\LibreELEC_RPi
Remove SD card, insert into Raspberry Pi, connect Ethernet and Power. Wait. Raspbian OS will be installed automatically. This took about 10minutes with our system.
While Raspbian installation is running, make sure that you have installed the Linux Subsystem for Windows to use SSH
The Raspberry Pi will become available with hostname raspberrypi on the network.
Default user: pi, Default password: raspberry .
Launch bash on the Linux Subsystem for Windows by typing bash in the Windows Start Menu (will match Bash On Ubuntu on Windows). Then:
Copy HALCON (Linux) to your newly setup Raspberry Pi:
scp halcon-13.0.1.1-linux.tar.gz pi@raspberrypi:/tmp
As this is your first connection to the Raspberry Pi, type yes to add raspberrypi to your list of known hosts.
Default user is: pi, Default password is: raspberry
SSH to raspberrypi
:
ssh pi@raspberrypi
Change default password for user pi:
passwd
Unpack HALCON to /tmp/halcon:
cd /tmp
mkdir halcon
tar xvf halcon-13.0.1.1-linux.tar.gz -C halcon
Install HALCON to /opt/halcon/halcon-13.0:
cd /tmp/halcon
sudo ./install-linux.sh
Remove temporary installation files:
rm -r /tmp/halcon halcon-13.0.1.1-linux.tar.gz /tmp/halcon
Add a new command h13 to your .bashrc file. This allows to type h13 in the shell to setup your environment for HALCON 13.0:
Add this to your .bashrc
function h13 {
. /opt/halcon/halcon-13.0/.profile_halcon
}
Try:
bash
h13
Enable license mechanism
Copy your license obtained from MVTec from the host computer (Windows 10) to the Raspberry Pi:
scp license.dat pi@raspberrypi:/opt/halcon/halcon-13.0/license
attach your HALCON USB dongle
make sure the dongle appears as USB HID device (WIBU-SYSTEMS AG CodeMeter):
dmesg | tail -n 10
copy udev rule for dongle and reload udev system:
sudo cp /opt/halcon/halcon-13.0/misc/linux/udev/rules.d/59-halcon-codemeter.rules /etc/udev/rules.d
sudo udevadm trigger
Run hbench and hbench -parallel. Example output:
pi@raspberrypi:~ $ hbench
HALCON 13.0.1 Benchmark (v13.0.1)
=================================
thread_num=1
(computing on images of size 1280x1024)
DATA_TYPE reentrant
time[ms] value
byte ........ 1.9e+03 0.7
int4 ........ 860.563 0.7
float ....... 2.4e+03 0.4
region ...... 821.581 0.6
tuple ....... 12.033 0.8
sum ......... 6005.7 0.7
pi@raspberrypi:~ $ hbench -parallel
HALCON 13.0.1 Benchmark (v13.0.1)
=================================
thread_num=4
(computing on images of size 1280x1024)
DATA_TYPE parallel (4)
time[ms] value
byte ........ 603.095 2.3
int4 ........ 242.844 2.5
float ....... 835.306 1.2
region ...... 241.375 2.2
tuple ....... 3.947 2.3
sum ......... 1926.6 2.1
We will write, compile, and run a simple and very basic HALCON C++ program. For demonstration only, it counts the number of pixels with gray values greater or equal 127 in the example image monkey
.
Create a C++ program in ~/halcon/hellorpi/main.cpp
// main.cpp
#include <iostream>
#include "halconcpp/HalconCpp.h"
int main(int argc, char** argv) {
(void)argc;
(void)argv;
HalconCpp::HImage image("monkey");
HalconCpp::HRegion region;
HalconCpp::Threshold(image,®ion,127,255);
// make sure to stream the tuple's integer value with .L()
// otherwise, you would output the tuple in serialized format
std::cout << "area: " << region.Area().L() << std::endl;
return 0;
}
Compile with
g++ -g -o hellorpi -I${HALCONROOT}/include -L${HALCONROOT}/lib/${HALCONARCH} \
-lhalcon -lhalconcpp -Wl,-pthread -lm -ldl main.cpp
Execute:
pi@raspberrypi:~/halcon/hellorpi $ ./hellorpi
area: 140422
TODO We will write, compile, and run a simple and very basic HALCON C++ program. For demonstration only, it counts the number of pixels with gray values greater or equal 127 in the example image monkey
.
Enable camera
sudo raspi-config
In the graphical interface, go to 5 Interfacing Options
then P1 Camera
and then answer the question Would you like the camera interface to be enabled?
with Yes
.
Reboot
Check if camera is available:
vcgencmd get_camera
The output should be like supported=1 detected=1
raspistill -w 2592 -h 1944 -o test.jpg
If everything works, the command should return without any message.Install V4L module
Try loading the module with
sudo modprobe bcm2835-v4l2
If modprobe
returns without errors, add the module permanently. At the end of file /etc/modules
add the entry:
# camera driver for v4l2
bcm2835-v4l2
Reboot
HALCON 13.0 for armv7a-linux comes with a handy example program called hrun
. We will compile it and execute a HDevEngine script to decode a ECC200 data code:
Create a directory and copy the example program to it:
mkdir ~/halcon/hrun
cd ~/halcon/hrun
cp -rp /opt/halcon/halcon-13.0/examples/armv7a-linux .
as we will compile directly on the Raspberry Pi 3 (in contrast to cross-compiling), we have to set the environment variable NATIVE
to yes
:
export NATIVE=yes
Attention: In the HALCON document HALCON for Arm-based Platforms they say you have to set it to YES
. This is wrong, you have to use the lowercase writing yes
.
Build hrun
make
Execute hrun
/bin/armv7a-linux/hrun
This will show the command line help for hrun
.
HALCON comes with the example script datacode.hdev
to decode a ECC200 data code. It should output the decoded string together with the live images in a window, but the text output does not seem to work. Therefore, we will patch datacode.hdev
to
use live video images. Open datacode.hdev and change UseLiveImages
from 0
to 1
:
<l>UseLiveImages := 1</l>
output the decoded string to the console (stdout). As one of the first script lines add
<l>open_file ('standard', 'output', STDOUT)</l>
and add after the existing disp_message script line:
<l>fwrite_string (STDOUT, DecodedDataStrings + '\n')</l>
Execute hrun
with datacode.hdev
If you are using a remote connection to the Raspberry Pi, make sure you have a SSH connection that supports X-Forwarding (ssh -X pi@raspberrypi
) to open the live video image on your development machine. Then execute:
./bin/armv7a-linux/hrun datacode.hdev
If you hold a ECC200 data code in front of the camera, it should be decoded and output to the console.
If you have any questions regarding this topic or and other HALCON related questions please do not hesitate to contact us.