Existe-t-il un moyen d'obtenir OpenCV depuis un référentiel? Quel artefact dois-je ajouter à pom.xml
? Chaque tutoriel que j'ai trouvé date de '14 et il semble que quelque chose ait changé - ils disent que ce n'est pas encore dans le référentiel officiel Maven, mais j'ai trouvé l'entrée
<!-- https://mvnrepository.com/artifact/nu.pattern/opencv -->
<dependency>
<groupId>nu.pattern</groupId>
<artifactId>opencv</artifactId>
<version>2.4.9-7</version>
</dependency>
Malheureusement, je reçois une erreur
Caused by: Java.lang.UnsatisfiedLinkError: no opencv_Java249 in Java.library.path
quand j'utilise System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
. Puis-je ajouter cette bibliothèque de manière à ce que mon projet l'inclue et «oublie» de l'ajouter manuellement à Classpath?
Cela a fonctionné pour moi.
nu.pattern.OpenCV.loadLibrary();
J'utilise la dépendance suivante maven
<dependency>
<groupId>nu.pattern</groupId>
<artifactId>opencv</artifactId>
<version>2.4.9-4</version>
</dependency>
Ajoutez la dépendance suivante dans votre fichierPOM:
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>3.2.0-0</version>
</dependency>
et remplacez les lignes suivantes:
System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
avec
nu.pattern.OpenCV.loadShared();
Cela devrait résoudre le problème dansWINDOWSaussi. Bonne codage.
Il n'y a actuellement aucun moyen officiel d'utiliser les liaisons Java officielles pour OpenCV en tant que dépendance Maven (comme déjà mentionné dans les commentaires, l'artefact Maven a déjà été demandé dans # 4588 , mais n'est pas surveillé). Néanmoins, il existe 3 approches possibles à votre problème:
Java.lang.UnsatisfiedLinkError
a été lancé car vous devez installer les fichiers binaires de la liaison (c'est-à-dire "opencv_Java") séparément. Très probablement, cet artefact non officiel ne les inclut pas (ni ceux compatibles avec votre système). Afin de construire les liaisons:
git clone
le référentiel OpenCV.git checkout
la version prévue (il semble que vous utilisiez la version 2.4.9, bien que des versions plus récentes soient disponibles)Java.library.path
(là encore, cette variable dépend du système, mais peut être définie lors de l'exécution de votre application). À ce stade, vous devriez être prêt à utiliser cet artefact.Une alternative consiste à utiliser d'autres liaisons: les les presets JavaCPP pour OpenCV semblent fonctionner aussi bien que les officiels, et ceux-ci sont enregistrés dans maven (binaires pour diverses plates-formes incluses!). Rappelez-vous simplement que l'API peut ne pas être exactement la même.
Cette solution peut sembler trop éloignée, mais elle a légitimement fonctionné pour moi par le passé. En gros, vous pouvez éviter d'utiliser les liaisons: implémentez votre solution en C++, puis reliez-la à la JVM via JNI ou faites-en une application distincte, utilisée par l'application principale via d'autres mécanismes de votre système (génération de processus, Canaux I/O, vous le nommez). Par exemple, j'ai déjà créé un composant de service pour l'extraction de fonctionnalités auquel d'autres programmes se connecteraient via des sockets ZeroMQ.
Il suffit de l'utiliser nu.pattern.OpenCV.loadShared ();
écrire une classe avec cette méthode de vide statique
class Test {
public static void loadOpenCVNativeLibrary() {
nu.pattern.OpenCV.loadShared();
}
}
et après l’appeler dans votre classe d’application (avec main statique) pour une application Web (démarrage à ressort par exemple) comme ceci
static {
Test.loadOpenCVNativeLibrary();
}
...
public static void main(String[] args) throws UnknownHostException {
}
Pour ceux qui souhaitent utiliser OpenCV 3.2 dans un environnement MacOs, vous pouvez utiliser la définition de référentiel suivante:
<repositories>
<repository>
<id>kodfarki</id>
<url>https://raw.githubusercontent.com/kodfarki/repository/master/</url>
</repository>
</repositories>
Il existe également un exemple de projet dans https://github.com/kodfarki/opencv-example .
Pour utiliser cet exemple de projet, vous devez toujours installer les fichiers binaires OpenCV.
brew tap homebrew/science
brew install opencv3 --with-Java --with-contrib