Je voulais utiliser la bibliothèque OpenCV en Java, mais c'était étonnamment difficile, donc je vais écrire la procédure. En tant que moyen d'organiser les connaissances périphériques, cela a également conduit à une compréhension de choses de base telles que la façon d'utiliser les bibliothèques et les packages Java, je vais donc en parler également. Les deux (1) lors de la compilation dans le terminal et (2) lors de la compilation à l'aide de l'EDI (en particulier IntelliJ) sont décrits.
Au cas où, je quitterai la méthode d'installation Java (macOS). Je l'ai installé en utilisant Homebrew.
# install Homebrew (if needed)
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# update packages, install cask, and allow cask to look up versions
brew update
brew tap homebrew/cask
brew tap homebrew/cask-versions
# install Java
brew cask install java #Vous pouvez installer en spécifiant la version si vous utilisez java13 etc.
Cela installera Java dans / Library /
. La structure hiérarchique devrait être la suivante.
/Library/Java
|-- Extensions/ #Dossier d'extension Java
`-- JavaVirtualMachine/
`-- openjdk-13.0.2.jdk/ #JDK installé
`-- Contents/
|-- Home/ #Répertoire de base JDK
| |--
| ...
|-- MacOS/
`-- Info.plist
Au fait, comme d'habitude
java --version
Ensuite, vous pouvez vérifier la version.
OpenCV Vous pouvez installer OpenCV Java sur macOS en suivant le premier site ci-dessous. À partir de juin 2020, la dernière version de Java est la version 4.3.0, donc si vous l'installez sans spécifier la version, elle sera installée. L'installation elle-même prend un temps inattendu.
Espérons que la bibliothèque sera installée dans / usr / local / Cellar / opencv / 4.3.0_4 / share / java /
avec la structure hiérarchique suivante. Cela devrait varier en fonction de la machine et de la version du logiciel.
/java/
`-- opencv4/
|-- opencv-430.jar #Bibliothèque statique
`-- libopencv_java430.dylib* #Bibliothèque dynamique
|--
...
Au fait, le fichier .jar est une bibliothèque statique, le fichier .dylib est une bibliothèque dynamique (abréviation de bibliothèque dynamique) et la bibliothèque dynamique est une bibliothèque qui est référencée à l'exécution, pas à la compilation [^ 1]. Au fait, le fichier jar est un fichier compressé qui rassemble les fichiers de classe créés par compilation en un seul [^ 2].
Test.java
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.core.Scalar;
public class Test {
// Compulsory
static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
public static void main(String[] args) {
System.out.println("Welcome to OpenCV " + Core.VERSION);
Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
System.out.println("OpenCV Mat: " + m);
Mat mr1 = m.row(1);
mr1.setTo(new Scalar(1));
Mat mc5 = m.col(5);
mc5.setTo(new Scalar(5));
System.out.println("OpenCV Mat data:\n" + m.dump());
}
}
Créez un fichier comme celui-ci et compilez-le. Dans le répertoire où se trouve le fichier, tout comme la compilation d'un fichier .java normalement
javac Test.java
Lorsque je le compile en tant que, j'obtiens beaucoup d'erreurs comme ci-dessous.
Cela signifie que la bibliothèque OpenCV est introuvable car elle indique que "le package org.opencv.core n'existe pas". En d'autres termes, bien qu'OpenCV ait été installé, javac n'a pas pu trouver la bibliothèque lors de la compilation.
Pour résoudre cela, il est nécessaire de le donner via ** chemin de classe ** comme suit. En ajoutant l'option -classpath
ou -cp
au moment de la compilation, javac y cherchera.
javac -classpath /usr/local/Cellar/opencv/4.3.0_4/share/java/opencv4/opencv-430.jar Test.java
Vous devez également spécifier le chemin de la bibliothèque dynamique au moment de l'exécution.
java -Djava.library.path="/usr/local/Cellar/opencv/4.3.0_4/share/java/opencv4" -classpath /usr/local/Cellar/opencv/4.3.0_4/share/java/opencv4/opencv-430.jar: Test
Au fait, vous devez mettre deux points :
après le chemin de classe au moment de l'exécution (macOS). Dans le cas de Windows, il s'agit d'un point-virgule «;».
Si fait correctement
Résultat d'exécution
Welcome to OpenCV 4.3.0
OpenCV Mat: Mat [ 5*10*CV_8UC1, isCont=true, isSubmat=false, nativeObj=0x7fd0f2e3f230, dataAddr=0x7fd0f2e3f0c0 ]
OpenCV Mat data:
[ 0, 0, 0, 0, 0, 5, 0, 0, 0, 0;
1, 1, 1, 1, 1, 5, 1, 1, 1, 1;
0, 0, 0, 0, 0, 5, 0, 0, 0, 0;
0, 0, 0, 0, 0, 5, 0, 0, 0, 0;
0, 0, 0, 0, 0, 5, 0, 0, 0, 0]
Est affiché.
Utilisez ʻimport ou
package` pour créer une classe en Java dans un fichier séparé et utiliser cette classe dans un autre fichier Java. L'exemple ci-dessus est un fichier unique, mais lors de la construction d'un programme, les fichiers dépendent souvent les uns des autres de cette manière. En plus de cela, nous voulons cette fois faire référence à OpenCV, c'est-à-dire à une bibliothèque externe.
Dans un tel cas, comme avant
javac -classpath /usr/local/Cellar/opencv/4.3.0_4/share/java/opencv4/opencv-430.jar Test.java
Lorsque j'ai essayé de compiler en tant que, j'ai eu une erreur avec le package et l'importation cette fois.
Cela signifie qu'en spécifiant le chemin de la classe, javac n'a pas pu le trouver car il a recherché des packages et des importations à partir de ce chemin. Java exprime la structure hiérarchique des packages et des importations par des points .
au lieu de barres obliques /
, mais il est écrit par le chemin relatif depuis le répertoire courant où la compilation est exécutée en premier lieu ([Site de référence]([Site de référence] https://www.sejuku.net/blog/63008)). En d'autres termes, ** le chemin de classe était le répertoire courant par défaut **, mais comme il a été écrasé par l'option -classpath
, il ne peut plus être trouvé.
Une solution possible est de changer le package ou le chemin d'importation en (1) un chemin absolu ou (2) un chemin relatif à partir de l'option -classpath spécifiée au moment de la compilation. Cependant, le chemin absolu est long et vous devez le réécrire chaque fois que vous déplacez le programme vers un autre PC. En outre, il est absurde de modifier le contenu du fichier en tenant compte des options de compilation, et comme l'emplacement de la bibliothèque externe diffère selon chaque PC, il doit être réécrit à chaque fois. Après tout, il s'agit généralement d'un chemin relatif depuis le fichier principal.
Par conséquent, au lieu de réécrire le chemin de classe, je voudrais le spécifier pour qu'il soit ajouté (y compris le chemin de la bibliothèque OpenCV), mais si vous le connectez avec un deux-points :
, vous pouvez spécifier plusieurs chemins de classe, alors utilisez ceci. ..
Cela signifie le spécifier comme -class path .: (chemin OpenCV)
y compris .
du répertoire courant. En faisant cela, tout en préservant les dépendances d'origine du package, etc., un nouveau chemin de classe pour la bibliothèque OpenCV est également ajouté.
javac -classpath .:/usr/local/Cellar/opencv/4.3.0_4/share/java/opencv4/opencv-430.jar Test.java #compiler
java -Djava.library.path="/usr/local/Cellar/opencv/4.3.0_4/share/java/opencv4" -classpath .:/usr/local/Cellar/opencv/4.3.0_4/share/java/opencv4/opencv-430.jar: Test #Courir
Vous pouvez maintenant compiler et exécuter correctement. (Site de référence) Java Programming: Package and Classpath
Cette méthode est une méthode pour spécifier temporairement le chemin de la classe au moment de la compilation ou de l'exécution, mais comme / Library / Extensions /
est un dossier d'extension Java, il est dit que le chemin sera passé en insérant le fichier jar et le fichier dylib ici. Il semble y avoir une méthode. Dans ce cas, il n'est pas nécessaire de spécifier l'option -classpath à chaque fois.
[** IntelliJ **](https://www.jetbrains.com/idea/promo/ultimate/?gclid=Cj0KCQjwoPL2BRDxARIsAEMm9y-AFlyJ1PpLvFySDiJJ-ABoUi0xzY9fdK4FnQLvO4dX-6 Environnement). Auparavant, j'utilisais OpenCV lors du développement avec un éditeur et un terminal, mais j'écrirai également la méthode de paramétrage lors de l'utilisation d'IntelliJ. À propos, le tutoriel d'IntelliJ lui-même est ci-dessous.
Au cas où, je quitterai la procédure de configuration de base de l'installation d'IntelliJ.
Sélectionnez le système d'exploitation sur la page d'installation et téléchargez l'édition communautaire (les étudiants peuvent également télécharger une licence).
(Si nécessaire) * Bienvenue dans IntelliJ IDEA * Dans la fenêtre, * Configurer-> Plugins * pour insérer le plugin ("Java Visualizer" etc. est pratique). Si vous installez le plug-in, vous devez redémarrer IntelliJ.
SDK (Software Development Kit) est un outil de développement logiciel nécessaire au développement logiciel. Le SDK pour Java s'appelle JDK (Java Development Kit), qui est déjà installé dans le système d'exploitation, il est donc utile lors du développement sur le terminal, mais IntelliJ doit également le savoir, c'est-à-dire le transmettre par le chemin. il y a.
Définissez le SDK (Kit de développement logiciel) à partir de "* Configurer-> Structure pour les nouveaux projets *". Vous pouvez le faire en suivant ce document.
Vous pouvez développer un programme de base avec les paramètres ci-dessus, mais lorsque vous utilisez une bibliothèque externe comme celle-ci, vous devez le définir. IntelliJ est un IDE qui compile et s'exécute dans celui-ci, il est donc nécessaire de définir à l'avance quelque chose comme la spécification du chemin de classe lors de la compilation et de l'exécution dans le terminal. Prenant cet OpenCV comme exemple, le flux sera expliqué.
Sélectionnez "* Fichier-> Structure du projet " pour ouvrir la fenêtre et sélectionnez " Modules " dans l'onglet de gauche. Sélectionnez ensuite le champ " Dépendances ", sélectionnez " JARs ou répertoires *" à partir du bouton d'ajout (bouton + en bas à gauche), et ajoutez le fichier .jar dans l'OpenCV installé.
Dans mon cas, c'était à l'emplacement / usr / local / Cellar / opencv / 4.3.0_4 / share / java / opencv4 / opencv-430.jar
.
Sélectionnez ce fichier et il sera ajouté comme ceci
Ensuite, double-cliquez sur le champ du fichier jar ajouté pour ouvrir la fenêtre "* Configurer la bibliothèque de modules ". Depuis le bouton Ajouter en bas à gauche, cette fois, il se trouve dans le même répertoire que le fichier jar.
/usr/local/Cellar/opencv/4.3.0_4/share/java/opencv4/libopencv_java430.dylib
Sélectionnez le fichier.
Ensuite, une colonne appelée « Native Library Locations *» sera ajoutée comme indiqué dans l'image, et c'est la fin.
Si vous essayez d'exécuter le même fichier de test que ci-dessus et d'obtenir le résultat correct, vous l'avez défini correctement. Au fait,
static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
Si vous obtenez une erreur dans, cela signifie que "* Emplacements des bibliothèques natives *" n'a pas été défini correctement, cela signifie donc que les paramètres n'ont pas été définis correctement au stade de la deuxième photo.Pour cette procédure, je me suis référé à celle soigneusement écrite sur le site suivant. Certaines modifications peuvent être nécessaires selon la version d'OpenCV.
Recommended Posts