Page 2 sur 2

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

Publié : mar. 28/mai/2013 20:28
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

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

Publié : mar. 28/mai/2013 21:17
par Fortix
Exacte @Dobro :lol:

petite bourde de ma part :oops:
je ravale ma langue :lol:

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

Publié : mar. 28/mai/2013 21:52
par Backup
faut moins picoler :)

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

Publié : mer. 29/mai/2013 14:46
par Fortix
c'est promis :lol:

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

Publié : ven. 31/mai/2013 17:23
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


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

Publié : ven. 31/mai/2013 20:10
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

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

Publié : ven. 31/mai/2013 23:22
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

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

Publié : sam. 01/juin/2013 7:52
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

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

Publié : sam. 01/juin/2013 8:44
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 "."

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

Publié : dim. 02/juin/2013 8:57
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:

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

Publié : dim. 02/juin/2013 10:22
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.

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

Publié : dim. 02/juin/2013 12:51
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: