nonguix-mirrors/nongnu/packages/machine-learning.scm
Nicolas Graves c4267aa23e nongnu: Add python-openwakeword and variant.
* nongnu/packages/machine-learning.scm: New file.
(python-openwakeword, python-openwakeword-minimal): New variables.
2025-09-20 13:04:10 +00:00

85 lines
3.2 KiB
Scheme

;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2025 Nicolas Graves <ngraves@ngraves.fr>
(define-module (nongnu packages machine-learning)
#:use-module (gnu packages)
#:use-module (gnu packages audio)
#:use-module (gnu packages check)
#:use-module (gnu packages machine-learning)
#:use-module (gnu packages python-build)
#:use-module (gnu packages python-science)
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages terminals)
#:use-module (guix build-system pyproject)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module ((guix licenses) #:prefix license:))
(define-public python-openwakeword
(package
(name "python-openwakeword")
(version "0.6.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/dscripka/openWakeWord")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0cv85qv31kkhfcdss1ycqf0pxpqs7vjndma7cgsd678027sxbia2"))))
(build-system pyproject-build-system)
(arguments
(list
;; XXX: Tests require unclearly-licensed model weights.
#:tests? #f))
(propagated-inputs (list (list onnxruntime "python")
python-requests
python-scikit-learn
python-scipy
python-tqdm
(list tensorflow-lite "python")))
(native-inputs (list
;; XXX: Those are required if some tests are run.
;; python-mock
;; python-pytest
;; python-pytest-cov
;; python-pytest-flake8
;; python-pytest-mypy
python-setuptools
python-wheel))
(home-page "https://github.com/dscripka/openWakeWord")
(synopsis "Wake word (or phrase) detection framework")
(description
"This package provides an open-source audio wake word (or phrase)
detection framework with a focus on performance and simplicity.")
(license license:asl2.0)))
(define-public python-openwakeword-minimal
(package/inherit python-openwakeword
(name "python-openwakeword-minimal")
(arguments
(substitute-keyword-arguments (package-arguments python-openwakeword)
((#:phases phases #~%standard-phases)
#~(modify-phases #$phases
(add-after 'unpack 'relax-requirements
(lambda _
(substitute* "setup.py"
(("^ *'onnxruntime>=.*")
""))
(delete-file "openwakeword/vad.py")
(substitute* "openwakeword/__init__.py"
(("^from openwakeword\\.vad import VAD.*")
"")
(("'VAD',")
""))))))))
(propagated-inputs
(modify-inputs (package-propagated-inputs python-openwakeword)
(delete "onnxruntime:python")))
(description
(string-append (package-description python-openwakeword) "\n\
Note: This minimal variant doesn't provide the additional Voice Activity
Detection."))))