preloader
inteligencia artificial

Inteligencia Ártificial

Actualmente hemos abierto una linea de trabajo dentro de Sinergia Microsistemas en torno al uso y explotación de la IA en entornos de negocios e industriales.

Estamos usando OPENCV en conjunción con Tensorflow y Python para "Limpiar" documentos antes de su tratamiento por los lectores OCR y posterior traslado a las diferentes bases de datos o sistemas.

Estamos desarrollando sistemas industriales de reconocimiento de presencia humana, así como las posibles circunstancias que pueden llevar al sistema a pensar que alguna persona necesita asistencia.
También estamos creando un software que usa las técnicas y dispositivos de realidad aumentada, que se conecta con nuestros sistemas de gestión documental y de inteligencia de negocio basados principalmente en nuestro sistema SIMAN

Así mismo, también hemos construido un sistema propio que denominamos "Procedimiento de anális estadistíco inteligente" que automatiza la toma de decisiones en relación a los datos que son tratados mediante RPA y su fiabilidad para incorporar si el sistema lo estima a una persona.

A continuación se hace una breve descripción de este sistema que está siendo implementado en los procesos de uno de nuestros clientes.

Modelo de inteligencia artificial basado en la estadística

Al realizar un reconocimiento OCR de un documento, no se puede saber a priori si la lectura obtenida es correcta o es incorrecta. Para ello, Sinergia Microsistemas ha desarrollado un sistema que permite filtrar y desechar las lecturas incorrectas.

Obtención del confident score de corte

El modelo estadístico debe ser entrenado para cada tipo de documento como cualquier modelo de inteligencia artificial. Para ello se debe disponer de distintas lecturas ya realizadas a un tipo de documento, donde debe realizarse una revisión manual y comprobar si la lectura fue aceptada correcta o aceptada incorrecta y recoger el CS que se obtuvo de la lectura.

Mediante un análisis estadístico de dispersión, se obtiene la gráfica de dispersión de lecturas en torno al CS medio tanto para las lecturas aceptadas correctas como las aceptadas incorrectas. Como se puede ver en el ejemplo, a medida que el CS obtenido disminuye o aumenta, se encuentran cada vez menos lecturas. Lo mismo sucede con las lecturas incorrectas.

Imagen visual IA - Campanas probabilidad.
Campanas de probabilidad para lecturas correctas e incorrectas

Existe un punto en el que ambas funciones se cruzan. Ese punto sería el valor del CS para el que existe la misma probabilidad de que el resultado de la lectura sea aceptada correcta o aceptada incorrecta. Valores superiores a ese CS tendrán mas probabilidad de ser lecturas aceptadas correctas y valores inferiores tendrán mas probabilidad de ser documentos aceptados incorrectos.

Este será el valor nominal del CS de corte, documentos que arrojen un CS inferior durante su lectura serán considerados como lecturas desechadas y los que arrojen valores superiores serán considerados lecturas aceptadas correctas (a pesar de que no lo sean todas).

Imagen visual IA - Campanas probabilidad - Punto Inflexión
Campanas de probabilidad para lecturas correctas e incorrectas - Punto Inflexión

Proceso de toma de decisiones basado en el CS de corte

Una vez establecido el CS de corte, se puede establecer un nivel de aceptación de rechazo de facturas, es decir, del total de facturas, cual sería el porcentaje admisible de facturas rechazado que tendrían que revisarse manualmente para que sea viable el proyecto de digitalización de este tipo de documentos, así como el porcentaje máximo de facturas aceptadas incorrectas admisible.

Tras establecer estos porcentajes, se comparan con los porcentajes obtenidos al establecer el CS de corte por el método anteriormente descrito. Pueden darse los siguientes casos que conforman el árbol de decisiones del análisis estadístico inteligente.

flowchart TD subgraph OPENCV StartGlobalNode((Lecturas)) StartGlobalNode((Lecturas)) -->|1..N| StartNode[Lectura
de
Documento] EndNode((Fin Reconocimiento
de Lectura)) end subgraph AZURE BBDDNode[(Azure)]:::azurenodecontainer end subgraph OCR StartNode[Reconocimiento de Documento]:::nodecontainer --> ConditionDiscard{% Lectura
Desechada}:::decisionnodecontainer; ConditionDiscard -->|Aceptada| AcceptedDiscard{% Lectura
Incorrecta}:::decisionnodecontainer; ConditionDiscard -->|No Aceptada| EndNodeNoAcceptedDoc(Tipo de documento
no viable
para digitalización); AcceptedDiscard{% Lectura
Incorrecta} --> |Aceptada| EndNodeAcceptedDoc(Tipo Documento
listo para
digitalización); EndNodeAcceptedDoc[Tipo Documento
listo para
digitalización] AcceptedDiscard{% Lectura
Incorrecta} --> |No Aceptada| WhileNode[Aumentar CS de corte
hasta que el % de lecturas
incorrectas
sea aceptable]:::whilenodecontainer; WhileNode[\Aumentar CS de corte/] --> AcceptedDiscard{% Lectura
Incorrecta}; EndNodeAcceptedDoc[Tipo Documento
listo para
digitalización]:::nodecontainer -->|Notificar| BBDDNode[(Azure)]; EndNodeNoAcceptedDoc(Tipo de documento
no viable
para digitalización):::nodecontainer-->|Notificar| BBDDNode[(Azure)]; end AZURE-->EndNode((Fin Reconocimiento
de Lectura)) classDef nodecontainer fill:#f96,color:white; classDef edgeLabel color:black,background-color:#fff; classDef azurenodecontainer color:white,fill:blue; classDef decisionnodecontainer color:white,fill:#ccc; classDef whilenodecontainer color:white,fill:brown;