Tesseract-OCR 3.02 con libc ++

Xcode 4.6, iOS SDK 6.1, tesseract-ocr 3.02

Dado que las últimas versiones de OpenCV se construyen con libc ++ y tesseract-ocr está construido con libstdc ++ , no se pueden usar juntas en un proyecto xcode.
Entonces, estoy tratando de build tesseract usando libc ++. Usando el script aquí (actualizando el sdk base y desplegando el objective a 6.1), tesseract se está construyendo muy bien y funciona en mi proyecto xcode una vez que la biblioteca estándar de C ++ se establece en el valor pnetworkingeterminado del comstackdor. Entonces, intenté alterar el script para comstackrlo con libc ++, de acuerdo con la respuesta aquí . Cambié CXX para apuntar a Clang ++ , y agregué -stdlib = libc ++ a CXXFLAGS .
El resultado es que el script tiene éxito y las bibliotecas están construidas, pero al elegir libc ++ como la biblioteca estándar de C ++ en xcode, estoy recibiendo muchos errores de linker y falla la construcción del proyecto. Las nuevas bibliotecas siguen funcionando cuando la biblioteca estándar está establecida en el valor pnetworkingeterminado del comstackdor (al igual que cuando se creó con regularidad).

¿Qué me estoy perdiendo?

Ok, entonces mi problema fue que después de agregar y eliminar references a las bibliotecas algunas veces en mi proyecto, tuve un desastre en mis Rutas de búsqueda de biblioteca. Además, no agregué la nueva carpeta "include" (creada al crear tesseract) en las Rutas de búsqueda del encabezado de usuario.

Entonces, solo un resumen rápido, para build tesseract-ocr usando libc ++, para que funcione junto con versiones más nuevas de OpenCV:

  • Descargar leptonica-1.69
  • Descargar tesseract 3.02
  • Organícelos en la estructura de carpetas explicada en el tutorial original aquí.
  • Descargue este script a la misma carpeta.
  • Edite el script para su IOS_BASE_SDK y IOS_DEPLOY_TGT relevantes.
  • Edite CXX para usar clang ++: CXX = "/ usr / bin / clang ++"
  • Edite CXXFLAGS para usar libc ++ como biblioteca estándar: CXXFLAGS = "$ CFLAGS -stdlib = libc ++"
  • Usa el script y construye tesseract y leptonica.
  • Agregue estas bibliotecas a su proyecto xcode, cambie la configuration "C ++ Standard Library" a libc ++.
  • Asegúrese de que la configuration de "Rutas de búsqueda de la biblioteca" no apunte a ninguna biblioteca de tesseract anterior.
  • Asegúrese de que la configuration de "Encabezados de búsqueda de usuarios" apunta a la nueva carpeta "include" creada cuando creó las nuevas libs.
  • Ahora, cuando intentes build tu proyecto, tendrás algunos files de encabezado faltantes. Solo cópielos de la antigua carpeta "include" de tesseract y leptonica.

Eso es. En este punto, tendrá un proyecto capaz de usar ambas nuevas versiones de OpenCV Y tesseract 3.02 juntas. Si se trata de un proyecto nuevo, no olvide editar su file de prefijo en consecuencia para include OpenCV y Tesseract en caso de __cplusplus, y cambie el nombre de cualquier file .m que los use a .mm

Muchas gracias a esta respuesta, eso me puso en path.

Tsseract-OCR-iOS se ha actualizado para manejar este problema (trabajando en el mismo proyecto que un proyecto comstackdo de libc ++, por ejemplo, OpenCV). No olvide estos pasos al instalarlo:

Si está utilizando iOS7 o superior, vincule la biblioteca libstdc ++. 6.0.9.dylib (Su objective => General => Marcos y bibliotecas vinculados => + => libstdc ++. 6.0.9)

Vaya a su proyecto, click el proyecto y en la pestaña Configuración de compilation, agregue -lstdc ++ a todas las teclas "Otros indicadores de enlaces".

* Vaya a la configuration de su proyecto y asegúrese de que C ++ Standard Library => Compiler Default. (gracias a https://github.com/trein )

Copie e importe la carpeta tessdata del Proyecto de marco de plantilla en la raíz de su proyecto. Contiene los files "tessdata". Puede agregar más files de tessdata para copyrlos aquí.

* Tuve que configurar la biblioteca estándar de C ++ en "libc ++" para que comstackra OpenCV.