X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/58410eb4025881d28a4c3aa1f92018b94b7f3032..bdb1a3385df8b16ecdbded9142ed12c40b2a5954:/gnu/packages/image-processing.scm diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm index 52e0311943..ed21b26812 100644 --- a/gnu/packages/image-processing.scm +++ b/gnu/packages/image-processing.scm @@ -1,16 +1,21 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017 John Darrington ;;; Copyright © 2017, 2019 Ricardo Wurmus -;;; Copyright © 2014 Ludovic Courtès +;;; Copyright © 2014, 2021 Ludovic Courtès ;;; Copyright © 2014 Mark H Weaver ;;; Copyright © 2016 Eric Bavier -;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice +;;; Copyright © 2018–2021 Tobias Geerinckx-Rice ;;; Copyright © 2018 Björn Höfling ;;; Copyright © 2018 Lprndn -;;; Copyright © 2019 Efraim Flashner +;;; Copyright © 2019, 2021 Efraim Flashner ;;; Copyright © 2020 Vincent Legoll -;;; Copyright © 2020 Vinicius Monego +;;; Copyright © 2020, 2021 Vinicius Monego ;;; Copyright © 2020 Pierre Neidhardt +;;; Copyright © 2020 Brendan Tildesley +;;; Copyright © 2021 Oleh Malyi +;;; Copyright © 2021 Felix Gruber +;;; Copyright © 2021 Andy Tai +;;; Copyright © 2021 Ekaitz Zarraga ;;; ;;; This file is part of GNU Guix. ;;; @@ -33,6 +38,7 @@ #:use-module (guix utils) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix build-system qt) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (gnu packages) @@ -55,6 +61,7 @@ #:use-module (gnu packages graphviz) #:use-module (gnu packages gstreamer) #:use-module (gnu packages gtk) + #:use-module (gnu packages icu4c) #:use-module (gnu packages image) #:use-module (gnu packages imagemagick) #:use-module (gnu packages maths) @@ -67,8 +74,10 @@ #:use-module (gnu packages python-xyz) #:use-module (gnu packages qt) #:use-module (gnu packages serialization) + #:use-module (gnu packages sqlite) #:use-module (gnu packages tbb) #:use-module (gnu packages tls) + #:use-module (gnu packages version-control) #:use-module (gnu packages video) #:use-module (gnu packages xiph) #:use-module (gnu packages xml) @@ -79,7 +88,7 @@ (define-public dcmtk (package (name "dcmtk") - (version "3.6.5") + (version "3.6.6") (source (origin (method url-fetch) @@ -88,11 +97,10 @@ "dcmtk" (string-join (string-split version #\.) "") "/dcmtk-" version ".tar.gz")) (sha256 - (base32 "1fdyz5wwjp4grys61mxb2ia9fi6i3ax6s43l16xnv291bxk7hld0")))) + (base32 "13j5yf3p6qj3mr17d77r3kcqchf055hgvk1w15vmdr8f54mwcnb8")))) (build-system cmake-build-system) (inputs - `(;; Our ICU is too recent: “error: ‘UChar’ does not name a type“. - ;; ("icu4c" ,icu4c) + `(("icu4c" ,icu4c) ("libjpeg" ,libjpeg-turbo) ("libpng" ,libpng) ("libtiff" ,libtiff) @@ -165,10 +173,82 @@ without compromising the original code base and it makes use of a wide variety of external libraries that provide additional functionality.") (license license:gpl3+))) +(define-public opencolorio + (package + (name "opencolorio") + (version "1.1.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/AcademySoftwareFoundation/OpenColorIO") + (commit (string-append "v" version)))) + (sha256 + (base32 "12srvxca51czpfjl0gabpidj9n84mw78ivxy5w75qhq2mmc798sb")) + (file-name (git-file-name name version)) + (modules '((guix build utils))) + (snippet + `(begin + ;; Remove bundled tarballs, patches, and .jars(!). XXX: Upstream + ;; claims to have fixed USE_EXTERNAL_YAML, but it still fails with: + ;; https://github.com/AcademySoftwareFoundation/OpenColorIO/issues/517 + ;; When removing it, also remove it from the licence field comment. + (for-each delete-file-recursively + (filter + (lambda (full-name) + (let ((file (basename full-name))) + (not (or (string-prefix? "yaml-cpp-0.3" file) + (string=? "unittest.h" file))))) + (find-files "ext" ".*"))) + + #t)))) + (build-system cmake-build-system) + (arguments + `(#:configure-flags + (list (string-append "-DCMAKE_CXX_FLAGS=" + "-Wno-error=deprecated-declarations " + "-Wno-error=unused-function") + "-DOCIO_BUILD_STATIC=OFF" + ;; "-DUSE_EXTERNAL_YAML=ON" + "-DUSE_EXTERNAL_TINYXML=ON" + "-DUSE_EXTERNAL_LCMS=ON") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-test-suite + (lambda _ + (substitute* "src/core_tests/CMakeLists.txt" + (("/bin/sh") (which "bash"))) + #t))))) + (native-inputs + `(("git" ,git) + ("pkg-config" ,pkg-config))) + (inputs + ;; XXX Adding freeglut, glew, ilmbase, mesa, and openimageio for + ;; ocioconvert fails: error: conflicting declaration ?typedef void + ;; (* PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum, GLenum, GLfloat*) + `(("lcms" ,lcms) + ("openexr" ,openexr) + ("tinyxml" ,tinyxml))) + (home-page "https://opencolorio.org") + (synopsis "Color management for visual effects and animation") + (description + "OpenColorIO, or OCIO, is a complete color management solution geared +towards motion picture production, with an emphasis on visual effects and +computer animation. It provides a straightforward and consistent user +experience across all supporting applications while allowing for sophisticated +back-end configuration options suitable for high-end production usage. + +OCIO is compatible with the @acronym{ACES, Academy Color Encoding +Specification} and is @acronym{LUT, look-up table}-format agnostic, supporting +many popular formats.") + (license (list license:expat ; docs/ociotheme/static, ext/yaml-cpp-* + license:zlib ; src/core/md5 + license:bsd-3)))) ; the rest + (define-public vtk (package (name "vtk") - (version "8.2.0") + (version "9.0.1") (source (origin (method url-fetch) (uri (string-append "https://vtk.org/files/release/" @@ -176,39 +256,87 @@ of external libraries that provide additional functionality.") "/VTK-" version ".tar.gz")) (sha256 (base32 - "1fspgp8k0myr6p2a6wkc21ldcswb4bvmb484m12mxgk1a9vxrhrl")))) + "1ir2lq9i45ls374lcmjzw0nrm5l5hnm1w47lg8g8d0n2j7hsaf8v")) + (patches + (search-patches "vtk-fix-freetypetools-build-failure.patch")) + (modules '((guix build utils))) + (snippet + '(begin + (for-each + (lambda (dir) + (delete-file-recursively + (string-append "ThirdParty/" dir "/vtk" dir))) + ;; pugixml depended upon unconditionally + '("doubleconversion" "eigen" "expat" "freetype" "gl2ps" + "glew" "hdf5" "jpeg" "jsoncpp" "libproj" "libxml2" "lz4" + "netcdf" "ogg" "png" "sqlite" "theora" "tiff" "zlib")) + #t)))) + (properties `((release-monitoring-url . "https://vtk.org/download/"))) (build-system cmake-build-system) (arguments '(#:build-type "Release" ;Build without '-g' to save space. - ;; -DVTK_USE_SYSTEM_NETCDF:BOOL=TRUE requires netcdf_cxx - #:configure-flags '("-DVTK_USE_SYSTEM_EXPAT:BOOL=TRUE" - "-DVTK_USE_SYSTEM_FREETYPE:BOOL=TRUE" - "-DVTK_USE_SYSTEM_HDF5:BOOL=TRUE" - "-DVTK_USE_SYSTEM_JPEG:BOOL=TRUE" - "-DVTK_USE_SYSTEM_JSONCPP:BOOL=TRUE" - "-DVTK_USE_SYSTEM_LIBXML2:BOOL=TRUE" - "-DVTK_USE_SYSTEM_OGGTHEORA:BOOL=TRUE" - "-DVTK_USE_SYSTEM_PNG:BOOL=TRUE" - "-DVTK_USE_SYSTEM_TIFF:BOOL=TRUE" - "-DVTK_USE_SYSTEM_ZLIB:BOOL=TRUE") - #:tests? #f)) ;XXX: no "test" target + #:configure-flags '(;"-DBUILD_TESTING:BOOL=TRUE" + ; ; not honored + "-DVTK_USE_EXTERNAL=OFF" ;; default + "-DVTK_MODULE_USE_EXTERNAL_VTK_doubleconversion=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_eigen=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_expat=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_freetype=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_gl2ps=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_glew=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_hdf5=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_jpeg=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_jsoncpp=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_libproj=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_libxml2=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_lz4=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_netcdf=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_ogg=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_png=ON" + ;"-DVTK_MODULE_USE_EXTERNAL_VTK_pugixml=ON" ; breaks IO/CityGML + "-DVTK_MODULE_USE_EXTERNAL_VTK_sqlite=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_theora=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_tiff=ON" + "-DVTK_MODULE_USE_EXTERNAL_VTK_zlib=ON" + ) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-sources + (lambda _ + (substitute* "Common/Core/vtkFloatingPointExceptions.cxx" + (("") "")) + (substitute* "Common/Core/CMakeLists.txt" + (("fenv.h") "cfenv"))))) + #:tests? #f)) ;XXX: test data not included (inputs - `(("libXt" ,libxt) - ("xorgproto" ,xorgproto) - ("libX11" ,libx11) - ("libxml2" ,libxml2) - ("mesa" ,mesa) - ("glu" ,glu) + `(("double-conversion" ,double-conversion) + ("eigen" ,eigen) ("expat" ,expat) ("freetype" ,freetype) + ("gl2ps" ,gl2ps) + ("glew" ,glew) + ("glu" ,glu) ("hdf5" ,hdf5) ("jpeg" ,libjpeg-turbo) ("jsoncpp" ,jsoncpp) - ("libogg" ,libogg) ("libtheora" ,libtheora) + ("libX11" ,libx11) + ("libxml2" ,libxml2) + ("libXt" ,libxt) + ("lz4" ,lz4) + ("mesa" ,mesa) + ("netcdf" ,netcdf) ("png" ,libpng) + ("proj" ,proj.4) + ;("pugixml" ,pugixml) + ("sqlite" ,sqlite) ("tiff" ,libtiff) + ("xorgproto" ,xorgproto) ("zlib" ,zlib))) + (propagated-inputs + ;; VTK's 'VTK-vtk-module-find-packages.cmake' calls + ;; 'find_package(THEORA)', which in turns looks for libogg. + `(("libogg" ,libogg))) (home-page "https://vtk.org/") (synopsis "Libraries for 3D computer graphics") (description @@ -222,6 +350,22 @@ a suite of 3D interaction widgets, supports parallel processing, and integrates with various databases on GUI toolkits such as Qt and Tk.") (license license:bsd-3))) +;; freecad needs an old version of VTK, because VTK's API changed from 8 to 9 +(define-public vtk-8 + (package (inherit vtk) + (version "8.2.0") + (source (origin + (method url-fetch) + (uri (string-append "https://vtk.org/files/release/" + (version-major+minor version) + "/VTK-" version ".tar.gz")) + (sha256 + (base32 + "1fspgp8k0myr6p2a6wkc21ldcswb4bvmb484m12mxgk1a9vxrhrl")))) + (inputs + `(("jsoncpp" ,jsoncpp-for-tensorflow) + ,@(alist-delete "jsoncpp" (package-inputs vtk)))))) + ;; itksnap needs an older variant of VTK. (define-public vtk-6 (package (inherit vtk) @@ -445,7 +589,7 @@ vision algorithms. It can be used to do things like: (define-public vips (package (name "vips") - (version "8.7.4") + (version "8.10.6") (source (origin (method url-fetch) @@ -453,33 +597,33 @@ vision algorithms. It can be used to do things like: "https://github.com/libvips/libvips/releases/download/v" version "/vips-" version ".tar.gz")) (sha256 - (base32 "01gjhcrl6zj7mcj1al717v5jsniahplqhz1xkfh2j78vyfl1hxff")))) + (base32 "0vjsh3i0861f6h9as3bch956cidz824zz499pvhjs3lfjn6hhs14")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - ("gobject-introspection" ,gobject-introspection))) + `(("gobject-introspection" ,gobject-introspection) + ("pkg-config" ,pkg-config))) (inputs - `(("glib" ,glib) + `(("expat" ,expat) + ("fftw" ,fftw) + ("giflib" ,giflib) + ("glib" ,glib) + ("hdf5" ,hdf5) + ("imagemagick" ,imagemagick) + ("lcms" ,lcms) + ("libexif" ,libexif) + ("libgsf" ,libgsf) ("libjpeg" ,libjpeg-turbo) ("libpng" ,libpng) ("librsvg" ,librsvg) ("libtiff" ,libtiff) - ("libexif" ,libexif) - ("giflib" ,giflib) - ("libgsf" ,libgsf) - ("fftw" ,fftw) - ("poppler" ,poppler) - ("pango" ,pango) - ("lcms" ,lcms) - ("matio" ,matio) + ("libxml2" ,libxml2) ("libwebp" ,libwebp) + ("matio" ,matio) ("niftilib" ,niftilib) ("openexr" ,openexr) ("orc" ,orc) - ("imagemagick" ,imagemagick) - ("libxml2" ,libxml2) - ("expat" ,expat) - ("hdf5" ,hdf5))) + ("pango" ,pango) + ("poppler" ,poppler))) (home-page "https://libvips.github.io/libvips/") (synopsis "Multithreaded image processing system with low memory needs") (description @@ -495,17 +639,28 @@ due to its architecture which automatically parallelises the image workflows.") (define-public gmic (package (name "gmic") - (version "2.9.1") + (version "2.9.7") (source (origin (method url-fetch) (uri (string-append "https://gmic.eu/files/source/gmic_" version ".tar.gz")) (sha256 - (base32 "13axx7nwchn6ysgpvlw3fib474q4nrwv3qn20g3q03ldid0xvjah")))) + (base32 "05kzaplsl5qvxs7v6g73q0lq8dii8g6v77ap609188m7gr43f9cl")))) (build-system cmake-build-system) (arguments - `(#:tests? #f)) ;there are no tests + `(#:tests? #f ;there are no tests + #:configure-flags '("-DBUILD_LIB_STATIC=OFF" + "-DENABLE_DYNAMIC_LINKING=ON" + "-DENABLE_LTO=ON") + #:phases + (modify-phases %standard-phases + (add-before 'configure 'set-LDFLAGS + (lambda* (#:key inputs outputs #:allow-other-keys) + (setenv "LDFLAGS" + (string-append + "-Wl,-rpath=" + (assoc-ref outputs "out") "/lib"))))))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs @@ -529,6 +684,42 @@ including 2D color images.") ;; Dual-licensed, either license applies. (license (list license:cecill license:cecill-c)))) +(define-public gmic-qt + (package + (inherit gmic) + (name "gmic-qt") + (arguments + (substitute-keyword-arguments (package-arguments gmic) + ((#:configure-flags _) + `(list "-DGMIC_QT_HOST=none" "-DENABLE_DYNAMIC_LINKING=ON" + (string-append "-DGMIC_LIB_PATH=" + (assoc-ref %build-inputs "gmic") "/lib"))) + ((#:phases phases) + `(modify-phases ,phases + (add-after 'unpack 'qt-chdir + (lambda _ (chdir "gmic-qt") #t)))))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("qttools" ,qttools))) + (inputs + `(("gmic" ,gmic) + ("qtbase" ,qtbase) + ,@(package-inputs gmic))) + (synopsis "Qt frontend for the G'MIC image processing framework") + (license license:gpl3+))) + +(define-public gmic-qt-krita + (package + (inherit gmic-qt) + (name "gmic-qt-krita") + (arguments + (substitute-keyword-arguments (package-arguments gmic-qt) + ((#:configure-flags flags) + '(list "-DGMIC_QT_HOST=krita" "-DENABLE_DYNAMIC_LINKING=ON" + (string-append "-DGMIC_LIB_PATH=" + (assoc-ref %build-inputs "gmic") "/lib"))))) + (synopsis "Krita plugin for the G'MIC image processing framework"))) + (define-public nip2 (package (name "nip2") @@ -938,7 +1129,78 @@ full-featured UI aimed at clinical researchers.") (description "Metapixel is a program for generating photomosaics. It can generate classical photomosaics, in which the source image is viewed as a matrix of equally sized rectangles for each of which a matching image is -substitued, as well as collage-style photomosaics, in which rectangular parts +substituted, as well as collage-style photomosaics, in which rectangular parts of the source image at arbitrary positions (i.e. not aligned to a matrix) are substituted by matching images.") (license license:gpl2)))) + +(define-public scantailor-advanced + (let ((commit "3d1e74e6ace413733511086934a66f4e3f7a6027")) + (package + (name "scantailor-advanced") + (version (string-append "1.0.16-" (string-take commit 7))) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/4lex4/scantailor-advanced") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0kixwjb2x457dq7927hkh34c803p7yh1pmn6n61rk9shqrcg492h")))) + (build-system qt-build-system) + (native-inputs + `(("qttools" ,qttools))) + (inputs + `(("boost" ,boost) + ("libjpeg" ,libjpeg-turbo) + ("libpng" ,libpng) + ("libtiff" ,libtiff) + ("qtbase" ,qtbase) + ("qtsvg" ,qtsvg) + ("zlib" ,zlib))) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; Some tests require a display and fail with offscreen mode. + (add-after 'unpack 'disable-failing-tests + (lambda _ + (setenv "ARGS" "--exclude-regex \"imageproc_.*\"") + #t))))) + (home-page "https://github.com/4lex4/scantailor-advanced") + (synopsis "Clean up scanned pages") + (description "Scan Tailor is an interactive post-processing tool for +scanned pages. It performs operations such as page splitting, deskewing, +adding/removing borders, and others. You give it raw scans, and you get pages +ready to be printed or assembled into a PDF or DJVU file. Scanning, optical +character recognition, and assembling multi-page documents are out of scope of +this project. + +Scan Tailer Advanced is a fork of Scan Tailer that merges Scan Tailor Featured +and Scan Tailor Enhanced versions as well as including many more bug fixes.") + (license license:gpl3+)))) + +(define-public stiff + (package + (name "stiff") + (version "2.4.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://www.astromatic.net/download/stiff/stiff-" + version ".tar.gz")) + (sha256 + (base32 "14m92dskzw7bwsr64ha4p0mj3ndv13gwcbfic3qxrs3zq5353s7l")))) + (build-system gnu-build-system) + (inputs + `(("libtiff" ,libtiff) + ("zlib" ,zlib) + ("libjpeg-turbo" ,libjpeg-turbo))) + (home-page "https://www.astromatic.net/software/stiff") + (synopsis "Convert scientific FITS images to TIFF format") + (description + "STIFF is a program that converts scientific @acronym{FITS, Flexible Image +Transport System} images to the more popular TIFF format for illustration +purposes.") + (license license:gpl3+)))