Cómo construir un solucionador de ecuaciones de imagen en iOS

Esta es una gran tarea. La parte clave del problema es construir un árbol de sintaxis abstracta para la ecuación. Esto utiliza una estructura de árbol donde cada nodo es un operador, número o variable. Una vez que haya construido dicho árbol, puede aplicar varias reglas de álgebra para llegar a la respuesta.

Hay varios niveles de dificultad en la tarea. Lo más fácil serían los problemas de nivel escolar inferior cuando todas las ecuaciones aparecen en una sola línea. Algo como lo que es

2 \ veces 3 – 4?

Allí puede tomar la salida de un programa de texto OCR y alimentarlo a un analizador. Cuando permite subíndices y superíndices, las cosas se vuelven más difíciles, ya que necesita descubrir la disposición 2D de los símbolos. Agregar raíces y fracciones lo hace mucho más complicado.

Suponiendo que logra reconocer la entrada, hay muchas opciones. Existen muchos sistemas y bibliotecas de álgebra computacional diferentes que pueden hacer álgebra. Algunos le permiten vincular otros programas a ellos.

He trabajado en una biblioteca de análisis / evaluación matemática Jep (Java Expression Parser) que puede hacer álgebra limitada. Hay un Jep 2.4.1 de código abierto y versiones comerciales Jep 3.4 disponibles.

Vale la pena mirar el photomath https://photomath.net/en/faq/ y https://photomath.net/en/examples para ver el alcance de lo que puede hacer. Por ejemplo, no puede hacer frente a la escritura a mano y se limita principalmente a las matemáticas de la escuela intermedia.

Tal vez Tesseract pueda ayudar con el OCR – OCR para ecuaciones usando Tesseract para iOS – potencialmente con algún entrenamiento personalizado – Tesseract OCR no reconocerá el símbolo de división “÷”

Sin embargo, deberá escribir un código que convierta los símbolos reconocidos en un árbol de análisis / AST usted mismo; Tesseract no puede hacer esto. grupos de Google

En realidad, la mayoría de los sistemas de OCR que se especializan en fórmulas matemáticas son propietarios.

Si de alguna manera puede hacer esto, el resto es “fácil”: puede hacer que SymPy (un paquete matemático simbólico) funcione en dispositivos móviles (SymPy para teléfonos inteligentes y tabletas), así que simplemente convierta el AST a código Python y muestre la salida a el usuario (incluso puede generar LaTeX, por lo que esto debería ser fácil y bonito).

El único problema en lo anterior podría ser la política de Apple sobre la generación de código en aplicaciones.

Si está haciendo esto para uso personal, puede usar Wolfram Alpha API para resolver sus DiffEQ. Sin embargo, esto requeriría acceso a internet. También puede considerar implementar sus propios métodos, numérica o simbólicamente.

En cuanto al reconocimiento de texto, puede buscar bibliotecas de reconocimiento óptico de caracteres (OCR). Se supone que Tesseract es bueno, aunque no lo he usado.