~ruther/guix-local

5894b1210d689ec408db21184b85b0a6a1a5ca3e — Ricardo Wurmus 4 years ago b934d88
gnu: opencv: Update to 4.5.4.

* gnu/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch: Delete file.
* gnu/packages/patches/opencv-rgbd-aarch64-test-fix.patch: Delete file.
* gnu/local.mk (dist_patch_DATA): Remove patches.
* gnu/packages/image-processing.scm (opencv): Update to 4.5.4.
[source]: Remove patch; keep bundled quirc.
[arguments]: Build without ade; update build phase 'disable-broken-tests;
remove build phase 'add-ilmbase-include-path.
[native-inputs]: Update source hashes for opencv-contrib and opencv-extra.
[inputs]: Use new style; add imath and openblas; replace openexr-2 with
openexr.
[description]: Reformat first paragraph.
4 files changed, 65 insertions(+), 146 deletions(-)

M gnu/local.mk
M gnu/packages/image-processing.scm
D gnu/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch
D gnu/packages/patches/opencv-rgbd-aarch64-test-fix.patch
M gnu/local.mk => gnu/local.mk +0 -2
@@ 1549,8 1549,6 @@ dist_patch_DATA =						\
  %D%/packages/patches/onnx-skip-model-downloads.patch		\
  %D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch	\
  %D%/packages/patches/opencascade-oce-glibc-2.26.patch		\
  %D%/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch	\
  %D%/packages/patches/opencv-rgbd-aarch64-test-fix.patch	\
  %D%/packages/patches/openfoam-4.1-cleanup.patch			\
  %D%/packages/patches/openjdk-10-idlj-reproducibility.patch	\
  %D%/packages/patches/openjdk-14-builtins.patch                \

M gnu/packages/image-processing.scm => gnu/packages/image-processing.scm +65 -65
@@ 375,7 375,7 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
(define-public opencv
  (package
    (name "opencv")
    (version "3.4.3")
    (version "4.5.4")
    (source (origin
              (method git-fetch)
              (uri (git-reference


@@ 384,14 384,34 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
              (file-name (git-file-name name version))
              (sha256
               (base32
                "06bc61r8myym4s8im10brdjfg4wxkrvsbhhl7vr1msdan2xddzi3"))
              (patches
               (search-patches "opencv-fix-build-of-grfmt_jpeg2000.cpp.patch"))
                "0gf2xs3r4s51m20mpf0wdidpk0xzp3m2w6jx72fwldhn0pshlmcj"))
              (modules '((guix build utils)))
              (snippet
               '(begin
                  ;; Remove external libraries. We have all available in Guix:
                  (delete-file-recursively "3rdparty")
                  ;; Remove external libraries. We have almost all available
                  ;; in Guix:
                  (with-directory-excursion "3rdparty"
                    (for-each delete-file-recursively
                              '("carotene"
                                "cpufeatures"
                                "ffmpeg"
                                "include"
                                "ippicv"
                                "ittnotify"
                                "libjasper"
                                "libjpeg"
                                "libjpeg-turbo"
                                "libpng"
                                "libtengine"
                                "libtiff"
                                "libwebp"
                                "openexr"
                                "openjpeg"
                                "openvx"
                                "protobuf"
                                ;;"quirc"
                                "tbb"
                                "zlib")))

                  ;; Milky icon set is non-free:
                  (delete-file-recursively "modules/highgui/src/files_Qt/Milky")


@@ 403,7 423,8 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
    (build-system cmake-build-system)
    (arguments
     `(#:configure-flags
       (list "-DWITH_IPP=OFF"
       (list "-DWITH_ADE=OFF" ;we don't have a package for ade yet
             "-DWITH_IPP=OFF"
             "-DWITH_ITT=OFF"
             "-DWITH_CAROTENE=OFF" ; only visible on arm/aarch64
             "-DENABLE_PRECOMPILED_HEADERS=OFF"


@@ 456,30 477,19 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
       (modify-phases %standard-phases
         (add-after 'unpack 'disable-broken-tests
           (lambda _
             ;; These tests fails with:
             ;; vtkXOpenGLRenderWindow (0x723990): Could not find a decent config
             ;; I think we have no OpenGL support with the Xvfb.
             (substitute* '("modules/viz/test/test_tutorial3.cpp"
                            "modules/viz/test/test_main.cpp"
                            "modules/viz/test/tests_simple.cpp"
                            "modules/viz/test/test_viz3d.cpp")
               (("(TEST\\(Viz, )([a-z].*\\).*)" all pre post)
                (string-append pre "DISABLED_" post)))

             ;; This one fails with "unknown file: Failure"
             ;; This test fails with "unknown file: Failure"
             ;; But I couldn't figure out which file was missing:
             (substitute* "../opencv-contrib/modules/face/test/test_face_align.cpp"
               (("(TEST\\(CV_Face_FacemarkKazemi, )(can_detect_landmarks\\).*)"
                 all pre post)
                (string-append pre "DISABLED_" post)))

             ;; Failure reason: Bad accuracy
             ;; Incorrect count of accurate poses [2nd case]: 90.000000 / 94.000000
             (substitute* "../opencv-contrib/modules/rgbd/test/test_odometry.cpp"
               (("(TEST\\(RGBD_Odometry_Rgbd, )(algorithmic\\).*)" all pre post)
                (string-append pre "DISABLED_" post)))
             #t))

             ;; These fail with protobuf parse errors that come from
             ;; opencv-extra/testdata.
             (substitute* "modules/dnn/test/test_layers.cpp"
               (("(TEST_P\\(Test_Caffe_layers, )\
(Accum\\).*|DataAugmentation\\).*|Resample\\).*|Correlation\\).*)" all pre post)
                (string-append pre "DISABLED_" post)))))
         (add-after 'unpack 'unpack-submodule-sources
           (lambda* (#:key inputs #:allow-other-keys)
             (mkdir "../opencv-extra")


@@ 488,18 498,6 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
                               "../opencv-extra")
             (copy-recursively (assoc-ref inputs "opencv-contrib")
                               "../opencv-contrib")))

         (add-after 'set-paths 'add-ilmbase-include-path
           (lambda* (#:key inputs #:allow-other-keys)
           ;; OpenEXR propagates ilmbase, but its include files do not appear
           ;; in the CPATH, so we need to add "$ilmbase/include/OpenEXR/" to
           ;; the CPATH to satisfy the dependency on "ImathVec.h".
           (setenv "CPATH"
                   (string-append
                    (string-drop-right
                     (search-input-file inputs "include/OpenEXR/ImathVec.h")
                     11)
                    ":" (or (getenv "CPATH") "")))))
       (add-before 'check 'start-xserver
         (lambda* (#:key inputs #:allow-other-keys)
           (let ((xorg-server (assoc-ref inputs "xorg-server"))


@@ 516,48 514,50 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
        ,(origin
           (method git-fetch)
           (uri (git-reference
                  (url "https://github.com/opencv/opencv_extra")
                  (commit version)))
                 (url "https://github.com/opencv/opencv_extra")
                 (commit version)))
           (file-name (git-file-name "opencv_extra" version))
           (sha256
            (base32 "08p5xnq8n1jw8svvz0fnirfg7q8dm3p4a5dl7527s5xj0f9qn7lp"))))
            (base32 "1fg2hxdvphdvagc2fkmhqk7qql9mp7pj2bmp8kmd7vicpr72qk82"))))
       ("opencv-contrib"
        ,(origin
           (method git-fetch)
           (uri (git-reference
                  (url "https://github.com/opencv/opencv_contrib")
                  (commit version)))
                 (url "https://github.com/opencv/opencv_contrib")
                 (commit version)))
           (file-name (git-file-name "opencv_contrib" version))
           (patches (search-patches "opencv-rgbd-aarch64-test-fix.patch"))
           (sha256
            (base32 "1f334glf39nk42mpqq6j732h3ql2mpz89jd4mcl678s8n73nfjh2"))))))
    (inputs `(("libjpeg" ,libjpeg-turbo)
              ("libpng" ,libpng)
              ("jasper" ,jasper)
              ;; ffmpeg 4.0 causes core dumps in tests.
              ("ffmpeg" ,ffmpeg-3.4)
              ("libtiff" ,libtiff)
              ("hdf5" ,hdf5)
              ("libgphoto2" ,libgphoto2)
              ("libwebp" ,libwebp)
              ("zlib" ,zlib)
              ("gtkglext" ,gtkglext)
              ("openexr" ,openexr-2)
              ("ilmbase" ,ilmbase)
              ("gtk+" ,gtk+-2)
              ("python-numpy" ,python-numpy)
              ("protobuf" ,protobuf)
              ("vtk" ,vtk)
              ("python" ,python)))
            (base32 "0ga0l4ranp1834gxgp487ll1amvmssa02l2nk5ja5w0rx4d8hh26"))))))
    (inputs
     (list ffmpeg
           gtk+
           gtkglext
           hdf5
           ilmbase
           imath ;should be propagated by openexr
           jasper
           libgphoto2
           libjpeg-turbo
           libpng
           libtiff
           libwebp
           openblas
           openexr
           openjpeg
           protobuf
           python
           python-numpy
           vtk
           zlib))
    ;; These three CVEs are not a problem of OpenCV, see:
    ;; https://github.com/opencv/opencv/issues/10998
    (properties '((lint-hidden-cve . ("CVE-2018-7712"
                                      "CVE-2018-7713"
                                      "CVE-2018-7714"))))
    (synopsis "Computer vision library")
    (description "OpenCV is a library aimed at
real-time computer vision, including several hundred computer
vision algorithms.  It can be used to do things like:
    (description "OpenCV is a library aimed at real-time computer vision,
including several hundred computer vision algorithms.  It can be used to do
things like:

@itemize
@item image and video input and output

D gnu/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch => gnu/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch +0 -39
@@ 1,39 0,0 @@
From: Tobias Geerinckx-Rice <me@tobias.gr>
Date: Thu, 13 Aug 2020 15:21:30 +0200
Subject: [PATCH] gnu: opencv: Fix build with Jasper 2.0.19.

Taken verbatim from upstream: <https://github.com/opencv/opencv/issues/17984>.

From f66fc199a20882c546fa31142e9c0f5a8b3cf983 Mon Sep 17 00:00:00 2001
From: Florian Jung <flo@windfis.ch>
Date: Wed, 29 Jul 2020 18:51:55 +0200
Subject: [PATCH] Fix build of grfmt_jpeg2000.cpp

libjasper has recently changed `jas_matrix_get` from a macro to an inline function
(389951d071 in https://github.com/jasper-software/jasper), causing the build to fail.
---
 modules/imgcodecs/src/grfmt_jpeg2000.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/modules/imgcodecs/src/grfmt_jpeg2000.cpp b/modules/imgcodecs/src/grfmt_jpeg2000.cpp
index fe69f80c86f..0f4d28d6f4d 100644
--- a/modules/imgcodecs/src/grfmt_jpeg2000.cpp
+++ b/modules/imgcodecs/src/grfmt_jpeg2000.cpp
@@ -377,7 +377,7 @@ bool  Jpeg2KDecoder::readComponent8u( uchar *data, void *_buffer,
 
     for( y = 0; y < yend - ystart; )
     {
-        jas_seqent_t* pix_row = &jas_matrix_get( buffer, y / ystep, 0 );
+        jas_seqent_t* pix_row = jas_matrix_getref( buffer, y / ystep, 0 );
         uchar* dst = data + (y - yoffset) * step - xoffset;
 
         if( xstep == 1 )
@@ -443,7 +443,7 @@ bool  Jpeg2KDecoder::readComponent16u( unsigned short *data, void *_buffer,
 
     for( y = 0; y < yend - ystart; )
     {
-        jas_seqent_t* pix_row = &jas_matrix_get( buffer, y / ystep, 0 );
+        jas_seqent_t* pix_row = jas_matrix_getref( buffer, y / ystep, 0 );
         ushort* dst = data + (y - yoffset) * step - xoffset;
 
         if( xstep == 1 )

D gnu/packages/patches/opencv-rgbd-aarch64-test-fix.patch => gnu/packages/patches/opencv-rgbd-aarch64-test-fix.patch +0 -40
@@ 1,40 0,0 @@
https://github.com/opencv/opencv_contrib/commit/8aaa91c3dc835690477d7777e66948dbf5a87edc.patch

From 8aaa91c3dc835690477d7777e66948dbf5a87edc Mon Sep 17 00:00:00 2001
From: Tomoaki Teshima <tomoaki.teshima@gmail.com>
Date: Mon, 5 Nov 2018 20:32:23 +0900
Subject: [PATCH] avoid test failing on Aarch64   * loosen the threshold in
 Rgbd_Normals.compute   * make the minimum tvec larger in
 RGBD_Odometry_Rgbd.algorithmic

---
 modules/rgbd/test/test_normal.cpp   | 2 +-
 modules/rgbd/test/test_odometry.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/modules/rgbd/test/test_normal.cpp b/modules/rgbd/test/test_normal.cpp
index f2233553a7..ed54f2cd98 100644
--- a/modules/rgbd/test/test_normal.cpp
+++ b/modules/rgbd/test/test_normal.cpp
@@ -211,7 +211,7 @@ class CV_RgbdNormalsTest: public cvtest::BaseTest
             std::cout << std::endl << "*** FALS" << std::endl;
             errors[0][0] = 0.006f;
             errors[0][1] = 0.03f;
-            errors[1][0] = 0.00008f;
+            errors[1][0] = 0.0001f;
             errors[1][1] = 0.02f;
             break;
           case 1:
diff --git a/modules/rgbd/test/test_odometry.cpp b/modules/rgbd/test/test_odometry.cpp
index 62b654a1ec..f5a2084504 100644
--- a/modules/rgbd/test/test_odometry.cpp
+++ b/modules/rgbd/test/test_odometry.cpp
@@ -213,7 +213,7 @@ void CV_OdometryTest::generateRandomTransformation(Mat& rvec, Mat& tvec)
     normalize(rvec, rvec, rng.uniform(0.007f, maxRotation));
 
     randu(tvec, Scalar(-1000), Scalar(1000));
-    normalize(tvec, tvec, rng.uniform(0.007f, maxTranslation));
+    normalize(tvec, tvec, rng.uniform(0.008f, maxTranslation));
 }
 
 void CV_OdometryTest::run(int)