Iniciar Sesión

Ver la Versión Completa : [Componente] OCR para convertir la IMG a texto


Roger
27 de febrero de 2015, 17:56
Amigos de foro
Necesito incrustar en mi programa un enlace de consuta pero esta tiene un capcha y revisando la red un programa que evita este capcha pero esta echo en visual basic y utiliza
tessnet2.dll para convertir la imagen de pantalla en texto de esa forma lee el capcha y lo pone en el link y ya esta la consulta en linea con los datos.
aca las codigos private void mt_otro3()
{
try
{
//Creating the Web Request.
HttpWebRequest httpWebRequest = HttpWebRequest.Create("http://www.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias") as HttpWebRequest;
//Specifing the Method
httpWebRequest.Method = "POST";
//Data to Post to the Page, itis key value pairs; separated by "&"
string data = "accion=consPorRuc&nroRuc=20100495989&search1:20100495989&codigo=FGRT&tipdoc=1";
//Setting the content type, it is required, otherwise it will not work.
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
//Getting the request stream and writing the post data
using (StreamWriter sw = new StreamWriter(httpWebRequest.GetRequestStream()))
{
sw.Write(data);
}
//Getting the Respose and reading the result.
HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
using (StreamReader sr = new StreamReader(httpWebResponse.GetResponseStream()))
{
MessageBox.Show(sr.ReadToEnd());
}
}
catch (WebException wex)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("ERROR:" + wex.Message + ". STATUS: " + wex.Status.ToString());

if (wex.Status == WebExceptionStatus.ProtocolError)
{
var response = ((HttpWebResponse)wex.Response);
sb.AppendLine(string.Format("Status Code : {0}", response.StatusCode));
sb.AppendLine(string.Format("Status Description : {0}", response.StatusDescription));

try
{
StreamReader reader = new StreamReader(response.GetResponseStream());
sb.AppendLine(reader.ReadToEnd());
}
catch (WebException ex) { throw; }
}

throw new Exception(sb.ToString(), wex);
}

}


inclusive he descargado un .exe no se en que lenguaje pero funciona de esa manera
yo creo que con un poco de paciencia se puede hacer en powercobol

Rapinto
1 de marzo de 2015, 23:20
Roger,

Vamos ver se entendi:

O código que tens aqui, serve para enviar o pedido ao Site, indicando o que pretendes pesquisar,
e os 4 Alfanuméricos da Capcha (codigo=FGRT).

O código que tens aqui pode passar-se para PowerCobol.
Mas não é com este código que se "apanha" as 4 letras da Capcha.

Tentei utilizar o tessnet2.dll para ir buscar as 4 letras, mas não faz nada. Não dá erro, mas também não executa nada.
Se tiveres essa parte resolvida, (podes por exemplo gravar as 4 letras num ficheiro sequencial)
Posso tentar fazer a parte de ligar ao site e ir buscar os dados.

Saludos,
Rui Pinto

Roger
2 de marzo de 2015, 02:36
Rui
Mi intencios es crear un programa similar como lo hacen otros programadores con este link de
consulta RUC (registro unico de contribuyentes).
Buscando informacion me indican que para elaborar este programa lo primero que tengo que hacer es ver la forma de llevar la imagen de consulta de este link a un archivo (jpg )
luego con un programa interno OCR se lee este archivo y grabarlo a texto.

Luego paso las variables al link y repito el proceso.

Parece simple, lo hice en forma manual para probar con el boton imprime pantalla la imagen pegue al paint y grabe en jpg y con varios programas que hay en la red en linea OCR converti esta imagen en un archivo de texto y solo era leer este archivo para pasar la variable capcha.

Pueden probar este proceso si funciona ahora como hacerlo internamente en powercobol
para que sea transparente al usuario.

:loco: :loco: :loco: :loco:

Rapinto
2 de marzo de 2015, 17:16
Roger,

Verifica no Sub-Forum COM+ como se liga ao site para obter resposta por WebService.

Vê se ajuda alguma coisa.

Saludos,
Rui

Rapinto
3 de marzo de 2015, 01:07
Roger,

Fiz este pequeno teste com o teu código do 1º Post. (ppj versão 9 em Anexo)
mas a resposta que obtive sempre é que há um erro interno no Site (ver imagem)

Experimenta tu , para ver se não é um problema de code page ou outra coisa.

Saludos,
Rui Pinto

Roger
3 de marzo de 2015, 23:19
Rui
En los codigos que enviaste
01 WINHTTP PIC X(128) VALUE "WinHttp.WinHttpRequest.5.1".
01 REQUEST PIC X(1024) VALUE "accion=consPorRuc&nroRuc=20100495989&search1:20100495989&codigo=VBNG&tipdoc=1".

donde dice codigo=VBNG es el capcha de la pagina como no se esta validando en la consulta envia error

http://s24.postimg.org/gom5u5m2t/ruc.jpg (http://postimg.org/image/fmbzbm39d/full/)

Este es programa que hace lo que deseo

ruc (http://www.mediafire.com/download/ja5qqr80dvabaob/ruc.rar)

puedes probar con mi nro de RUC 10084682379 , 20510703309, 20557752651 , 20114883230

y funciona sin ingresar el capcha

Espero una luz en este tunel.

Rapinto
4 de marzo de 2015, 01:02
Roger,

Não consigo encontrar nada para "apanhar" a capcha.

Consegues saber junto dos responsáveis do Site as instruções técnicas de Web Service??
Se conseguires manda-me as instruções.
Talvez eles tenham outras opções.

Onde encontras-te as instruções do 1º Post (código VB?) ???

Saludos,
Rui Pinto

Roger
4 de marzo de 2015, 16:56
Rui este es un programa para enviar la captura de panta a un archivo
Option Explicit

'Api para generar un evento de tecla, en este caso Print Screen
'''''''''''''''''''''''''''''''''''''''''''''''''' ''''
Private Declare Sub keybd_event _
Lib "user32" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)

'recibe la ruta donde crear el BMP
''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Capturar_Guardar(Path As String)

' borra el portapapeles
Clipboard.Clear

' Manda la pulsación de teclas para capturar la imagen de la pantalla
Call keybd_event(44, 2, 0, 0)

DoEvents
' Si el formato del clipboard es un bitmap
If Clipboard.GetFormat(vbCFBitmap) Then

'Guardamos la imagen en disco
SavePicture Clipboard.GetData(vbCFBitmap), Path
MsgBox " Captura generada en: " & Path, vbInformation
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
Else
MsgBox " Error ", vbCritical
End If

End Sub

Private Sub Command1_Click()
Call Capturar_Guardar("c:\pantalla.bmp")
End Sub

Private Sub Form_Load()
Command1.Caption = " Capturar pantalla "
End Sub

con este ya puedo buscar un programa ocr que lo lee y convierta en txt
inclusive se puede localizar la captura de pantalla
pero este es un primer paso

Rapinto
6 de marzo de 2015, 12:24
Roger,

A logica para fazer o que pretendes, é:

1. Abrir uma ligação com o site. (O site cria logo uma capcha para essa ligação).
2. Obter nessa ligação a imagem
3. passar a imagem para um OCR para apanhar as Letras
4. Continuando na mesma ligação enviando o pedido com a capcha.
5. Obter o resultado.

Na ligação que te enviei (exemplo) não obtemos na mesma ligação a imagem.
Parece-me por isso muito difícil de conseguir o que pretendes.
Se usares um processo externo para ir buscar a imagem, é criada outra imagem e não consegues obter o que pretendes.

Vou continuar a pesquisar para ver se descubro alguma maneira de resolver.

Saludos,
Rui Pinto