Proyecto Con OCR


Ir a la página 1, 2  Siguiente

Objetivo: Proyecto Con OCR
Buenas tardes,
estoy en el desarrollo de un programa para gestionar las cuentas de una Comunidad de vecinos, y bien el tema es que me lo estaba planteando como que entraría a la cuenta de esa comunidad y podría descargar desde web los movimientos, pero va a ser que no puedo porque les cuesta dinero y no quieren hacerlo de esta forma.
Bien otra solución que se me ha ocurrido para darle al Presidente o persona que gestione esto es, introducir un proceso de OCR para poder mediante escaneo o foto de la cartilla con los movimientos detectar estos y poder registrarlos en una base de datos que posteriormente otro proceso realizará un ETL y sacará un Report.
Alguna experiencia con un proyecto con estos requerimientos OCR, algún componente que haya para esta tarea.

Saludos y gracias por las ayudas.

última edición por calcena el Viernes, 04 Octobre 2019, 16:31; editado 1 vez
Perfil MP  
Objetivo: Re: Proyecto Con OCR
calcena escribió:  
Buenas tardes,
estoy en el desarrollo de un programa para gestionar las cuentas de una Comunidad de vecinos, y bien el tema es que me lo estaba planteando como que entraría a la cuenta de esa comunidad y podría descargar desde web los movimientos, pero va a ser que no puedo porque les cuesta dinero y no quieren hacerlo de esta forma.
Bien otra solución que se me ha ocurrido para darle al Presidente o persona que gestione esto es, introducir un proceso de OCR para poder mediante escaneo o foto de la cartilla con los movimientos detectar estos y poder registrarlos en una base de datos que posteriormente otro proceso realizará un ETL y sacará un Report.
Alguna experiencia con un proyecto con estos requerimientos OCR, algún componente que haya para esta tarea.

Saludos y gracias por las ayudas.


Solo una pregunta por curiosidad. Cuando uno esta en la banca online, existe muchas posibilidades de descargar los movimientos sin coste alguno. ¿Por que dice que cuesta dinero?

Yo seguiría por esta posibilidad, mas que con OCR. Pero si te empeñas. Supongo que sabes que linux el código es accesible y si existe un programa te sugiero que bajes ese código y estudies lo que necesitas.

Te digo esto por que no tengo ni idea de que exista algo en gambas.

Saludos.

Perfil MP  
Objetivo: Re: Proyecto Con OCR
calcena escribió:  
...Alguna experiencia con un proyecto con estos requerimientos OCR, algún componente que haya para esta tarea...

Que yo sepa no hay un componente nativo de gambas que haga ocr de una imagen. Por otra parte si que hay uno que maneja un scanner.
En linux existe un programa llamado Tesseract que es un muy buen programa de terminal para OCR.
Hace un tiempo hice esta función devuelve el texto de una imagen.
Public Function PNGOCRText(strPath As String, Optional strLang As String) As String '' Devuelve el texto extraido, "" si no hay texto.

Dim strCommand As String
Dim strTxtTemp As String

If Exist(strPath) Then
If Stat(strPath).Type = gb.File Then
strTxtTemp = ""
strCommand = "tesseract '" & strPath & "' stdout -l " & strLang & " 2>&1"
Shell strCommand Wait To StrTxtTemp
Endif
Endif
Return strTxtTemp
End

Espero que te sirva
Saludos.

última edición por tincho el Viernes, 04 Octobre 2019, 21:38; editado 2 veces
Perfil MP  
Objetivo: Re: Proyecto Con OCR
tincho escribió:  
calcena escribió:  
...Alguna experiencia con un proyecto con estos requerimientos OCR, algún componente que haya para esta tarea...

Que yo sepa no hay un componente nativo de gambas que haga ocr de una imagen. Por otra parte si que hay uno que maneja un scanner.
En linux existe un programa llamado Tesseract que es un muy buen programa de terminal para OCR.
Hace un tiempo hice esta función devuelve el texto de una imagen.
Public Function PNGOCRText(strPath As String, Optional strLang As String) As String '' Devuelve el texto extraido, "" si no hay texto.

Dim strCommand As String
Dim strTxtTemp As String

If Exist(strPath) Then
If Stat(strPath).Type = gb.File Then
strTxtTemp = ""
strCommand = "tesseract '" & strPath & "' stdout -l " & strLang & " 2>&1"
Shell strCommand Wait To StrTxtTemp
Endif
Endif
Return strTxtTemp
End

Espero que te sirva
Saludos.


Hola, tincho

Muy chulo tu código y buen aporte, Gracias.

Saludos

Perfil MP  
Objetivo: Re: Proyecto Con OCR
gambafeliz escribió:  
...Muy chulo tu código y buen aporte, Gracias.

Gracias, de todas maneras no se si es lo que busca nuestro amigo, ya que las planillas de extractos bancarios suelen se eso, planillas y ahí el ocr de tesseract no ofrece buenos resultados.
Saludos.

Perfil MP  
Objetivo: Re: Proyecto Con OCR
Me adelanto al tano

Puedes usar librerias externas y evitar la llamada Shell

' gambas module file

Library "libtesseract"

Public Struct PixColormap

harray As Pointer '; / * colormap table(array Of RGBA_QUAD) * /
depth As Integer '; / * Of pix(1, 2, 4 Or 8 bpp) * /
nalloc As Integer '; / * number Of color entries allocated * /
n As Integer '; / * number Of color entries used * /
End Struct

Public Struct PixStruct

w As Integer '; / * width In pixels * /
h As Integer '; / * height In pixels * /
d As Integer '; / * depth In bits * /
wpl As Integer '; / * 32 - bit words / Line * /
refcount As Integer '; / * reference count(1 If no clones) * /
xres As Integer '; / * image res(ppi) In x direction * /
yres As Integer '; / * image res(ppi) In y direction * /
informat As Integer '; / * Input file format, IFF_ * * /
text As String '; / * text string associated With pix * /
colormap As PixColormap '; / * colormap(may be Null) * /
data As Pointer '; / * the image data * /
End Struct

Public Extern TessVersion() As String

Public Extern Init(datapath As String, language As String) As Integer

Public Extern TessBaseAPIInit3(handle As Pointer, datapath As String, language As String) As Integer

Public Extern TessBaseAPICreate() As Integer

Public Extern TessBaseAPISetImage2(handle As Integer, pix As PixStruct)

Public Extern TessBaseAPISetImage(handle As Integer, imagedata As Pointer, width As Integer, height As Integer, bytes_per_pixel As Integer, bytes_per_line As Integer)

Public Extern TessBaseAPIGetUTF8Text(handle As Integer) As String

Public Function NewTesseract(datos As String, idioma As String) As Integer

Dim h As Integer, h2 As Integer

Debug modTesseract.TessVersion()

h = TessBaseAPICreate()

Debug "Handle de la API", h

h2 = TessBaseAPIInit3(h, Null, "eng")

Return h

End



En un formulario...

' gambas class file

Public hTesse As Integer


Public Sub form_Open()

'necesitamos inicializar

hTesse = modTesseract.NewTesseract(Null, "eng")

If hTesse = 0 Then

Message("No pude inicializar Tesseract")
Me.Close
Endif

End

Public Sub btnOCR_Click()

Dim imagen As Picture, archivo As String, hImagen As Integer

Debug "Convierto la Picture a Image"

imagen = Desktop.Screenshot(Me.Left + PictureBox1.Left, Me.Top + PictureBox1.top + 27, PictureBox1.W, PictureBox1.H)

archivo = Temp("tesse") & ".jpg"

Debug "Imagen guardada en " & archivo

imagen.Save(archivo)

Debug "Leo la imagen"

modLeptonica.myPix = modLeptonica.pixRead(archivo)

modLeptonica.Pixs = modLeptonica.pixScaleColor4xLI(modLeptonica.myPix)

modLeptonica.Pixd = modLeptonica.pixConvertRGBToGray(modLeptonica.Pixs, 0.5, 0.5, 0.5)

' / Para ver los cambios guardamos /
' modLeptonica.pixWritePng( User.Home & "/temp.png", modLeptonica.Pixd, 0.1)

Debug "Se la paso a Tesseract"

modTesseract.TessBaseAPISetImage2(hTesse, modLeptonica.Pixd)

Debug "Escaneo OCR"

TextArea1.Text = modTesseract.TessBaseAPIGetUTF8Text(hTesse)

End



este modulo de Leptonica para manejo de imagenes...
' gambas module file

Library "liblept:5"

Public Struct PixColormap

harray As Pointer '; / * colormap table(array Of RGBA_QUAD) * /
depth As Integer '; / * Of pix(1, 2, 4 Or 8 bpp) * /
nalloc As Integer '; / * number Of color entries allocated * /
n As Integer '; / * number Of color entries used * /
End Struct

Public Struct PixStruct

w As Integer '; / * width In pixels * /
h As Integer '; / * height In pixels * /
d As Integer '; / * depth In bits * /
wpl As Integer '; / * 32 - bit words / Line * /
refcount As Integer '; / * reference count(1 If no clones) * /
xres As Integer '; / * image res(ppi) In x direction * /
yres As Integer '; / * image res(ppi) In y direction * /
informat As Integer '; / * Input file format, IFF_ * * /
text As String '; / * text string associated With pix * /
colormap As PixColormap '; / * colormap(may be Null) * /
data As Pointer '; / * the image data * /
End Struct

Public Extern pixRead(archivo As String) As PixStruct

'Public myPix As PixStruct

'Public Extern pixRead(archivo As String) As PixStruct

Public Extern pixScaleColor4xLI(Pixs As PixStruct) As PixStruct

Public Extern pixConvertRGBToGray(Pixs As PixStruct, rcolor As Float, gcolor As Float, bcolor As Float) As PixStruct

' Public Extern pixWritePng(filename As String, Pixs As PixStruct, gamma As Float)

Public myPix As PixStruct
Public Pixs As PixStruct
Public Pixd As PixStruct


Perfil MP  
Objetivo: Re: Proyecto Con OCR
tercoIDE escribió:  
Puedes usar librerias externas y evitar la llamada Shell




Bravissimo, tercoIDE !!! 10 + magna cum laude

Perfil MP  
Objetivo: Re: Proyecto Con OCR
tercoIDE escribió:  
Me adelanto al tano
jaja !!!
Igual seguro que saca un as de la manga.
Para que son estos módulos exactamente? Podrías decir una breve descripción?
¿Es para leer planillas escaneadas? o solo texto tipo novela.
Saludos.

Perfil MP  
Objetivo: Re: Proyecto Con OCR
tercoIDE escribió:  
Me adelanto al tano

Puedes usar librerias externas y evitar la llamada Shell



Me gusto pero estoy mas perdido que el barco del arroz en medio del pacifico a punto de hundirse.

tercoIDE estaría mejor si hicieras una brevisima explicación de lo que hace ¿o es que hace lo que pide el hilo?

Gracias, saludos.

Perfil MP  
Objetivo: Re: Proyecto Con OCR
gambafeliz escribió:  
calcena escribió:  
Buenas tardes,
estoy en el desarrollo de un programa para gestionar las cuentas de una Comunidad de vecinos, y bien el tema es que me lo estaba planteando como que entraría a la cuenta de esa comunidad y podría descargar desde web los movimientos, pero va a ser que no puedo porque les cuesta dinero y no quieren hacerlo de esta forma.
Bien otra solución que se me ha ocurrido para darle al Presidente o persona que gestione esto es, introducir un proceso de OCR para poder mediante escaneo o foto de la cartilla con los movimientos detectar estos y poder registrarlos en una base de datos que posteriormente otro proceso realizará un ETL y sacará un Report.
Alguna experiencia con un proyecto con estos requerimientos OCR, algún componente que haya para esta tarea.

Saludos y gracias por las ayudas.


Solo una pregunta por curiosidad. Cuando uno esta en la banca online, existe muchas posibilidades de descargar los movimientos sin coste alguno. ¿Por que dice que cuesta dinero?

Yo seguiría por esta posibilidad, mas que con OCR. Pero si te empeñas. Supongo que sabes que linux el código es accesible y si existe un programa te sugiero que bajes ese código y estudies lo que necesitas.

Te digo esto por que no tengo ni idea de que exista algo en gambas.

Saludos.


Bueno el tema es que al no tener domicialiadas nóminas, los bancos, al menos en españa les cobra a las comunidades de vecinos pequeñas por conectarse a la banca online, y lo que se pretende es rebajar costes.

Saludos.

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.158s (PHP: 50% SQL: 50%)
Consultas SQL: 21 - Debug off - GZIP Activado