Używam OpenCV4Android w wersji 2.4.10 i testuję mój kod na Samsung Galayx GT-I9300. Problem polega na tym, że muszę pobrać Opencv Manager ze sklepu Play, aby mój kod opencv działał, w przeciwnym razie aplikacja się nie uruchomi. Odniosłem się do niektórych postów "jak pokazano tutaj How to integrate OpenCV Manager in Android App", aby wiedzieć, w jaki sposób mogę uruchomić kod opncv na Androidzie bez konieczności pobierania menedżera OpenCV , ale niestety aplikacja nie zaczyna się tak długo, jak OpenCV Manager nie jest zainstalowany.Jak uruchomić kod OpenCV bez OpenCv Manager
Próbowałem follwoing
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);
}
}
ale to nie rozwiązuje problemu. Proszę dać mi znać, jak uruchomić kod OpenCV na Androida bez pobierania Menedżera OpenCv?
Aktualizacja:
wykorzystanie initAsync:
to proszę podać przykład jak używać "initAsync()" w wersji produkcyjnej aplikacji? ponieważ próbowałem to zrobić, ale oczywiście nie mogę tego użyć w bloku statycznym, ponieważ sygnatura "intiAsync" jest następująca: "OpenCVLoader.initAsync (OpenCVLoader.OPENCV_VERSION_2_4_10, this, mLoaderCallback);" i nie mogę użyć „to” słowo kluczowe, ani odniesienia do zwrotnego „mLoaderCallback” wewnątrz statycznego bloku
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());
}
}
dzięki za odpowiedź i twój wysiłek ... po prostu myliłem się między wersją produkcyjną a wersją do debugowania !! ... w odniesieniu do tworzonej przeze mnie Aplikacji, która zawiera kod opencv, czy jest to wersja do debugowania lub wersja produkcyjna? proszę o poradę – user2121
Zmieniono ... @ user2121 – ZdaR
Bardzo dziękuję za szczegółową odpowiedź .. ale proszę o zachowanie mnie, nadal mam pytanie proszę ... jak wspomniałeś w swojej zaktualizowanej odpowiedzi - "Dlatego zaleca się załadowanie OpenCV w tle, który można osiągnąć za pomocą initAsync() "- dlaczego więc nie używać zawsze" initAsync() "zamiast" initDebug() "? – user2121