web-dev-qa-db-fra.com

Java OpenCV de Maven

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?

13
deem

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>
13
Sachin Aryal

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.

9

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:

    1. git clone le référentiel OpenCV.
    2. 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)
    3. Suivez les instructions ici pour construire OpenCV et ses liaisons Java, générant ainsi une bibliothèque liée dynamiquement ("opencv_Java249.dll", "libopencv_Java249.so" ou autre, selon votre système d'exploitation).
    4. Copiez le fichier de bibliothèque partagée dans votre 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.

5
E_net4

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 {
}
2
Pr4y

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

1
Halil