2012-05-03 10 views
5

Estoy usando la biblioteca JavaCV con librerías OpenCV pre-compiladas para Android. Creo que configuré Eclipse de la manera correcta, porque incluí los archivos jar javacv.jar y javacpp.jar. Además, java-cv-android-arm.jar, en mi proyecto. Todo compila bien, sin errores, advertencia, cualquier cosa que debe ser sospechosa de algo que irá mal en el tiempo de ejecución. Pero consigo excepción NoClassDefFoundError que se produce en este cuerpo método siguiente:Android JavaCV dilema, NoClassDefFoundError lanzado dentro del método 'dibujar' cuando se crea IplImage

@Override 
    public void draw(Canvas canvas) 
    { 
    try 
    { 
     canvas.drawColor(Color.BLUE); 
     if (current != null) 
     { 
     int width = current.getWidth(); 
     int height = current.getHeight(); 
     IplImage i = IplImage.create(width, height, IPL_DEPTH_8U, 1); // I assume here is where the exception gets thrown 
     ByteBuffer buffer = i.getByteBuffer(); 
     current.copyPixelsToBuffer(buffer); 
     // We need a grayscale image in order to do the recognition, so 
     // we 
     // create a new image of the same size as the original one. 
     IplImage grayImage = IplImage.create(i.width(), i.height(), 
      IPL_DEPTH_8U, 1); 
     // We convert the original image to grayscale. 
     cvCvtColor(i, grayImage, CV_BGR2GRAY); 
     CvMemStorage storage = CvMemStorage.create(); 
     // We instantiate a classifier cascade to be used for detection, 
     // using the cascade definition. 
     CvHaarClassifierCascade cascade = new CvHaarClassifierCascade(
      cvLoad("haarcascade_frontalface_alt.xml")); 
     // We detect the faces. 
     CvSeq faces = cvHaarDetectObjects(grayImage, cascade, storage, 
      1.1, 1, 0); 
     // We iterate over the discovered faces and draw yellow 
     // rectangles around them. 
     for (int index = 0; index < faces.total(); index++) 
     { 
      CvRect r = new CvRect(cvGetSeqElem(faces, index)); 
      cvRectangle(i, cvPoint(r.x(), r.y()), 
       cvPoint(r.x() + r.width(), r.y() + r.height()), 
       opencv_core.CvScalar.YELLOW, 1, CV_AA, 0); 
     } 
     Bitmap b = BitmapFactory.decodeByteArray(i.getByteBuffer() 
      .array(), 0, i.getByteBuffer().array().length); 
     canvas.drawBitmap(b, x, y, paint); 
     canvas.drawText(new Date().toLocaleString(), canvas.getWidth() - 100, 
      canvas.getHeight() - 50, paint); 
     paint.setColor(Color.GREEN); 
     } 
    } catch (Exception e) 
    { 
     canvas.drawColor(Color.RED); 

     canvas.drawText(
      "Handled exception occurred in panel:\n" + e.getMessage(), 
      250, 250, paint); 
     paint.setColor(Color.GREEN); 
    } 
    super.draw(canvas); 
    } 

Y, por supuesto, inmediatamente después se produce la excepción, mis accidentes Android, y me fuerzo a cerrar la aplicación. ¿Incluí los frascos y necesité las bibliotecas correctamente? ¿Hay algo de lo que deba ser consciente? Cualquier ayuda sería muy apreciada.

Aquí es el LogCat para los amantes de los gatos (inserción emoticono aquí):

05-03 19:07:53.217: E/AndroidRuntime(741): FATAL EXCEPTION: main 
05-03 19:07:53.217: E/AndroidRuntime(741): java.lang.NoClassDefFoundError: com.googlecode.javacv.cpp.opencv_core$IplImage 
05-03 19:07:53.217: E/AndroidRuntime(741): at home.security.DrawingPanel.draw(DrawingPanel.java:81) 
05-03 19:07:53.217: E/AndroidRuntime(741): at home.security.Main$2.run(Main.java:105) 
05-03 19:07:53.217: E/AndroidRuntime(741): at android.os.Handler.handleCallback(Handler.java:587) 
05-03 19:07:53.217: E/AndroidRuntime(741): at android.os.Handler.dispatchMessage(Handler.java:92) 
05-03 19:07:53.217: E/AndroidRuntime(741): at android.os.Looper.loop(Looper.java:123) 
05-03 19:07:53.217: E/AndroidRuntime(741): at android.app.ActivityThread.main(ActivityThread.java:3683) 
05-03 19:07:53.217: E/AndroidRuntime(741): at java.lang.reflect.Method.invokeNative(Native Method) 
05-03 19:07:53.217: E/AndroidRuntime(741): at java.lang.reflect.Method.invoke(Method.java:507) 
05-03 19:07:53.217: E/AndroidRuntime(741): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-03 19:07:53.217: E/AndroidRuntime(741): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-03 19:07:53.217: E/AndroidRuntime(741): at dalvik.system.NativeStart.main(Native Method) 

estructura de carpetas 'libs carpeta de

enter image description here

+0

que tienen exactamente el mismo problema, pero no puedo resolverlo – A23149577

Respuesta

5

Los frascos deben estar en la carpeta project-root/libs o marcarlos como exportados en la ruta de compilación del proyecto ct ...

ahora debería funcionar ...

+0

creo que podría haber hecho eso. Pero entonces no estoy seguro. Puede editar su respuesta para mostrarme los pasos para hacer eso. Estoy usando eclipse, pero soy nuevo para eclipsar. –

+0

gracias me di cuenta de que agregué los frascos pero olvidé exportarlos. –

+0

Tengo exactamente el mismo problema, pero no puedo resolverlo, incluso si agrego archivos jar en la carpeta ** libs ** de mi proyecto y también los agrego en la ruta de compilación java en las propiedades del proyecto. ¿Cualquier pista? – A23149577

Cuestiones relacionadas