Determine las esquinas de una hoja de papel con iOS 5 AV Foundation y core-image en time real

Actualmente estoy construyendo un prototipo de aplicación de camera que debería reconocer hojas de papel sobre una table. La key sobre esto es que debería hacer el reconocimiento en time real, por lo que capturo el flujo de video de la camera, que en iOS 5 se puede hacer fácilmente con la fundación AV. Miré aquí y aquí

Están haciendo algún reconocimiento básico de objects allí.

Descubrí que usar la biblioteca OpenCV en este entorno en time real no funciona de forma eficaz.

Entonces, lo que necesito es un algorithm para determinar los bordes de una image sin OpenCV.

¿Alguien tiene algunos fragments de código de ejemplo que establecen cómo hacer esto o apuntarme en la dirección correcta.

Cualquier ayuda sería apreciada.

No podrá hacerlo con la implementación actual de Core Image en iOS, porque la detección de esquina requiere algunas operaciones que Core Image todavía no admite. Sin embargo, he estado desarrollando un marco de código abierto llamado GPUImage que tiene las capacidades requeridas.

Para encontrar las esquinas de un object, puede usar una implementación acelerada por GPU del algorithm de detección de esquinas de Harris que acabo de trabajar. Es posible que tenga que ajustar los umbrales, las sensibilidades y el tamaño de image de input para que funcione para su aplicación particular, pero puede devolver esquinas para trozos de papel que encuentre en una escena:

Esquinas de Harris

También encuentra otras esquinas en esa escena, por lo que puede necesitar utilizar una operación de umbral binary o algún procesamiento posterior para identificar qué esquinas pertenecen a un trozo de papel rectangular y cuáles a otros objects.

Describo el process mediante el cual funciona en Signal Processing , si estás interesado, pero para usar esto en tu aplicación, solo necesitas tomar la última versión de GPUImage de GitHub y hacer que el GPUImageHarrisCornerDetectionFilter sea el objective de una instancia de GPUImageVideoCamera. Luego solo tiene que agregar una callback para manejar la matriz de esquina que se le devuelve desde este filter.

En un iPhone 4, el process de detección de esquina corre a ~15-20 FPS en video de 640×480, pero mi rutina actual de tabulación en la esquina con límite de CPU lo ralentiza a ~ 10 FPS. Estoy trabajando en replace eso con una rutina basada en GPU que debería ser mucho más rápida. Un iPhone 4S actualmente maneja todo a 20-25 FPS, pero nuevamente podría mejorar significativamente la velocidad allí. Con suerte, eso calificaría como lo suficientemente cercano como para ser de time real para su aplicación.

Utilizo la librería GPUImage de Brad para hacer eso, el resultado es perfecto pero es suficiente.

Entre las esquinas de Harris detectadas, mi idea es seleccionar:

  • La mayoría en la esquina superior izquierda de la esquina superior izquierda de la hoja.
  • La mayoría en la esquina superior derecha de la esquina superior derecha de la hoja.
  • etc

@Mirco: ¿Has encontrado una mejor solución?

@Brad: en su captura de pantalla, ¿qué parameters utiliza el filter Harris para tener solo 5 esquinas detectadas? Tengo mucho más que eso …