ERROR(): No layout for ID +0/0/0+

Added by Patrice Kadionik almost 4 years ago

Bonjour,

Je suis en train de packager AMC version 1.4.0 pour Fedora 33. Autant tout marchait bien sous Fedora 32, autant je n'arrive plus à faire l'autodétection avec AMC 1.4.0 sous Fedora 33.
J'ai maintenant l'erreur :

ERROR(): No layout for ID +0/0/0+

J'ai vu que d'autres avaient eu l'erreur avec une mise à jour d'OpenCV.
Avec Fedora 32, j'avais OpenCV version 4.2.0.
Avec Fedora 33, OpenCV est en version 4.3.0.
OpenCV est-il la cause de mes problèmes ?

Ci-joint le fichier de log pour le debug.

Merci.

++


Replies (12)

RE: ERROR(): No layout for ID +0/0/0+ - Added by Frédéric Bréal almost 4 years ago

Je lis à la ligne 204 un avertissement

[   6574,   0.17] WARNING: command pdftk not found
[   6574,   0.17] WARNING: command qpdf not found

Est-ce qu'il vous faut installer ces 2 logiciels manuellement sur votre OS ?

RE: ERROR(): No layout for ID +0/0/0+ - Added by Alexis Bienvenüe almost 4 years ago

J'ai l'impression que AMC-detect plante. Est-ce que vous avez une erreur quand vous essayez de l'appeler depuis un terminal ?

/usr/lib64/AMC/exec/AMC-detect

Y a-t-il eu des erreurs à la compilation ?

RE: ERROR(): No layout for ID +0/0/0+ - Added by Alexis Bienvenüe almost 4 years ago

Est-ce qu'il vous faut installer ces 2 logiciels manuellement sur votre OS ?

Il faut avoir au moins une des commandes gs, pdftk, qpdf, sedja-console.
A priori sedja-console et qpdf donneront les meilleurs résultats dans le plus de cas possibles.

RE: ERROR(): No layout for ID +0/0/0+ - Added by Patrice Kadionik almost 4 years ago

Merci pour les réponses, Alexis.

Je regarde cela après les fêtes...

Bon réveillon !

Patrice

RE: ERROR(): No layout for ID +0/0/0+ - Added by Patrice Kadionik almost 4 years ago

Bonjour Alexis,

Je te souhaite une belle année 2021 !

pdftk et sedja-console ne font pas partie des packages standards de Fedora 33. J'ai pu installer qpdf.
Après installation de qpdf, j'ai toujours le bug "ERROR: No layout for ID 0/0/0".

AMC-detect plante :

$ /usr/lib64/AMC/exec/AMC-detect
Instruction non permise (core dumped)

Un coup de gdb me donne :

$ gdb /usr/lib64/AMC/exec/AMC-detect
GNU gdb (GDB) Fedora 10.1-2.fc33

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/lib64/AMC/exec/AMC-detect...
Reading symbols from .gnu_debugdata for /usr/lib64/AMC/exec/AMC-detect...
(No debugging symbols found in .gnu_debugdata for /usr/lib64/AMC/exec/AMC-detect)
Missing separate debuginfos, use: dnf debuginfo-install auto-multiple-choice-1.4.0-1.fc33.x86_64
(gdb) run
Starting program: /usr/lib64/AMC/exec/AMC-detect 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib64/libthread_db.so.1".

Program received signal SIGILL, Illegal instruction.
0x00007ffff7bf4e22 in _sub_I_65535_0.0 () from /usr/lib64/libopencv_gapi.so.4.3
(gdb)

A la compilation d'AMC-detect, j'ai juste quelques warnings :

g++ -o AMC-detect AMC-detect.cc  -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wall   -lstdc++ -lm -I /usr/include/opencv -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cvv -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core 
AMC-detect.cc: Dans la fonction << void calage(cv::Mat, cv::Mat, double, double, double, double, double, int, double*, double*, cv::Mat&, int) >>:
AMC-detect.cc:555:20: attention: comparaison d'expressions enti?res de types sign?s diff?rents: << int >> et << std::vector<std::vector<cv::Point_<int> > >::size_type >> {aka << long unsigned int >>} [-Wsign-compare]
  555 |   for(int i = 0; i < contours.size(); i++) {
      |                  ~~^~~~~~~~~~~~~~~~~
AMC-detect.cc: Dans la fonction << omit_optim(double*, double*, double*, double*, int, linear_transform*) >>:
AMC-detect.cc:455:14: attention: << q_best >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
  455 |   return sqrt(q_best);
      |          ~~~~^~~~~~~~
AMC-detect.cc: Dans la fonction << mesure_case(cv::Mat, cv::Mat, int, int, int, int, int, double, int, double, double, double, double, linear_transform*, point*, cv::Mat&, char*, int) >>:
AMC-detect.cc:922:32: attention: << ov_y1 >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
  922 |               ok = (o_y>=ov_y0 && o_y<=ov_y1);
      |                    ~~~~~~~~~~~~^~~~~~~~~~~~~~
AMC-detect.cc:922:32: attention: << ov_y0 >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
AMC-detect.cc:920:36: attention: << ov_x1 >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
  920 |               ok = (SUM_SQUARE(o_x - ov_x1, o_y - ov_center) <= ov_r2);
      |                                    ^
AMC-detect.cc:918:36: attention: << ov_x0 >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
  918 |               ok = (SUM_SQUARE(o_x - ov_x0, o_y - ov_center) <= ov_r2);
      |                                    ^
AMC-detect.cc:918:49: attention: << ov_center >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
  918 |               ok = (SUM_SQUARE(o_x - ov_x0, o_y - ov_center) <= ov_r2);
      |                                                 ^
AMC-detect.cc:916:11: attention: << ov_dir >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
  916 |           if(ov_dir == DIR_X) {
      |           ^~
AMC-detect.cc:937:7: attention: << ov_r2 >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
  937 |       if(ok == 1) {
      |       ^~
AMC-detect.cc:986:17: attention: << z_ymax >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
  986 |           printf(": Z=(%d,%d)+(%d,%d)\n",
      |           ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
  987 |                  z_xmin, z_ymin, z_xmax - z_xmin, z_ymax - z_ymin);
      |                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AMC-detect.cc:986:17: attention: << z_xmax >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
AMC-detect.cc: Dans la fonction << main >>:
AMC-detect.cc:1215:9: attention: << upside_down >> pourrait ?tre utilis? sans ?tre initialis? dans cette fonction [-Wmaybe-uninitialized]
 1215 |         if(upside_down) {
      |         ^~

Il y a visiblement un soucis avec openCV 4.3 et libopencv_gapi.so.4.3.
Voilà où j'en suis.

++

RE: ERROR(): No layout for ID +0/0/0+ - Added by Patrice Kadionik almost 4 years ago

Je ne suis pas apparemment le seul car le bug a été reporté : https://bugzilla.redhat.com/show_bug.cgi?id=1910121

Je suis avec openCV 4.3.0-8 comme dans le rapport de bug. Je vais faire un update de ma machine avec le dépôt update ou update-testing pour voir si le correctif suggéré est disponible...

++

RE: ERROR(): No layout for ID +0/0/0+ - Added by Patrice Kadionik almost 4 years ago

La MAJ de Fedora 33 par :

$sudo dnf update

m'installe la version 4.3.0-9 d'openCV comme suggéré dans le rapport de bug mais j'ai toujours le bug "ERROR: No layout for ID 0/0/0"

Une piste probable signalé dans le port du rapport de bag : "Taking a look at the build log of opencv-4.3.0-9.fc33.x86_64 seems that, as the original bug report suggested, opencv is getting built with AVX2 extensions, even though not explicitly requested in the cmake. This causes it to segfault on a processor without AVX2 extensions."

++

RE: ERROR(): No layout for ID +0/0/0+ - Added by Patrice Kadionik almost 4 years ago

En utilisant l'ancienne bibliothèque libopencv_gapi.so.4.2.0 à la place de la nouvelle libopencv_gapi.so.4.3.0, le bug disparaît.

Il y a donc un problème avec openCV 4.3.0-9 sous Fedora 33 et selon l'analyse d'un contributeur dans le rapport de bug, le bug est lié à une option de configuration lors de la compilation d'openCV qui autorise l'usage d'instructions qui sont absentes sur certains PC, sûrement tous les anciens PC, ce qui est mon cas. J'essayerai sur un PC plus récent la semaine prochaine...

++

RE: ERROR(): No layout for ID +0/0/0+ - Added by Alexis Bienvenüe almost 4 years ago

sûrement tous les anciens PC, ce qui est mon cas

Pour vérifier : cat /proc/cpuifo devrait lister les extensions disponibles sur le processeur (dans la section flags). Pour le mien j'ai vu avx2 dedans (mais je n'ai pas Fedora).

RE: ERROR(): No layout for ID +0/0/0+ - Added by Patrice Kadionik almost 4 years ago

$ cat /proc/cpuinfo 

...
model name    : Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm pti tpr_shadow vnmi flexpriority vpid dtherm
...

Mon processeur Q6600 est trop vieux.
Pour avoir l'extension Advanced Vector Extensions 2 (AVX2), extension du jeu d'instructions AVX (https://en.wikipedia.org/wiki/Advanced_Vector_Extensions), il faut au moins un processeur à architecture Haswell produit après Q2 2013. C'est mort pour mon Q6600 de 2007... Tant qu'il marche, je le garde...

++

RE: ERROR(): No layout for ID +0/0/0+ - Added by Alexis Bienvenüe almost 4 years ago

Ha ben oui alors pas de bol…

RE: ERROR(): No layout for ID +0/0/0+ - Added by Patrice Kadionik almost 4 years ago

Hello.

finalement, tout marche sur mon PC de boulot récent qui supporte les instructions AVX2 nécessaires avec openCV 4.3...

++

(1-12/12)