Pour les matheux ..se contruire un mini OCR

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pour les matheux ..se contruire un mini OCR

Message par Backup »

Fortix a écrit :Personnellement, je pige rien au rôle que peut avoir ce
gadget Canvas

puisqu'il est incapable d'afficher une simple image :lol:
ben si , ça marche !

faut juste cliquer sur le canvas pour qu'il se rafraichisse !

tu le demande toi-meme avec :roll:

Code : Tout sélectionner

 If EventType() = #PB_EventType_LeftButtonDown 

Code : Tout sélectionner


UseJPEGImageDecoder()
file$=OpenFileRequester("ouvrir une image","c:\","*.jpg",1)

img = LoadImage(#PB_Any,file$);Changer le chemin svp

L = ImageWidth(img)
H = ImageHeight(img)

If OpenWindow(0,0,0,L,H,"CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	CanvasGadget(0,0,0,L,H)
	
	Repeat
		Event = WaitWindowEvent(2)
		
		If Event = #PB_Event_Gadget And EventGadget() = 0
			; If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(0, #PB_Canvas_Buttons|#PB_Canvas_Image) & #PB_Canvas_LeftButton)
			StartDrawing(CanvasOutput(0))
				DrawImage(ImageID(img), 0, 0)
			StopDrawing()
			;EndIf
		EndIf   
		
	Until Event = #PB_Event_CloseWindow
EndIf; EPB
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Re: Pour les matheux ..se contruire un mini OCR

Message par Fortix »

Exacte @Dobro :lol:

petite bourde de ma part :oops:
je ravale ma langue :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pour les matheux ..se contruire un mini OCR

Message par Backup »

faut moins picoler :)
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Re: Pour les matheux ..se contruire un mini OCR

Message par Fortix »

c'est promis :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Pour les matheux ..se contruire un mini OCR

Message par Kwai chang caine »

Bon je me suis lancé, mais je tourne en rond.
J'arrive pas a avoir les couleurs qui correspondent aux pixel..un truc de dingue.
Pourtant ça parait simple sur le papier

Deja l'image fait 5 pixels et je peux pas faire un plot de 5, j'suis obligé de mettre -1 sinon ça plante, du coup ça fausse le bordel forcément puisque j'ai pas la 5e barre :(

L'image:

Image

Code : Tout sélectionner

Enumeration
 #Form0
 #Image0
EndEnumeration

LoadImage(1, "Caractere17.bmp")
CopyImage(1, 2)
ResizeImage(2, 69, 89)
OpenWindow(#Form0, 668, 145, 104, 112, "New window ( 0 )", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
ImageGadget(#Image0, 15, 8, 69, 89, ImageID(2))

StartDrawing(ImageOutput(1))
CouleurFond = Point(1, 1)
Pixel = 0 
     
For ImageY = 1 To ImageHeight(1) - 1
 
 For ImageX = 1 To ImageWidth(1) - 1
  
  Pixel + 1
  CouleurPixel = Point(ImageX, ImageY)
  LigneCouleur$ + " " + RSet(Str(CouleurPixel), 8, "0") + " "
  
  If Pixel = 4
   Pixel = 0
   Debug LigneCouleur$
   LigneCouleur$ = ""
  EndIf 

 Next

Next

FreeImage(1)
FreeImage(2)
StopDrawing()

Repeat
 Evenement = WaitWindowEvent()
Until Evenement = #PB_Event_CloseWindow

ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pour les matheux ..se contruire un mini OCR

Message par Backup »

lorsque tu utilises des constantes , fait le jusqu'au bout ;)

Code : Tout sélectionner

Enumeration
	#Form0
	#gadget_Image
	#Image1
	#Image2
EndEnumeration

LoadImage(#Image1, "Caractere17.bmp")
CopyImage(#Image1, #Image2)
ResizeImage(#Image2, 69, 89)
OpenWindow(#Form0, 668, 145, 104, 112, "New window ( 0 )", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
ImageGadget(#gadget_Image, 15, 8, 69, 89, ImageID(#Image2))

StartDrawing(ImageOutput(#Image2))
	CouleurFond = Point(1, 1)
	Pixel = 0
	
	For ImageY = 1 To ImageHeight(#Image2) - 1
		
		For ImageX = 1 To ImageWidth(#Image2) - 1
			
			Pixel + 1
			CouleurPixel = Point(ImageX, ImageY)
			LigneCouleur$ + " " + RSet(Str(CouleurPixel), 8, "0") + " "
			
			If Pixel = 4
				Pixel = 0
				Debug LigneCouleur$
				LigneCouleur$ = ""
			EndIf
			
		Next
		
	Next
	
	FreeImage(#Image1)
	FreeImage(#Image2)
StopDrawing()

Repeat
	Evenement = WaitWindowEvent()
Until Evenement = #PB_Event_CloseWindow
; EPB

note , que j'ai laissé l'image 1 alors que je ne comprends pas a quoi elle va te servir
(tu fais une copy d'image )



petite variante au niveau affichage de la valeur des points ...
lorsque le pixel est egale a 0 c'est de la couleur noire , donc je met dans la matrice la valeur 1 pour dire qu'il y a un pixel
ça servira pour la futur reconnaissance ;)
lorsque c'est different de 0 c'est soit la couleur du fond (blanc ) soit n'importe qu'elle autre couleurs , comme le Gris dans ton image
donc c'est pas bon , ça fait pas partie du caractere ... donc je met 0 dans la matrice !

de cette façon , j'ai une représentation exacte du caractere !

il ne manque plus qu'a attribuer des points de reconaissance pour dire que ce caractere est un "1" :)

ps: si tu as resolu la decoupe , et avec ce bout de prg , il ne te manque plus que le repere des point d'identifications
et l'attribution pour tel ou tel caractere .... ton OCR est quasi fini :)

Code : Tout sélectionner

Enumeration
	#Form0
	#gadget_Image
	#Image1
	#Image2
EndEnumeration

LoadImage(#Image1, "Caractere17.bmp")
CopyImage(#Image1, #Image2)
ResizeImage(#Image2, 69, 89)
OpenWindow(#Form0, 668, 145, 104, 112, "New window ( 0 )", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
ImageGadget(#gadget_Image, 15, 8, 69, 89, ImageID(#Image2))

Dim matrice(69,89)
StartDrawing(ImageOutput(#Image2))
	CouleurFond = Point(1, 1)
	;Pixel = 0
	
	For ImageY = 1 To ImageHeight(#Image2) - 1
		For ImageX = 1 To ImageWidth(#Image2) - 1
			CouleurPixel = Point(ImageX, ImageY)
			;Debug str( red(CouleurPixel)) +" "+str( Green(CouleurPixel))+" "+str( Blue(CouleurPixel))
			if CouleurPixel =0
				matrice(ImageX,ImageY)=1
				Else
				matrice(ImageX,ImageY)=0
			Endif 
		Next ImageX
	Next ImageY
	FreeImage(#Image1)
	FreeImage(#Image2)
StopDrawing()
calldebugger
; on affiche la matrice :
For Y = 1 To 88
	For X = 1 To 68
		ax$=ax$+str(matrice(X,Y))
	Next X
	ax$=ax$+chr(10)
Next Y
MessageRequester("contenu de la matrice", ax$)
beep(440,100)
calldebugger

Repeat
	Evenement = WaitWindowEvent(2)
Until Evenement = #PB_Event_CloseWindow
; EPB
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Pour les matheux ..se contruire un mini OCR

Message par Kwai chang caine »

Merci beaucoup dobro
Je regarderais demain, je suis pas devant un pc
Android c'est cool, mais n'empêche que Windows me manque parfois

Encore merci, je te tiens au courant
Bonne nuit
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Pour les matheux ..se contruire un mini OCR

Message par Kwai chang caine »

DOBRO...comme promis j'ai essayé ton code aujourd'hui....sur WINDOWS :mrgreen:
Un seul mot me vient à l'esprit
GEANT !!! 8O

Dans les deux sens du terme, ton caractere est geant une fois analysé :lol:
Mais surtout ton code est génial....la je me doit de reconnaître que tu m'épates :wink:

Hier j'ai cherché des heures et à part des suites de chiffres, ça ressemblait à tout sauf au caractère

Encore merci beaucoup de ce cadeau
Mercredi je me lance dans la comparaison, je pense que je devrais assez facilement reconnaître une bonne partie des caractères, mais il va y en avoir qui vont se ressembler....le zero et le O...le I et le l..et plein d'autres, mais la majeure partie devrait être reconnaissable

Encore merci et bon WE
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pour les matheux ..se contruire un mini OCR

Message par Ar-S »

Pour les O et 0 il ne font jamais la même taille. En revanche le I et le l sont plus délicats, il faudra je pense que tu testes si avant le caractère il y a "x espaces", le I ne se trouvant qu'en début de phrase. Tu peux aussi dire que c'est un i majuscule si le caractère précédent est le point "."
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Pour les matheux ..se contruire un mini OCR

Message par Kwai chang caine »

Oui, pour quelques pour-cents de caractères, il va falloir que je chipote presque au pixel prés, après le problème quand on chipote si précisément c'est que le scan n'est jamais parfait, rien que le fait de passer en N&B parfois laisse des pixels orphelins.
Faudra que je fasse des essais, peut être que le fait de garder les couleurs d'origines facilitera la reconnaissance au final..car plus on travaille l'image plus on a de chance de générer des erreurs.
Apres il reste aussi des combines plus ou moins foireuses, au milieu d'un nom y'a pas de raison d'avoir un chiffre comme un 1 c'est donc un "I" ou un "l", et inversement au milieu d'une référence dans mon cas il n'y a pas de lettre...etc...
Mon problème, c'est que c'est des noms de clients donc on peut pas croiser avec un dictionnaire :(

En dernier recours, si vraiment un doute subsiste, il me reste la solution "lourdote" de demander a l'utilisateur, ça reste quand même mieux que de se taper tous les centaines de clients à la main.... après tout si mes patrons sont pas contents, ils ont qu'a payer des milliers d'euros et donner cette mission à Adobe, Microsoft ou autres :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pour les matheux ..se contruire un mini OCR

Message par Backup »

sinon , il y a des OCR gratuit ;)
par exemple :

OCR .Net Components
http://www.commentcamarche.net/download ... components


GOCR
http://www.commentcamarche.net/download ... 90061-gocr

FreeOCR <--- genere meme un fichier Word
http://www.commentcamarche.net/download ... 66-freeocr
-Compatibilité : FreeOCR est capable d’extraire le texte de n’importe quel document scanné. Il prend en charge également les fichiers PDF à plusieurs pages, les fichiers TIFF compressés et les fichiers images au format BMP, JPG et PNG.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Pour les matheux ..se contruire un mini OCR

Message par Kwai chang caine »

Oui oui, mais j'en avait essayé certains...c'etait pas concluant :(
En plus la page a des scrollbars des champs a pas lire et tout le toutim....je pense quand même que je tiens la solution...jusqu'a la tuile mortelle bien sur, mais j’espère ne pas la croiser

Par contre, en te lisant une idée m'est venue, pour les derniers caracteres recalcitrants, je peux au pire les soummetres à un de ces OCR gratuit, si il arrive pas a reconnaitre un seul caractere dans une image de la taille du caractere...c'est que le programmeur il peut faire comme moi...apprendre l'informatique :lol: :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre