[Jderobot-dev] Problemas con CameraServerAndroid
JoseMaria
josemaria.plaza en gmail.com
Jue Feb 28 08:48:54 CET 2013
Enhorabuena Oscar!,
mooola conectar un cameraView al servidor de imágenes corriendo en
android!. Si quieres súbelo al repositorio oficial como
android-cameraserver. Como no está orientado a pc, sino a android, no lo
integramos en la cadena de compilación habitual con sus cmakes
respectivos. Sube también al repo oficial las actualizaciones a
libcolorspaces.
Empezamos a tener una población de componentes Jderobot que corren en
android: mobileTeleoperator *1, Eldercare tiene alguno, Surveillance
también y más que están por venir. En arduino tenemos alguna cosita
también, dentro de Surveillance.
Buen trabajo,
JoseMaria
*1: igual conviene renombrar mobileTeleoperator a android-teleoperator y
cambiar teleoperatorPC a simplemente teleoperator, por tener más
coherencia de nombres.
On Wed, 2013-02-27 at 23:06 +0100, Oscar Garcia wrote:
> El 27/01/13 21:22, Oscar Garcia escribió:
> > Pero cuando intento conectar cameraview al servidor android me sale lo
> > siguiente:
> >
> > redstar en greystar:~/Descargas/jderobot/trunk/src/components/cameraview$
> > ./cameraview --Ice.Config=android.cfg
> > Loading glade
> > Invalid proxy
>
>
> ¡Conseguido! He encontrado el error. Me había empeñado en implementar
> ImageProviderI en vez de CameraI por lo que, como es lógico, el proxy no
> podía crearse para una clase diferente.
>
> Lo he descubierto con wireshark, pensé en ver el tráfico de red para ver
> en qué se diferenciaba un cameraserver en C++ con un cameraserver en
> Android y, sorpresa, wireshark soporta decodificar tráfico ICE (aunque
> no la carga o payload). Vi entonces que hacía un "Request
> cameraA.ice_isA()" con carga "::jderobot::Camera".
>
> Para asegurarme puse un Log.e(TAG, cameraA.ice_id()); para loguear en el
> logcat el valor de mi interfaz y, como era de esperar, salía:
>
> E/java.lang.Class(15211): ::jderobot::ImageProvider
>
> Ahora ya sale:
>
> E/java.lang.Class(12342): ::jderobot::Camera
>
> Hasta ayer no me di cuenta de este detalle (de la carga), así que ayer
> implementé la interfaz correcta y me empezó a dar otro problema la
> aplicación:
>
> En el PreviewCallback hacía la siguiente llamada para atender las
> peticiones "pendientes":
> while ((actual = CameraI._jobs.poll()) != null) {
> actual.execute();
> }
>
> Al ejecutar el código me salía:
>
> FATAL EXCEPTION: main
> android.os.NetworkOnMainThreadException
> at
> android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1108)
> at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:168)
> at libcore.io.IoBridge.sendto(IoBridge.java:490)
> at java.nio.SocketChannelImpl.writeImpl(SocketChannelImpl.java:369)
> at java.nio.SocketChannelImpl.write(SocketChannelImpl.java:327)
> at IceInternal.TcpTransceiver.write(TcpTransceiver.java:108)
> at Ice.ConnectionI.sendMessage(ConnectionI.java:2064)
> at Ice.ConnectionI.sendResponse(ConnectionI.java:801)
> at IceInternal.IncomingAsync.__response(IncomingAsync.java:133)
> at
> jderobot._AMD_ImageProvider_getImageData.ice_response(_AMD_ImageProvider_getImageData.java:46)
> at
> com.linaresdigital.android.androidcameraserver.CameraI$Job.execute(CameraI.java:108)
> at
> com.linaresdigital.android.androidcameraserver.MainActivity$2.onPreviewFrame(MainActivity.java:153)
> ... etc...
>
> Total, que busco por Internet y encuentro que el problema está en los
> "nuevos" Android. Con mi viejo Acer Liquid A1 y su Android 2.1 no me
> ocurría:
> http://developer.android.com/reference/android/os/StrictMode.html
>
> Lo soluciono sacando el envío de datos fuera del UI thread:
>
> new Thread(new Runnable() {
> public void run() {
> CameraI.Job actual;
> while ((actual = CameraI._jobs.poll()) !=
> null) {
> actual.execute();
> }
> }
> }).start();
>
>
> Listo, ya tengo el AndroidCameraServer enviando "basura" si le digo que
> envía RGB. Lo cambio a YUY2 y YCRCB y empieza a ser "algo" visible
> (mosaicos de colores, etc).
>
> Implemento en colorspaces el espacio de color NV21 que usa Android por
> defecto (mejor que consumir CPU y batería en el móvil y ancho de banda
> en la red WiFi convirtiendo el fotograma a RGB en el propio móvil).
>
> Primer intento: fallido. Trato de usar los conversores estándar de
> OpenCV CV_YUV420sp2RGB (casi, casi) y CV_YUV420RGB_NV21 que no está
> implementado en la versión de OpenCV de Ubuntu 12.04, por lo que decido
> implementar un conversor yo mismo (tras varias pruebas/error lo he
> conseguido).
>
> Subiré al svn, en cuanto limpie el código, todas las modificaciones (el
> componente androidcameraserver y la librería colorspaces actualizada).
>
> Ya podemos usar un móvil Android como cámara remota :)
>
> Un saludo a todos.
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
--
http://gsyc.es/jmplaza
Universidad Rey Juan Carlos
More information about the Jde-developers
mailing list