Herkenning van (hand)writing *

Pagina: 1
Acties:
  • 122 views sinds 30-01-2008
  • Reageer

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Hallo!

Ik voel me vanavond creatief en heb me voorgenomen een programma te gaan schrijven wat typografie en handschrift kan herkennen.

De manier waarop ik dit wil gaan doen is het invoegen van voorbeelden van letters. Ik gooi een aantal verschillende A letters in mijn database zo ook met andere tekens en letters enzovoort.

Ik wil dan de input vergelijken (per pixel of iets?) met de letters in de database (hoe ik dit efficient wil gaan doen is even niet aan de issue). Dan krijg je van alle letters een percentage van overeenkomst met de input.
Hiervan pak ik dan degene met het hoogste percentage mits er een overeenkomst is van een bepaald percentage.

Je voelt de vragen al aankomen!

Wat zou het ideaal aantal per letter zijn in de database?
Dit in alle opzichten: performance, etc etc.

Wat zou het ideale percentage moeten worden?
Te laag: een hoger percentage goede, maar misschien ook meer foute letters.
Ik zou gewoon gevoelswijs een percentage overeenkomst van tussen de 80 en 90 als onderlijn pakken.

Daaraast, hoe ga je vergelijken?
Ik denk eraan dit per pixel te gaan doen. De vraag is dan moet ik pixels eerst nog 'bewerken', om een groter contrast tussen true en false overeenkomst te pakken. Misschien alle pixels naar 5 grijswaarden brengen?
Wat zou hier ideaal zijn? als dit uberhaubt als slim is?

Ik denk dat dit misschien wel een erg ingewikkeld project is voor me, maar de voldoening zal groot zijn als me dit lukt :D.
Ik hoop dat iemand me hiermee zou kunnen helpen ;).

  • Compusmurf
  • Registratie: Oktober 2003
  • Laatst online: 16-08-2024
ik zou bij je vergelijking controleren op iedere letter in je database dus AAA allemaal testen en dan pas de hoogste pakken. Dan vang je af dat als er een andere letter 1x veel op lijkt je prog voor die letter kiest.

K weet het, het is een beetje vaag maar ook niet makkelijk uit te leggen.

http://Compusmurf.xs4all.nl


Verwijderd

Ik hoop dat je veel tijd hebt ;)
Er zijn verschillende technieken voor OCR (geprinte tekst zeg maar) of ICR (geschreven tekst).
Toevallig ben ik bezig met een software pakket wat hier heftig op steund, echter de OCR techniek is ingekocht (bij ABBYY).
Als je wat googled kom je wel op wat uitleg van de diverse technieken.

Paar stappen die je al moet doen vóór je aan herkennen kan beginnen:

- Verbeteren van het image (meestal een scan)
Ruis eruithalen, lijnen verwijderen etc., tekens verbeteren
- Herkennen van de orientatie van het image

daarna kan je aan OCR gaan denken.
zal ff wat links opzoeken, heb ze ergens staan

  • Thralas
  • Registratie: December 2002
  • Laatst online: 08:50
Hier staat vrij veel nuttige info denk ik. Over OCR, niet ICR.

[ Voor 36% gewijzigd door Thralas op 22-11-2006 22:39 ]


  • Joove
  • Registratie: Januari 2001
  • Laatst online: 08:54
Moet voor een vak op de TU vanuit nist database (getallen 0 t/m 9, totaal 2000 stuks) gaan onderscheiden.

Dit gaan wij doen met de volgende software Matlab. En dit is niet zo een twee drie gedaan. Je moet features (dingen waarmee je de letters en cijfers wilt gaan onderscheiden) bedanken, bijvoorbeeld: aantal pixels, omtrek van de pixels, gemiddelde op de x-as, gemiddelde op de y-as. Verder kan je kijken naar welke richting de lijnen in het cijfer staat(veel horizontaal of verticaal) etc, met bijvoorbeeld Fourier.

En zeker als je handgeschreven teksten wilt gaan herkennen met een goed resultaat dan ben je wel even bezig, voor dat de resultaten er echt zijn. Dus ik zou zeggen begin makkelijk met bijvoorbeeld cijfers te herkennen en ga dit uitbouwen met letters etc.

Verwijderd

met wat B-SPLINES en geadvanceerde algorithmes moet je ergens komen......................

^^als het om handwriting gaat.. (en herkenning op foto's)

[ Voor 25% gewijzigd door Verwijderd op 22-11-2006 23:24 ]


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Ik heb een aantal dingen hier doorgelezen, en zelf nog eens nagedacht en een (simpel) puntenplan opgezet.

Stel je gaat 1 letter / cijfer bepalen.
1e gegeven: plaatje kent 1 teken
2e gegeven: witte achtergrond, zwarte letter
3e gegeven: geen tinten buiten #00000 en #FFFFFF

Punten om uit te voeren:
1. Op de middellijn scannen naar zwarte pixels
2. Vanuit die pixels de aaneengesloten pixels van de vorige pixels bepalen. nu heb je heel de letter (uitzondering: punten boven een letter, misschien middelijn zoeken en ook een verticale scan doen)
3. Pepalen 'karakteristiek' van de letter (lettereindes en hoeveel, is er een kruising, etc). op basis hiervan al een ruwe selectie maken (zorgen dat deze 100% zeker correct is)
4. Letter in een aantal vlakken verdelen (4 lijkt me al oké)
5. Vlakken vergelijken tegenover alle letters, als bv 2 of 3 vlakken TOTAAL niet overeenkomen -> uitsluiten letter. Je houd een percentage oid (een meeteenheid) kwa overeenkomst over.
6. Daarna middel je over die 4 ook nog (misschien wel onnodig). ook een percentage overeenkomst houd je over.
7. percentages vergelijken. hoogste heeft grootste kans dat het die letter is. Misschien bekijken of andere hoge percentages dezelfde letter uitwijzen!

Misschien is het nog een idee om ook nog bepaalde 'letterkarakteristieken' mee te geven, zoals al aangegeven: lettereindes en kruisingen.
Hiernaast ook of een letter compact is, of langwerpig etc.

Iemand hier al op of aanmerkingen op?

En ja, ik snap uiteraard dat als je een lijn door alle letters heentrekt of antialiasing of nog erger noise toepast het gelijk niet meer functioneert. Maar naar mijn idee zijn dit bijzaken, die je later bij kunt werken als dit eenmaal werkt!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mischa_NL schreef op donderdag 23 november 2006 @ 02:51:
En ja, ik snap uiteraard dat als je een lijn door alle letters heentrekt of antialiasing of nog erger noise toepast het gelijk niet meer functioneert. Maar naar mijn idee zijn dit bijzaken, die je later bij kunt werken als dit eenmaal werkt!
Je maakt je druk over anti-aliased letters of noise maar de rest lijkt je wel makkelijk? :D

edit:

-hier stond onzin-


Overigens lijkt me dit meer iets voor SEA.

[ Voor 48% gewijzigd door RobIII op 23-11-2006 03:56 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Het geen wat je nu post gaat alleen over typografie (gedrukte/digitale) tekst neem ik aan,
als het om handgeschreven tekst gaat, ga je er op deze manier niet komen.........

-edit: er worden hier echt 2 dingen door elkaar gehaald.

[ Voor 14% gewijzigd door Verwijderd op 23-11-2006 03:06 ]


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Verwijderd schreef op donderdag 23 november 2006 @ 03:05:
Het geen wat je nu post gaat alleen over typografie (gedrukte/digitale) tekst neem ik aan,
als het om handgeschreven tekst gaat, ga je er op deze manier niet komen.........

-edit: er worden hier echt 2 dingen door elkaar gehaald.
ja in eerste instantie gaat het over typografie.

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Om jullie op de hoogte te houden :P.

Hij kan nu (losse) letters apart zetten.
Punt 2 is dus zo goed als 'done'!

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
gaat best oké atm maar ik ben op zoek naar een algoritme (gewoon in pseudo code oid) om een letter terug te brengen naar de essentie. 1 lijn dus. ik ben al zover dat ik een omlijning heb van elke letter.
nu wil ik dus het midden van die letter zoeken.

Ik heb geen idee hoe ik dit zou moeten aanpakken.

  • raoulduke
  • Registratie: Oktober 2003
  • Niet online

raoulduke

Get in!

Via Wikipedia deze site met relevante links:

http://forum.swarthmore.edu/sum95/suzanne/tess.intro.html

Remember, if you have any trouble you can always send a telegram to the Right People.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
link doet het niet ;(

edit/
Mag dit topic aub terug naar programming. hier komt echt helemaal niemand...

edit 2/
en nu doet je link het wel!
eens kijken :D

[ Voor 22% gewijzigd door Mischa_NL op 27-11-2006 09:38 ]


  • raoulduke
  • Registratie: Oktober 2003
  • Niet online

raoulduke

Get in!

Ik zie dat ik een verkeerde link heb gepost. De pagina die ik had willen posten is deze:
http://cgm.cs.mcgill.ca/~godfried/teaching/pr-web.html

Daar staat veel meer op dan op de link die ik eerder gaf.

Remember, if you have any trouble you can always send a telegram to the Right People.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
raoulduke schreef op maandag 27 november 2006 @ 11:33:
Ik zie dat ik een verkeerde link heb gepost. De pagina die ik had willen posten is deze:
http://cgm.cs.mcgill.ca/~godfried/teaching/pr-web.html

Daar staat veel meer op dan op de link die ik eerder gaf.
held! serieus. wat een info!!!

zal ff een screen plaatsen van wat ik nu heb!

Afbeeldingslocatie: http://img160.imagevenue.com/loc325/th_24292_ocr1_122_325lo.JPG

zoals je ziet werkt mijn Skeletonization algoritme niet zoals het zou moeten...
geen flashy interface, het laat zien wat het moet laten zien en meer niet. zelfde geld voor de code die een gigantische rommel is :P. Gaat erom dat ik eerst die algoritmes maar eens kan toepassen hehe.

[ Voor 13% gewijzigd door Mischa_NL op 27-11-2006 11:46 ]


  • MicroWhale
  • Registratie: Februari 2000
  • Laatst online: 01-12 10:46

MicroWhale

The problem is choice

als je iets wilt herkennen, betekent dat dat het te herkennen onderdeel zich in de database bevindt. Met deze aanname zou ik eens naar een neuraal netwerk (NN) gaan kijken. Hierbij voer je dan het te herkennen handschrift eerst in dmv een paar voorbeelden. Daarna sla je het NN op.

Om het te herkennen voer je een nieuw stuk in bij alle neurale netwerken en kijk je bij welk NN je de hoogste match hebt.

Het enige belangrijke is dat je vandaag altijd rijker bent dan gisteren. Als dat niet in centen is, dan wel in ervaring.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
MrWilliams schreef op maandag 27 november 2006 @ 12:55:
als je iets wilt herkennen, betekent dat dat het te herkennen onderdeel zich in de database bevindt. Met deze aanname zou ik eens naar een neuraal netwerk (NN) gaan kijken. Hierbij voer je dan het te herkennen handschrift eerst in dmv een paar voorbeelden. Daarna sla je het NN op.

Om het te herkennen voer je een nieuw stuk in bij alle neurale netwerken en kijk je bij welk NN je de hoogste match hebt.
uiteraard uiteraard!
maar je moet wel eerst vergelijkingsmateriaal hebben.
mij lijkt een enkele lijn makkelijker en sneller vergelijken dan een hele letter.
en ik weet idd hoe een NN werkt. wil het hier ook gaan toepassen denk ik maar zo ver ben ik nog niet.

Ik kom serieus niet uit dit probleem. ik kan ook nergens pseudo code vinden :/

Verwijderd

Sorry voor deze asociale trap omhoog, maar vind het wel een redelijk interessant topic en vroeg me af hoe de vorderingen zijn van de TS...

Verder is misschien het boekje Neural Networks van Phil Picton wel interessant, hoewel ik er nog niet helemaal doorheen ben wordt er vrijveel over pattern recognition gesproken in het boekje.
ISBN:033380287

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Verwijderd schreef op maandag 29 januari 2007 @ 13:58:
Sorry voor deze asociale trap omhoog, maar vind het wel een redelijk interessant topic en vroeg me af hoe de vorderingen zijn van de TS...

Verder is misschien het boekje Neural Networks van Phil Picton wel interessant, hoewel ik er nog niet helemaal doorheen ben wordt er vrijveel over pattern recognition gesproken in het boekje.
ISBN:033380287
Op Inet is weinig echt duidelijke en goede info omtrent NN's te vinden, en ik ben er derhalve ook nog niet in geslaagd er 1 in elkaar te prielen.

Ik ben vrij vroeg gestrand. Wat inhoud: Ik kon geen 'werkend' thinning algoritme vinden... Het zal allicht gewerkt hebben, maar na een dag proberen te implenteren was ik het beu :P.

Verwijderd

Mag ik misschien zo vrij zijn je source (ik weet niet of je al wat nuttigs hebt) eens in te zien?
Pagina: 1