J'utilise OpenCV4Android version 2.4.10 et je teste mon code sur le Samsung Galayx GT-I9300. le problème que j’ai, c’est que je dois télécharger Opencv Manager à partir du Play Store pour que mon code opencv fonctionne, sinon l’application ne pourrait pas démarrer . Je me suis référé à certains postes "comme indiqué ici Comment intégrer OpenCV Manager dans Android App "pour savoir comment puis-je exécuter le code opncv sur Android sans avoir à télécharger OpenCV manager Malheureusement, l'application ne démarre pas tant que OpenCV Manager n'est pas installé.
j'ai essayé le suivant
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
...
...
...
@Override
public void onResume() {
super.onResume();
Log.w(TAG, "onResume");
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10, getActivity(), mLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
mais cela ne résout pas le problème ..___ S'il vous plaît, laissez-moi savoir comment exécuter du code Opencv sur Android sans télécharger Opencv Manager?
Mettre à jour:
utilisation de initAsync:
souhaitez-vous s'il vous plaît fournir un exemple comment utiliser "initAsync ()" dans la version de production de l'application? parce que j'ai essayé de le faire, mais bien sûr, je ne peux pas l'utiliser dans le bloc statique car la signature de "intiAsync" est la suivante "OpenCVLoader.initAsync (OpenCVLoader.OPENCV_VERSION_2_4_10, this, mLoaderCallback);" et je ne peux pas utiliser "ce" mot-clé ni une référence au rappel "mLoaderCallback" à l'intérieur du bloc statique
public class MainActivity extends AppCompatActivity {
static {
//OpenCVLoader.initDebug();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10, this, mLoaderCallback); //this keyword and "mLoaderCallback" are not defined in this scope
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i("MainActivity", "OpenCV loaded successfully");
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Mat m = new Mat(100, 100, CvType.CV_8UC4);
Log.d("MainActivity", "m.width()" + m.width());
Log.d("MainActivity", "m.height()" + m.height());
}
}
Comme vous voulez une procédure étape par étape, je commencerais donc par créer un projet SampleOpenCV
à partir de rien et suggérerais également de suivre les étapes suivantes dans un nouveau projet. Une fois que cela fonctionne, vous pouvez essayer de migrer les modifications vers votre projet principal.
SampleOpenCV
dans Android Studio, puis Fichier -> Nouveau -> Module d'importation, ce qui ouvrirait une nouvelle fenêtre pour entrer le chemin du module, sélectionnez {unzipped_opencv}/sdk/Java
, cela créerait un répertoire OpenCVLibrary310
sous SampleOpenCV
.SampleOpenCV/OpenCVLibrary310/build.gradle
et copiez les champs suivants à partir de SampleOpenCV/app/build.gradle
: .____.SampleOpenCV
et cliquez sur Paramètres du module ouvert, cherchez Modules >> app
et sélectionnez DépendancesCliquez sur le signe + en haut à droite dans la fenêtre contextuelle, puis sélectionnez 3 dépendance du module. Maintenant, choisissez OpencvLibrary310
. Fermez la fenêtre et laissez le gradle se synchroniser.
Copiez le dossier libs {unzipped_opencv}/sdk/native/libs dans Android Studio sous app/src/main et renommez-le en jniLibs
(Remarquez le cas ici).
public class MainActivity extends AppCompatActivity {
static {
OpenCVLoader.initDebug();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Mat m = new Mat(100, 100, CvType.CV_8UC4);
}
}
NOTE: OpenCVLoader.initDebug()
doit être utilisé à des fins de débogage uniquement lorsque vous développez localement sur votre ordinateur. Mais pour les besoins de la production où vous devez publier l'application sur Play Store, etc., vous devez utiliser OpenCVLoader.initAsync()
. L'initialisation d'OpenCVLoader prend un certain temps en fonction du téléphone. Donc, si vous le chargez avec initDebug()
, il sera exécuté dans le thread principal, ce qui bloquera l’UI pendant une fraction de temps. Il est donc conseillé de charger l’OpenCV en arrière-plan, ce qui peut être obtenu avec initAsync()
Partager à vous de mon chemin.
-
def opencvsdk = '<path_to_opencv_Android_sdk_rootdir>'
include ':opencv'
project(':opencv').projectDir = new File(opencvsdk + '/sdk')
Exemple avec mon fichier settings.gradle
include ':app'
def opencvsdk = '/Volumes/Data/Projects/machine-learning/OpenCV-Android-sdk'
include ':opencv'
project(':opencv').projectDir = new File(opencvsdk + '/sdk')
-
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
....
implementation project(':opencv')
}
-
import Android.graphics.Bitmap;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.widget.ImageView;
import org.opencv.Android.OpenCVLoader;
import org.opencv.Android.Utils;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
import Java.io.IOException;
public class MainActivity extends AppCompatActivity {
static {
OpenCVLoader.initDebug();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = findViewById(R.id.activity_main_iv_result);
try {
Mat img = Utils.loadResource(this, R.drawable.eye);
Mat gryimg = new Mat(img.size(),CvType.CV_8U);
Imgproc.cvtColor(img, gryimg, Imgproc.COLOR_RGB2GRAY);
Bitmap bm = Bitmap.createBitmap(gryimg.cols(), gryimg.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(gryimg, bm);
imageView.setImageBitmap(bm);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Testé avec opencv-3.4.1-Android-sdk et Android Studio 3.1.3
Nous avons un moyen d'intégrer SDK à votre projet. Vous devriez lire /sdk/build.gradle pour avoir plus d'options
La manière correcte de charger la bibliothèque native est la suivante:
System.loadLibrary("opencv_Java3");