|
Mostrar Mensajes
|
Páginas: [1] 2 3
|
1
|
Programación / Java / Re: OpenCv + Android + Problemas con Matrices
|
en: 6 Abril 2022, 16:05 pm
|
Hola,
estás obteniendo el error Number of input channels should be multiple of 3 but got 1 in function. Revisa la parametrización ya que el nº de canales ha de ser múltiplo de 3 y tu le pastaste 1, no sé si eso te dice algo..
Saludos.
Muchas gracias por tu respuesta kub0x!, más exactamente tenía que ser 3, el problema era que al realizar las operaciones para eliminar el fondo de la imagen, etc, la matriz del color había quedado como un solo dígito por posición, en vez de un escalar estilo RGB que sería un vector con 3 dígitos! Hemos conseguido encontrar una corrección y aparentemente todo funcionará perfectamente en Android. Por si a alguien le interesa la corrección que hemos encontrado es usando Mat image = fgMask.clone(); Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2RGB, 3); image.convertTo(image,CV32FC1); Mat blob = blobFromImage(image,1 ,new Size(250,250)); clasificador.setInput(blob);
Donde el último parámetro de la función cvtColor indica el numero de canales para expresar el color, no alterara absolutamente nada puesto que la única diferencia es que el blanco y negro en vez de ser expresados por 0 o 1 será expresado como RGB
|
|
|
2
|
Programación / Java / OpenCv + Android + Problemas con Matrices
|
en: 6 Abril 2022, 01:25 am
|
Buenas foreros! Como habréis podido leer en el título este es un asunto relacionado con programación en Java para una app Android usando la librería openCV. En resumidas cuentas el programa carga una red neuronal que ya hemos entrenado con una batería de imágenes. El programa original, por comodidad y por poca experiencia lo codificamos en Java pensando que como Android y Java van bastante de la mano no habría una dificultad grande a la hora de traducirlo para una app, bien el problema parte a la hora de proporcionarle la entrada a la red neuronal. Mat frame = new Mat(); // Matriz de OpenCv Mat fgMask = new Mat(); MatOfByte mem = new MatOfByte(); BackgroundSubtractor backSub; backSub = Video.createBackgroundSubtractorKNN(5, 0, false); VideoCapture capture = new VideoCapture(0); // Captura camara por defecto if (!capture.isOpened()) { } while (true) { capture.read(frame); if (frame.empty()) { break; } Imgproc.cvtColor(frame, frame, Imgproc.COLOR_BGR2GRAY, 0);//Imagen a Escala de grises Imgproc.GaussianBlur(frame, frame, new Size(15, 15), 0); //Aplicamos un Suavizado backSub.apply(frame, fgMask); //Eliminamos fondo de frame y guardamos en fgMask Imgproc.resize(fgMask, fgMask, new Size(250, 250)); //redimensionamos // Aquí es donde hicimos el apaño para java, que no puede funcionar en Android // Puesto que BufferedImage e Image no existen en las librerias para Android Mat image= new Mat(); Imgcodecs.imencode(".jpg", fgMask, mem); try { image = BufferedImage2Mat(buff); Logger.getLogger(VideoCaptureejemplo.class.getName()).log(Level.SEVERE, null, ex); } Mat blob = blobFromImage(image,1 ,new Size(250,250)); clasificador.setInput(blob); Mat res = clasificador.forward(); System. out. println(res. dump()); } } ImageIO.write(image, "jpg", byteArrayOutputStream); byteArrayOutputStream.flush(); return Imgcodecs.imdecode(new MatOfByte(byteArrayOutputStream.toByteArray()), CV_32FC1); }
Testeando y probando he llegado a la conclusión que a pesar de que la función BlobFromImage solicita una Matriz como primer parametro esta debe de estar construida de una forma un poco más especial, si yo trato de enviar una Matriz como fgMask en vez de una BufferedImage lanzará un error: Contenido de fgMask: Mat [ 1*1*250*250*CV_32FC1, isCont=true, isSubmat=false, nativeObj=0x1fb55df0, dataAddr=0x23991140 ]Contenido de fgMask(BufferedImage): Mat [ 1*3*250*250*CV_32FC1, isCont=true, isSubmat=false, nativeObj=0x1f59f110, dataAddr=0x21d63c00 ]Código del Error: [ERROR:0] global C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\dnn\src\dnn.cpp (3512) cv::dnn::dnn4_v20210608::Net::Impl::getLayerShapesRecursively OPENCV/DNN: [Convolution]:(sequential/conv2d/Conv2D): getMemoryShapes() throws exception. inputs=1 outputs=0/1 blobs=2 [ERROR:0] global C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\dnn\src\dnn.cpp (3515) cv::dnn::dnn4_v20210608::Net::Impl::getLayerShapesRecursively input[0] = [ 1 1 250 250 ] [ERROR:0] global C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\dnn\src\dnn.cpp (3523) cv::dnn::dnn4_v20210608::Net::Impl::getLayerShapesRecursively blobs[0] = CV_32FC1 [ 16 3 3 3 ] [ERROR:0] global C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\dnn\src\dnn.cpp (3523) cv::dnn::dnn4_v20210608::Net::Impl::getLayerShapesRecursively blobs[1] = CV_32FC1 [ 16 1 ] [ERROR:0] global C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\dnn\src\dnn.cpp (3525) cv::dnn::dnn4_v20210608::Net::Impl::getLayerShapesRecursively Exception message: OpenCV(4.5.3) C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\dnn\src\layers\convolution_layer.cpp:386: error: (-2:Unspecified error) Number of input channels should be multiple of 3 but got 1 in function 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes'
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.5.3) C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\dnn\src\layers\convolution_layer.cpp:386: error: (-2:Unspecified error) Number of input channels should be multiple of 3 but got 1 in function 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes' ] at org.opencv.dnn.Net.forward_1(Native Method) at org.opencv.dnn.Net.forward(Net.java:237) ¿Alguien sabe como cambiar o qué significa el segundo digito en la información de las matrices que he puesto arriba? No sé pero siento que de modificar ese caracter sin recurrir a la chapuza de BufferedImage se podría solucionar todo fácilmente.
|
|
|
4
|
Informática / Hardware / Re: El famoso Black screen de las gpu amd
|
en: 28 Agosto 2020, 13:58 pm
|
Perfecto, voy a probar y te cuento
Acabo de instalar la 20.4.2 borrando previamente los drivers con DDU. En primera instancia parecía todo correcto,pero no era así, los black-screen volvieron para amargarme la vida Toqueteando la configuración he descubierto que desactivando el freeSync y poniendo el modo de escalado a "panel completo" se ha solucionado,al menos de momento, no se hasta que punto me tendría que preocupar por si se pudiese tratar del algún fallo del Hardware como tal. ¿Alguna opinión? MOD: No hacer doble post. Usa el boton modificar.
|
|
|
5
|
Informática / Hardware / Re: El famoso Black screen de las gpu amd
|
en: 28 Agosto 2020, 13:29 pm
|
En teoría deberia ser compatible, al menos cuando busco los drivers en la página de amd para la gpu en concreto aparecen los adrenaline, no obstante cuando los instalo aparecen las ! de requisitos minimos.
He leido en muchos sitios y a bastante gente se le solucionaba usando DDU para borrar los drivers y reinstalando.
¿Por casualidad tu cuando actualizaste lo usaste?
|
|
|
6
|
Informática / Hardware / El famoso Black screen de las gpu amd
|
en: 28 Agosto 2020, 04:23 am
|
Hola foreros!
Vengo por aquí buscando un poco de ayuda con este asunto que ya me está volviendo loco.
Resulta que hace relativamente poco, decidí cambiar la GPU de mi sistema, y la actualice a una amd r9 290, todo parecía ir de lujo, pero cuando decidí activar la opción de ocultar la barra de tareas automáticamente empecé a ver la cantidad de fallos que tenia amd con el tema de drivers...
Parece ser que con la mayoría de drivers que han sacado la gran mayor parte de juegos no se pueden jugar en pantalla completa, pero de alguna forma, si estos se ejecutan en modo ventana, funcionan a la perfección, tres cuartos de lo mismo pasa con el tema de la barra de tareas, si está oculta y entro a intentar personalizar el tema del escritorio o a la configuración de pantalla, si tengo la ventana ampliada PUM! pantallazo negro, sino, funciona a la perfección, he estado trasteando con drivers y resulta que la versión 15.7.1 todo funciona como debería, pero es una versión demasiado obsoleta.
Supongo que tiene que ser algún problema con el escalado de la pantalla, pero no tengo ni idea si puede ser configurable o corregido este problema manualmente, alguna idea?
|
|
|
10
|
Programación / Programación C/C++ / Re: Programar. Modulo en code blocks.
|
en: 15 Septiembre 2018, 23:50 pm
|
Para ser claro y conciso, si te da error , poco tiene que ver con el modulo ya que este se ejecuta con %.. si posteas el código completo y explicas donde o que es lo que te da error quizás te podamos ayudar. ahh y por favor si vas a postear el codigo haz uso de las etiquetas para insertar codigo es un # justo arriba de los iconos
|
|
|
|
|
|
|