Tag Archive for 'programacion'

Solución para: “Debugger detected! Please close it down and restart!”

Hoy parece un día malo, primero el Visual Studio y ahora esto:

Debugger detected! Please close it down and restart!
Windows NT user: Please note that having the WinICE/SoftICE services installed means that you are running a debugger!

Debugger detected! Please close it down and restart! Windows NT user: Please note that having the WinICE/SoftICE services installed means that you are running a debugger!

Algunos dicen que hay que eliminar el Nero, pero yo no tengo Nero. El responsable sin embargo parece ser la compañia detrás de Nero. Este diálogo proviene de NeVideo.ax. Es un filtro de DirectShow. Te toparás con este error si estas haciendo procesamiento de video, usando librerias de DirectShow, OpenCV o algo similar.

Solución

Elimina ese archivo NeVideo.ax. En mi caso lo encontré en
C:\Archivos de programa\Archivos comunes\Ahead\DSFilter\NeVideo.ax

Si no tienes ese archivo tal vez sea uno nuevo de Nero o de alguna otra inteligente compañia que le gusta atormentar a los desarrolladores. La solucion en ese caso es darle “Aceptar” al diálogo y buscar entre los Resultados (Output) de Visual Studio algun mensaje que tenga que ver con archivos .ax raros.

Solución para la “System.DllNotFoundException”

Ok, estabas trabajando felizmente en tu nueva aplicación, que por cierto usa Visual Basic 2005 (VB.NET) para cargar una DLL de C++. Entonces decides formatear tu PC, o bien cambiarte a trabajar a otra PC. Y resulta que tu programa se la pasa maldiciéndote con:

ERROR:System.DllNotFoundException: Unable to load DLL ‘cualquier.dll’:
No se pudo iniciar la aplicación porque su configuración es incorrecta.
Reinstalar la aplicación puede solucionar el problema.

¿Que hiciste?
Te aseguraste de que los PATH esten correctos, de que las DLL fueran encontradas, incluso le pediste ayuda a Filemon y te dice que no puede encontrar algo relacionado a MSVCRT80.DLL y otras bazofias.

Fuiste un desesperado y hasta llegaste a ser capaz incluso de arrojar todas las DLL’s en el mismo directorio de la aplicación pero a pesar que eso soluciona este problema la mayoria de la veces, esta vez nada parece funcionar.

La solución

Instala el “Microsoft Visual C++ 2005 Redistributable Package“, tal vez necesites la version SP1 o la version anterior.

Se supone que Visual Studio debió haberlo instalado, pero si eres de los trompetes que les gusta usarlo en español a esto es a lo que te expones. Ya ves aprende inglés.

Ahh y mas te vale que lo metas junto con tu aplicación o los dolores de cabeza los vas a trasladar a los usuarios.

Solución: Visual Studio XML Editor Package

El Problema

Un dia de repente tu Visual Studio al entrar te dice:

Package Load Failure
Package ‘Visual Studio XML Editor Package’ has failed to load properly ( GUID = {87569308-4813-40A0-9CD0-D7A30838CA3F} ). Please contact package vendor for assistance. Application restart is recommended, due to possible environment corruption. Would you like to disable loading this package in the future? You may use ‘devenv /resetskippkgs’ to re-enable package loading.

(Perooo que!!???)

Luego de eso se niega a abrirl proyectos de Visual Basic y cualquier cosa que tenga que ver directa o indirectamente con XML.

¿Que hiciste?:

Intentaste lo siguiente:

  • Meter el DVD/CD de Visual Studio, reinstalar. De nada sirve.
  • Meter el DVD/CD De Sisual Studio, reparar pero se queda pidiendote un tal netfx2.msi que por ningun lado existe.
  • Desinstalar el Net FrameWork 1.1 y reinstalar Visual Studio. De nada sirve.
  • Intentar reinstalar Net Framework 2.0 y reinstar Visual Studio. De nada sirve.

La Solución:

Usa el dotnetfx_cleanup_tool para limpiar la maquina de todos los Net Frameworks que tengas. Luego reinstala la version 2.0, reinicia y asunto arreglado. No necesitas reinstalar Visual Studio.

El problema es que el Framework 1.1 y el 2.0 no se llevan bien juntos, a veces el 1.1 gana y sobreescribe el 2.0 con cosas viejas. Por eso el Visual Studio no encuentra el paquete editor de XML.

Por otro lado, la razon por la cual te pide ese susodicho netfx2.msi que no existe es porque usaste una version de windows como la Windows Unattended o cosas asi que empaquetan el .Net y todos los parches de jalón.

Esto no esta aquí por que porque necesito tenerlo en algun lugar donde no se me olvide. Adios.

¿Quien es el culpable el Thread o cvCam?

Estoy implementando una DLL para el asunto de mi tesis, eso de reconocer los gestos de manera monocular. Para ello necesito que mi programa sea una DLL que va a cargarse en otro programa al cual no tengo ningun acceso (uhm Closed Source, si!, maldicion!). Bueno, ya logré que se cargue, estuve analizando la DLL antigua y logré que mi DLL embonara en lo que el programito me pide.

Basicamente mi DLL debe exportar una única función importante la cual entrega coordenadas 3D. La primera vez que es llamada debe inicializarse sola y comenzar el rastreo. El modo de funcionamiento es el siguiente:

  1. (*) Aplicación pide coordenadas
  2. DLL debe:
    1. Si es primera vez. Responde (0,0,0) y lanza Thread par comenzar rastreo.
    2. Si no es primera vez. Responde con (x,y,z). El thread debería tenerlas ya detectadas.
    3. Avisar al thread cuando debe morirse.
  3. Ir a: (*)

El trabajo del Thread es el siguiente:

  1. Abrir cámara con resolución correcta (o morirse diciendo que no hay cámaras).
  2. Para cada FRAME capturado:
    1. Detectar objeto y obtener sus coordenadas.
    2. Actualizar variable global: coord = (x,y,z).  (global solo en la DLL)
  3. En caso  de aviso de muerte:
    1. Cerrar cámara correctamente
    2. Morirs y liberar recursos

Parece  muy fácil. Aja!, tengo varios dias atorado en la manera de anunciar al Thread que ya debe morirse. No se si sea OpenCV el que no cierra la cámara o el Thread que no se muere. Ya me estoy hartando, y lo malo es que estaba acostumbrado a que en Linux y OSS en general hay forums de IRC donde ayudan, pero busqué en freenet y no encontré nada decente para ambientes de Microsoft. Continue reading ‘¿Quien es el culpable el Thread o cvCam?’

Reflasheando la ATI 9800pro

Resulta que compre en mercadolibre 3 tarjetas de video, AGP todas:

  • eVGA Nvidia 6800 Ultra Extreme
  • MSI Nvidia 5700
  • OEM ATI Radeon 9800pro

No discutiré la enorme suma de dinero que pagué. Entonces a mi la que me interesaba era obvio la 6800 Ultra Extreme debido a que rivaliza en desempeño con las 7800 GT. Pero como mi PC no tiene ranura PCI-x, ps tenia que comprar AGP.

Entonces puse a la venta la 5700 y la ATI 9800pro, pero no me tome la molestia de probarlas a fondo primero. Ya sabia que la 5700 funcionaba cuando queria, pero creí que la 9800 pro si funcionaba bien.

Se concreta la venta de Mercadolibre, y entrego las tarjetas. Al dia siguiente me llama el monito que me las compró y dice que la ATI Radeon 9800 pro nomas no jalaba bien, que tenia “artifacts” que son pues basura en la pantalla y que nomas ni pa’delante ni pa’tras. Maldición, no me quise ver mala onda pues el tipo es de aqui de Puebla y ademas no fue grosero sino muy amable. Total que le devolví su lana y me devolvió las tarjetas.

Yo habia oido que una reflasheada puede arreglar problemas en las tarjetas de video. Pero nunca lo intenté, y como quería sacarle algo de lana a las tarjetas que compré pues me puse a investigar.

¿Como reflashear una ATI Radeon 9800 pro?

En primer paso hay que decidir si se quiere simplemente refrescar el firmware, o si se quiere “actualizar” o “desbloquear” la tarjeta para que se convierta mágicamente en una Radeon 9800 XT. Obvio que la XT es mejor. Pero a mi francamente me daba igual asi que lo que yo queria era nomas que funcionara como era debido y ya.

Entonces me puse a buscar, existen sitios con mucha información y otros con las utilerias necesarias. Peroyo no tenia un floppy, ¿a quien demonios se le ocurre que uno va a tener un floppy booteable de MSDOS?. La solución, un CD booteable personalizado, si te da weba bajarlo usa este que yo hice, es una ISO lista para quemar y solo mide 1.7 Megas.

Quema la iso y arranca, ahi tienes la utileria FLASHROM.EXE y un puño de firmwares para Radeon 9800 pro (*.BIN)  que puedes usar, no temas si usas uno incorrecto y tu tarjeta se muere por completo, simplemente reflashea con otro hasta que todo salga bien. Ahh olvide decir que para esto necesitas una tarjeta de video PCI de esas viejas, para que no tengas que usar tu tarjeta AGP mientras la estas reflasheando.

Mas fácil no se puede.

Detectando objetos de algun color

Hay que eliminar todo lo que no queremos, como otros objetos, y basura. Ademas se elimina el background y se quita el ruido.

Se usa el modelo de color HSV, y de el unicamente se usa el Hue pues es el que contiene la informacion de color. Se toma un Histograma como muestra del color y se procede a hacer una convolucion, opencv le llama “backproject” del histograma en la imagen completa. De ahi se obtiene un mapa de probilidades es cual es una imagen en escala de grises donde segun lo blanco de un pixel es la probabilidad que sea del color del histograma, mas blanco mas certero.

Entonces se procesa la imagen de probabilidades para encontrar formas, objetos y otras cosas, en principio se tiene un relajo, todo lleno de ruido.

proba_map.PNG

Se aplica umbralizacion para eliminar todos los pixeles debajo del umbral y si se quiere convertir a blanco todos los demas. Luego se hace deteccion de contorno en lo que queda.

proba_map_contornos.PNG

Ahora, podemos hacer ajuste de figuras geometricas y podemos descartar los que no ajusten bien y los que sean demasiado pequeños. Nos queda algo bastante bueno.

proba_map_ajuste_elipse.PNG

Como ven, en esta ultima ya no se tiene un mapa de pixeles de probabilidad, se tiene una elipse vectorial que se pinto directo sobre donde se predice que esta el circulo azul.

OpenCV y Visual Studio 2005

Para generar un proyecto de Visual Studio 2005 usando Visual C++ se requieren algunos ajustes tanto a Visual Studio como a Windows e incluso al mismo Proyecto.

Sorry por que algunas cosas estan en inglés, es que mi VS05 esta en inglés.
Tracker

El procedimiento para que compile

1. Crear un proyecto (o abrir uno que tengas)
2. En el “Solution Explorer” clic derecho en el proyecto (NO en la “Solución”)
3. Clic en “Properties”
4. Bajo “Configuration Properties”->”C/C++”->”General” Buscar
“Additional Include Directories”, Click ahi.
5. Luego en el botón de la derecha con “…”.
6. Vas a agregar nuevos directorios.
7. Dependiendo de lo que estes haciendo vas a ocupar alguno de estos o mas fácil ponlos todos al cabo no afecta:
“C:\Archivos de Programa\OpenCV\cv\include”
“C:\Archivos de Programa\OpenCV\cvaux\include”
“C:\Archivos de Programa\OpenCV\otherlibs\highgui”
“C:\Archivos de Programa\OpenCV\cvcore\include”

8. Click en “Ok/Aceptar” y ve a “Configuration Properties”->”Linker”->”General”
9. Click en “Additional Library Directories” y de nuevo en el botón con “…”.
10. Additional library directories:
“C:\Program Files\OpenCV\lib”
“C:\Program Files\OpenCV\bin”

11. Click “ok/aceptar” y vas ahora a “Configuration Properties”->”Linker”->”Input”.
12. Click en “Additional Dependencies” y en el botón “…”.
13. Agrega las librerías del proyecto. Las más comunes y básicas son:
cv.lib
cvcam.lib
highgui.lib
cxcore.lib
cvaux.lib
Nota: Si te fijas, todas las dependencias anteriores llevan comillas, pero estas últimas no llevan..
15. Recuerda poner #include “cv.h” y demas cosas en tu código cpp/c.

Ejecutar con OpenCV ya que has compilado

1. Click en el Menú Inicio, Clic derecho en Mi PC.
2. Click en “Propiedades”
3. Click en “Avanzado”
4. Click en “Variables de Entorno”. Modificar o agregar la variable de “PATH” y al principio de todo poner “C:\Program Files\OpenCV\bin;” (Ojo que lleva un punto y coma)
7. Click “Aceptar” y ya.
8. Necesitas cerrar Visual Studio y abrirlo de nuevo para que agarre la variable PATH.
9. Una forma de cerciorarte de que el PATH esta puesto es abrir una ventana de cmd.exe y escribir PATH y Enter, deberías ver entre las lineas la que acabas de meter.

Ahora puedes compilar y ejecutar proyectos que usan OpenCV en Visual Studio 2005.

Si no lo hiciste bien el Visual Studio se va a quejar que no encuentra archivos “.lib” al compilar y si logras compilar pero no agregas el PATH te va a decir que no encuentra las DLL.

Que lata!, pero asi es Windows. Si estas instrucciones no te funcionan, deberás reiniciar Windows 50 veces, instalar Norton, NOD, MCAffee, Kaspersky, Panda y ClamAV, todos juntos. Reinicias Windows otras 50 veces. Luego instalas AdAware y Spybot Seach&Destroy. Reincias 50 veces más. Instalas Firefox. Reinicias otras 50 veces. Instalas alguna otra herramienta nueva que exista y, ya sabes, reinicias otras 50 veces. Si al final de esto no aún funciona, deberás repetir el procedimiento pero antes formateas tu PC, reinstalas windows y, claro, reincias otras 50 veces. Si despues de esto no funciona entonces… no se, preguntale a alguien que sí sepa.

Ahh, por cierto, gracias a Alex por ponerme el procedimiento bien detallado.