PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → OCR - Reconnaissance optique de caractères
OCR - Reconnaissance optique de caractères
Débuté par Cédric J., 08 avr. 2013 16:30 - 20 réponses
Membre enregistré
206 messages
Posté le 08 avril 2013 - 16:30
Bonjour,

Je cherche un moyen pour reconnaitre un numéro de téléphone que je récupère dans une image (GIF).
Est-ce possible avec Webdev ?

Merci
Posté le 09 avril 2013 - 15:24
Bonjour,

Oui bien sur, il te suffit d'exploiter MODI, compris dans Microsoft Office. Un appel a la procedure MODI te permettra de récuperer le texte de l'image en résultat.

Stephane
Membre enregistré
206 messages
Posté le 09 avril 2013 - 16:15
Bonjour,

Merci pour cette piste.

Pourrais-tu être plus précis concernant MODI et comment appeler cette procédure depuis Webdev ?
Posté le 09 avril 2013 - 23:07
Voici un bon de code en Windev, pas sur que cela fonctionnera en Webdev


PROCEDURE GetOCRConversion(nTempName est une chaîne)

strRecText est une chaîne = ""

SI fFichierExiste(nTempName)=Faux ALORS RENVOYER strRecText

nOCREngine est un objet Automation dynamique
nOCREngine = ObjetActif("MODI.Document")
inputFile est une chaîne =nTempName
nOCREngine = allouer un objet Automation "MODI.Document"
nOCREngine>>Create(inputFile)

// Lancement de la reconnaissance
QUAND EXCEPTION DANS
nOCREngine>>OCR()
strRecText=nOCREngine>>Images(0)>>Layout>>Text
FAIRE
//erreur("Une exception a été levée pendant l'analyse du document.", ExceptionInfo(errMessage))
ExceptionActive()
strRecText=""
FIN

//nOCREngine>>OCR()
libérer nOCREngine

RENVOYER strRecText
Posté le 10 avril 2013 - 00:06
Bonjour

pour info, il est TRES fortement reccomandé de ne PAS faire des appels
de ce type à word/office dans un site web (voir les longues discussions
sur ce sujet dans le forum)

Par contre, il existe un OCR qui devrait être intégrable, fais
par/supporté par google qui s'appelle, si mes souvenirs sont bon, tesseract

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com/index_FR.html


On 4/9/2013 4:07 PM, Stephane wrote:
Voici un bon de code en Windev, pas sur que cela fonctionnera en Webdev


PROCEDURE GetOCRConversion(nTempName est une chaîne)

strRecText est une chaîne = ""

SI fFichierExiste(nTempName)=Faux ALORS RENVOYER strRecText

nOCREngine est un objet Automation dynamique
nOCREngine = ObjetActif("MODI.Document")
inputFile est une chaîne =nTempName
nOCREngine = allouer un objet Automation "MODI.Document"
nOCREngine>>Create(inputFile)

// Lancement de la reconnaissance
QUAND EXCEPTION DANS
nOCREngine>>OCR()
strRecText=nOCREngine>>Images(0)>>Layout>>Text
FAIRE
//erreur("Une exception a été levée pendant l'analyse du document.", ExceptionInfo(errMessage))
ExceptionActive()
strRecText=""
FIN

//nOCREngine>>OCR()
libérer nOCREngine

RENVOYER strRecText

Membre enregistré
206 messages
Posté le 10 avril 2013 - 13:13
Bonjour,

Le problème c'est qu'avec MODI ou tesseract de Google, l'OCR ne me renvoie rien car mon image est trop petite (hauteur 10 pixels). Si je passe une image plus grande, le résultat est bon.

Avec d'autres soft OCR, je parviens malgré tout à reconnaître les caractères mais je ne parviens pas à les piloter depuis Webdev ou Windev...

Pour info, voici le type d'image que je recherche à reconnaitre.


Posté le 10 avril 2013 - 18:22
Bonjour Cédric,

Il faut peut-être alors essayer d'agrandir l'image dans un champ image et de sauvegarder cette image agrandie pour l'exploiter.

Cordialement
François
Posté le 10 avril 2013 - 18:24
Bonjour Cedric

rien ne t'empêche de changer la taille de l'image pour qu'elle fasse 30
de haut à la place (ou plus) :
- chargement de l'image dans un champ image haute qualité 100 % de la
taille de l'image d'origine
- changement de taille du champ image
- dsauveimage enregistre limge sous l nouvelle taille
- OCR qui marche !

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com/index_FR.html


On 4/10/2013 6:22 AM, Cédric J. wrote:
Bonjour,

Le problème c'est qu'avec MODI ou tesseract de Google, l'OCR ne me renvoie rien car mon image est trop petite (hauteur 10 pixels). Si je passe une image plus grande, le résultat est bon.

Avec d'autres soft OCR, je parviens malgré tout à reconnaître les caractères mais je ne parviens pas à les piloter depuis Webdev ou Windev...

Pour info, voici le type d'image que je recherche à reconnaitre.




Membre enregistré
206 messages
Posté le 10 avril 2013 - 18:52
Merci Fabrice mais j'ai déjà essayé d'agrandir l'image etl'image reste toujours illisible...
Posté le 10 avril 2013 - 19:10
Rebonjour

je me demande si ce n'est pas du au fait que les caractères sont
complètement en bordure d'image (collés contre le bord haut...)

Tu peux aussi essayer de leur rajouter une bordure blanche (ci-dessous,
B représente du blanc, pas la lettre B)

BBBBBBBBBBBB
B0383979797B
BBBBBBBBBBBB

Il est possible que l'absence de contraste blanc/noir en haut de ton
image soit la raison du problème

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com/index_FR.html

On 4/10/2013 12:00 PM, Cédric J. wrote:
Merci Fabrice mais j'ai déjà essayé d'agrandir l'image etl'image reste toujours illisible...
Membre enregistré
206 messages
Posté le 10 avril 2013 - 19:33
Super Fabrice ! J'ai rajouté une bordure blanche et ça fonctionne.
Grand merci pour ton aide.
Posté le 12 avril 2013 - 11:07
Merci à tous.

J'ai appliqué cette solution d'OCR à Windev pour intercepter les appels entrants sur mon téléphone GIGASET DX800A.

Quand je suis appelé, la fiche de mon contact s'ouvre automatiquement à l'écran.

Cordialement
François
Posté le 28 avril 2013 - 13:53
Bonjour cedric est ce que tu peux mettre ton code source complet car je suis intéressé par la reconnaissance optique mon emai est wicef1509@gmail.com

coordialement
Posté le 29 avril 2013 - 11:44
Bjr,
Comme c'est un partage, posons le code pour tous sur le forum
Cordialement
Posté le 24 janvier 2014 - 15:23
Bonjour,

moi aussi ça m'intéresse ... ;-)

merci
Membre enregistré
1 message
Posté le 16 février 2015 - 17:24
Bonjour
Je suis également intéressé par cet exemple.

Merci
Membre enregistré
1 message
Popularité : -1 (1 vote)
Posté le 16 novembre 2015 - 15:42
Bonjour,

Je suis tombé sur ce lien qui pourrait peut être vous aider : http://www.situve.com/ocr-mobile/windev.html

Cordialement,

--
situve OCR/OCR Mobile
Membre enregistré
21 messages
Popularité : +2 (2 votes)
Posté le 27 novembre 2015 - 11:27
Bonjour à tous,

Je suis à la recherche d'un moyen pour convertir en texte un morceau d'image affiché à l'écran. Avec WebDev je sélectionne le morceau puis l'envoie sur un site de conversion. Cela marche super (voir les 2 exemples ci-dessous webservice et REST). Cependant je trouve cela un peu lourd. Une bonne vieille DLL serait plus efficiente mais je n'en n'ai pas trouvé d'assez documentée pour me lancer. Les 2 sites web sont payants et leurs modèles d'affaires ne sont pas compatible avec l'usage que j'imagine (traduction de nombreux petits morceaux d'écran versus de quelques gros documents complets). Les 2 procédures ci-dessous ont été plutôt, pour moi, un exercice d'apprentissage autour des appelles webservice et REST et je suis à l'écoute de toutes suggestions en ce qui concerne les OCR.

Marc

PS: Je vais lire les 2 LST 81 et 93 qui proposent des solutions bien que j'ai vu, dans certains autres articles, qu'elles ne fonctionnent pas/plus sur Win10 et que le service Google n'est plus disponible.

Procedure ocrwebservice_com(Text_sis string,...// Texte extrait de l'image
User_sis string= "GANDAR",...// Clef à demandé à newocr.com
Key_sis string= "xxxxxx",...// Clef à demandé à newocr.com
Folder_sis string= fWebDir()+"\_Bunch\OCR\",...// C;\xxx\xxx\xxx\
File_sis string= "Exemple.gif")
// http://www.ocrwebservice.com/services/OCRWebService.asmx?WSDL
OCRWebServiceRecognize_so est OCRWSResponse
OCRWebServiceRecognize_siis OCRWebServiceRecognize
OCRWebServiceRecognize_si.user_name= User_s
OCRWebServiceRecognize_si.license_code= Key_s
IF NOT fFileExist(Folder_s+File_s) THEN ExceptionThrow(1)
OCRWebServiceRecognize_si.OCRWSInputImage.fileData= fChargeBuffer(Folder_s+File_s)
OCRWebServiceRecognize_si.OCRWSInputImage.fileName= File_s
OCRWebServiceRecognize_si.OCRWSSetting.ocrLanguages= "ENGLISH"
OCRWebServiceRecognize_si.OCRWSSetting.convertToBW= True
OCRWebServiceRecognize_si.OCRWSSetting.getOCRText= True
OCRWebServiceRecognize_si.OCRWSSetting.outputDocumentFormat = "TXT"
OCRWebServiceRecognize_si.OCRWSSetting.pageNumbers= 1
// Envoie de la requête
OCRWebServiceRecognize_so = OCRWebServiceRecognize(OCRWebServiceRecognize_si)
// Extraction des résultats
IF OCRWebServiceRecognize_so.errorMessage="" THEN
Occ_iest entier = OCRWebServiceRecognize_so.ocrText.ArrayOfString..Occurrence
FOR i=1 _TO_ Occ_i
Text_s+=OCRWebServiceRecognize_so.ocrText.ArrayOfString[i].string+TAB
END
//Text_s+=OCRWebServiceRecognize_so.ocrText.ArrayOfString[Occ_i].string (ça bug)
RENVOYER True
ELSE
Text_s+=OCRWebServiceRecognize_so.errorMessage..Value+TAB
RENVOYER False
END

PROCEDURE NewOCR_com( Text_s is string,... // Text extrait de l'image
Key_s is string = "xxxx",... // Clef à demandé à newocr.com
Folder_s is string = fWebDir()+"\_Bunch\OCR\",... // C;\xxx\xxx\xxx\
File_s is string = "Exemple.gif") // Fichier image à traduire
// Upload le fichier et obtient un ID
HTTPCreateForm("FORM")
// Il n'y a pas de paramètre supplémentaires HTTPAddParameter("FORM", "file", File_s) est mis pour mémoire
IF NOT fFileExist(Folder_s+File_s) THEN ExceptionDéclenche(1)
HTTPAddFile("FORM", "file", fWebDir()+"\_Bunch\OCR\"+File_s)
// Préparation et envoie de la requête
OCR_Req_s est un httpRequête
OCR_Req_s.URL = ChaîneConstruit("http://api.newocr.com/v1/upload…)
OCR_Req_s.Méthode = httpPost
OCR_Rep_s is a httpResponse = HTTPSendForm("FORM", OCR_Req_s)
JSON_Rep_s is Variant = JSONToVariant(OCR_Rep_s.Content)
// Vérification (il y a moyen de faire mieux)
IF JSON_Rep_s.status<>"success" THEN RESULT False
HTTPCancelForm("FORM")
// Converti en texte l'ID reçu
HTTPRequest(StringBuild("http://api.newocr.com/v1/ocr…))
ResCode is string = HTTPGetResult()
JSON_Rep_s = JSONToVariant(ResCode)
// Extrait le texte converti
Text_s = JSON_Rep_s.data.text

RESULT JSON_Rep_s.status="success"

Posté le 15 décembre 2015 - 14:44
I find another free online ocr http://www.online-code.net/ocr.html to convert image to text, it supports 40+ languages, and can save converted text to editable txt file and searchable pdf document.
Membre enregistré
333 messages
Popularité : +9 (13 votes)
Posté le 09 décembre 2017 - 00:10
@ tonytong
pouvez vous svp nous aider?
merci d'avance
Posté le 05 septembre 2018 - 15:00
Bonjour.

Petit complément à la solution MODI.Document.
Dans certains cas, MODI a tendance à faire une rotation de l'image avant de traduire l'image en texte.
On peut contourner avec cette solution :
Procedure OCR_ImageVersTexte(nTempName est une chaîne)
strRecText est une chaîne = ""

SI fFichierExiste(nTempName)=Faux ALORS RENVOYER strRecText

nOCREngine est un objet automation dynamique
nOCREngine = ObjetActif("MODI.Document")
inputFile est une chaîne =nTempName
nOCREngine = allouer un objet automation "MODI.Document"
nOCREngine>>Create(inputFile)

// Lancement de la reconnaissance
QUAND EXCEPTIONEXCEPTION DANS
nOCREngine>>OCR (miLANG_FRENCH..Valeur, False, False)
strRecText=nOCREngine>>Images(0)>>Layout>>Text
FAIRE
Erreur("Une exception a été levée pendant l'analyse du document.", ExceptionInfo(errMessage))
ExceptionActive()
strRecText=""
FIN

Libérer nOCREngine

RENVOYER strRecText

Il faut définir l'énumération suivante :
EMiLanguages est une Enumération

miLANG_CHINESE_SIMPLIFIED = 2052
miLANG_CHINESE_TRADITIONAL = 1028
miLANG_CZECH = 5
miLANG_DANISH = 6
miLANG_DUTCH = 19
miLANG_ENGLISH = 9
miLANG_FINNISH = 11
miLANG_FRENCH = 12
miLANG_GERMAN = 7
miLANG_GREEK = 8
miLANG_HUNGARIAN = 14
miLANG_ITALIAN = 16
miLANG_JAPANESE = 17
miLANG_KOREAN = 18
miLANG_NORWEGIAN = 20
miLANG_POLISH = 21
miLANG_PORTUGUESE = 22
miLANG_RUSSIAN = 25
miLANG_SPANISH = 10
miLANG_SWEDISH = 29
miLANG_SYSDEFAULT = 2048
miLANG_TURKISH = 31

FIN


Bon dev