czech english

AprilTag

Visual Fiducial System

AprilTag jsou 2D černobílé kódy podobné QR-kodům. V SubT jsou použity pro definici globálního souřadného systému.

AprilTag is a visual fiducial system, useful for a wide variety of tasks including augmented reality, robotics, and camera calibration. Targets can be created from an ordinary printer, and the AprilTag detection software computes the precise 3D position, orientation, and identity of the tags relative to the camera. The AprilTag library is implemented in C with no external dependencies. It is designed to be easily included in other applications, as well as be portable to embedded devices. Real-time performance can be achieved even on cell-phone grade processors.
AprilTags are conceptually similar to QR Codes, in that they are a type of two-dimensional bar code. However, they are designed to encode far smaller data payloads (between 4 and 12 bits), allowing them to be detected more robustly and from longer ranges. Further, they are designed for high localization accuracy— you can compute the precise 3D position of the AprilTag with respect to the camera.

SubT specification

The AprilTag targets are in the 16h5 family and are mounted onto a rigid backing material. The outer white border dimensions are 12” x 12” and the black boarder dimensions are 9” x 9”.
  • "Safety Research" portal — ID 4, 5, 6, 7
  • "Experimental" portal — ID 24, 25, 26, 27
pro referenci ještě staré STIX:
  • "ARMY" portal — ID 4, 5, 6, 7
  • "Miami" portal — ID 24, 25, 26, 27

Tags 16h5

ID=4
ID=4
ID=4

ZW 15/7

Jaké problémy byly při použití knihovny z pythonu? V nějakém emailu jsi to zmiňoval (teď to nemůžu najít). Zdá se https://github.com/AprilRobotics/apriltag#python že python je podporovaný dost nativně.
Nicméně, když pustím jejich apriltag_demo na
tak dostanu tohle:
detection   0: id (16x 5)-24  , hamming 0, margin  167.760
detection   1: id (16x 5)-25  , hamming 0, margin  110.377
detection   2: id (16x 5)-26  , hamming 0, margin  170.637
 0                             init        0.000000 ms        0.000000 ms
 1                         decimate        0.622000 ms        0.622000 ms
 2                       blur/sharp        0.000000 ms        0.622000 ms
 3                        threshold        0.743000 ms        1.365000 ms
 4                        unionfind        2.825000 ms        4.190000 ms
 5                    make clusters        4.495000 ms        8.685000 ms
 6            fit quads to clusters        7.641000 ms       16.326000 ms
 7                            quads        0.117000 ms       16.443000 ms
 8                decode+refinement        0.800000 ms       17.243000 ms
 9                        reconcile        0.002000 ms       17.245000 ms
10                     debug output        0.000000 ms       17.245000 ms
11                          cleanup        0.001000 ms       17.246000 ms
hamm     3     0     0     0     0     0     0     0     0     0       17.246    54
Summary
hamm     3     0     0     0     0     0     0     0     0     0       17.246    54
Tj. detekoval 3 tagy: 24, 25 a 26. Zbytku zatím nerozumím (koukám, že hamming jsou bit errors, tj. 0 je dobře).
BTW: před časem mergovali support pro windows: https://github.com/AprilRobotics/apriltag/pull/27

Doporučený postup instalace

Jednak je potřeba vyjít z originálního git repozitáře a zcela ignorovat existující Python balíčky (zastaralé, neudržované a bez vazby na původní autory).
git clone https://github.com/AprilRobotics/apriltag.git
cd apriltag/
mkdir build
cd build/
cmake ..
make
Instalace není úplně bezproblémová a například numpy se očekává na dané cestě (momentálně nejsnazší řešení bylo přes symbolický link).
Ověření závislostí výsledku:
ldd apriltag.cpython-36m-x86_64-linux-gnu.so
gpu@gpu-desktop:~/git/apriltag/build$ ldd apriltag.cpython-36m-x86_64-linux-gnu.so
        linux-vdso.so.1 (0x00007ffc5d2e8000)
        libapriltag.so.3 => lib/libapriltag.so.3 (0x00007f085dc66000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f085da47000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f085d656000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f085d2b8000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f085e4be000)
Výsledný balíček je třeba ještě správně doplnit do PYTHONPATH nebo Python instalace, jinak lze importovat pouze ze složky build.

Windows instalace

PS E:\git\vcpkg> .\bootstrap-vcpkg.bat

Building vcpkg.exe …

TRACKER : error TRK0005: Failed to locate: "CL.exe". The system cannot find the file specified.
  [E:\git\vcpkg\toolsrc\vcpkglib\vcpkglib.vcxproj]


Write-Error : Building vcpkg.exe failed. Please ensure you have installed Visual Studio with the Desktop C++ workload a
nd the Windows SDK for Desktop C + +.
At E:\git\vcpkg\scripts\bootstrap.ps1:409 char:16
+     Write-Error <<<<  "Building vcpkg.exe failed. Please ensure you have installed Visual Studio with the Desktop C++
 workload and the Windows SDK for Desktop C + +."
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Microsoft.PowerShell.Commands.WriteErr
   orCommand
https://github.com/lovell/sharp/issues/341, Visual C++ in Visual Studio 2015 — mám to chápat tak, že v těch 8GB, co jsem stáhnu a speciálně zatrhnul C++ nakonec kompiler chybí?!
Vypadá to, že problém s VS2015 a vytvořením vcpkg.exe byl způsoben „zdvojenou instalací”, kdy kus zůstal na disku C a většina na disku E. Nejjednodušší řešení se zatím jeví překopířovaní VC složky k instalaci na disku E.
e:\git\vcpkg>vcpkg.exe integrate install
Applied user-wide integration for this vcpkg root.

All MSBuild C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.

CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=e:/git/vcpkg/scripts/buildsys
tems/vcpkg.cmake"
e:\git\vcpkg>vcpkg.exe install pthreads
The following packages will be built and installed:
    pthreads[core]:x86-windows
Starting package 1/1: pthreads:x86-windows
Building package pthreads[core]:x86-windows…
A suitable version of cmake was not found (required v3.14.0). Downloading portab
le cmake v3.14.0…
Downloading cmake…
  https://github.com/Kitware/CMake/releases/download/v3.14.0/cmake-3.14.0-win32-
x86.zip -> e:\git\vcpkg\downloads\cmake-3.14.0-win32-x86.zip
…
'"E:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VCVarsQueryRegistry.bat"'
is not recognized as an internal or external command,
operable program or batch file.
ERROR: Cannot determine the location of the VS installation.
Looks like it is very common bug in VS installer. Download VS 2015 Redistributable from Microsoft site for both x86 and x64, install it and then rerun VS 2015 installer.
Kopie VC nestačila, ještě bylo třeba Common7.

ZW 24/7

tak cmake --build . --config Release --target pyinstall to i nainstaluje respektive cmake --build . --target pyinstall na linuxu

cmake „instalace” pomoci conda

Ta "instalace" je jen nakopírování do příslušného adresáře site-packages, nic jiného. Jinak pokud budeš chtít nový cmake && používáš conda, tak se nabízí
conda install -c anaconda cmake

instalace ve venv

pozór --- instalace vychazí ze ZWN forku
git clone https://github.com/zwn/apriltag.git
cd apriltag
python3 -m venv env
source .env/bin/activate
pip install –upgrade pip
pip install cmake
mkdir build
cd build
cmake ..
cmake –build . –target pyinstall
by mělo být vše, co je třeba a v aktivovaném venv by měl být importovatelný modul apriltag

ZW 29/7

tj. někde je uvnitř opencv schovaný detektor apriltagů, tj. asi tohle: https://docs.opencv.org/4.1.1/d9/d6a/group__aruco.html#gab9159aa69250d8d3642593e508cb6baa ale asi to nikde nevrací takové ty hamming vzdálenosti a decision_margin atd. Ale možná je to dobře (?).
JK: Jak to čtu, tak jsem zkoušel co defaultně instaluje anaconda, a je to verze 3.4.2. Tahle verze by měla/mohla být na apůčkách. dle: https://mecaruco2.readthedocs.io/en/latest/notebooks_rst/Aruco/aruco_basics_video.html
>>> im = cv2.imread("eduro_april.jpg", 0) #eduro pri vstupu do tunelu
>>> aruco_dict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_APRILTAG_16h5)
>>> parameters =  cv2.aruco.DetectorParameters_create()
>>> corners, ids, rejectedImgPoints = cv2.aruco.detectMarkers(im, aruco_dict, parameters=parameters)
>>> frame_markers = cv2.aruco.drawDetectedMarkers(im.copy(), corners, ids)
>>> cv2.imwrite( "april.jpg", frame_markers)
True
>>>
Apriltag pomocí OpenCV
Apriltag pomocí OpenCV