Toon posts:

[PHP/general] OCR character recognition

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dag allen,
Ik werk momenteel aan een stukje OCR code. Voordat men begint te roepen dat dit vooral niet aan PHP toebesteed is; ik ben het er volledig mee eens, maar ben al aardig ver inmiddels. Graag jullie mening over de volgende deelvraag.

Ik heb reeds de informatie over ieder gevonden teken (a-z, 0-9, etc.).
Zie de volgende afbeelding:
Afbeeldingslocatie: http://www.seinia.com/got/characters.png
De rood omlijnde vlakken representeren pixels.

Ik vertaal 1a (de letter 'a') in een library naar de volgende array:
PHP:
1
2
3
4
5
$a = array(
    "0111",
    "1010",
    "0111"
);


Merk op dat iedere waarde in de array een verticale column representeert van het teken, waarbij 0=wit en 1=zwart.
Als ik nu een afbeelding inlees en alle karakters vergelijk met de library ( = de arrays in de library), dan kan ik de letter A vrij gemakkelijk vinden, middels een niet al te zwaar proces. Dit gaat uitstekend.

Ik vraag me alleen af hoe ik het beste om kan gaan met grotere/kleinere tekens. Met andere woorden, als de a een factor groter zou zijn (1b), hoe ga ik daarmee om?
Daarbij moet opgemerkt worden dat, in het geval van de "a", het vrij eenvoudig is om te berekenen hoe de array eruit zou zien als het teken een factor groter is, maar dat is niet bij alle tekens het geval! Sommige tekens vertonen kleine verschilen als ze groter zijn.

Eigenlijk is mijn vraag of jullie wellicht referentie materiaal hebben over dit proces. Wellicht benader ik het probleem verkeerd, en dien ik een geheel andere methode te gebruiken.
Graag jullie input :)

Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 04-10 18:21
Normaal doe je OCR met vormen (als in: een hoofdletter A is een schuine streep omhoog, een schuine streep naar beneden en een streepje ertussen). Check bijvoorbeeld http://www.pixel-technology.com/freeware/tessnet2/ of http://ejohn.org/blog/ocr-and-neural-nets-in-javascript/.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zoals je zelf merkt werkt deze methode alleen bij een 100% match. Dat is leuk voor screenshots met een bepaald vaststaand lettertype, maar bij (bijv.) een scan waar je te maken hebt met rotatie (al is het maar 1 graad), anti-aliasing, verschillende groottes, lettertypen, grijstinten etc ga je de mist in. Ik zou als ik jou was wikipedia er bijvoorbeeld eens op na slaan om te zien of zij nog verwijzen naar fatsoenlijke bronnen waar je meer info uit kunt halen.

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op maandag 19 september 2011 @ 12:48:
Zoals je zelf merkt werkt deze methode alleen bij een 100% match. Dat is leuk voor screenshots met een bepaald vaststaand lettertype, maar bij (bijv.) een scan waar je te maken hebt met rotatie (al is het maar 1 graad), anti-aliasing, verschillende groottes, lettertypen, grijstinten etc ga je de mist in. Ik zou als ik jou was wikipedia er bijvoorbeeld eens op na slaan om te zien of zij nog verwijzen naar fatsoenlijke bronnen waar je meer info uit kunt halen.
Er wordt slechts gebruik gemaakt van screenshots met een bepaald lettertype. De rotatie problemen zijn dus -gelukkig- niet relevant. Ik heb reeds een functie die het contrast normaliseert en vervolgens een zwart-wit kopie maakt van de tekst. Daardoor is de tekst perfect "leesbaar", en krijg ik een resultaat zoals te zien is in mijn bijgevoegde afbeelding.

@creator1988: bedankt!

Wat ik eigenlijk zoek ik de juiste denkwijze. Wikipedia en andere bronnen heb ik reeds uitvoerig bestudeerd. Ik vroeg me alleen af of er wellicht personen zijn met nuttige informatie over dit proces. Ik moet zeggen dat de vormen-benadering me erg aanspreekt.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 06-10 10:20

Janoz

Moderator Devschuur®

!litemod

Gewoon zorgen dat je de hele letter 'uit weet te knippen' en dit herschalen naar het formaat van de letters waartegen je matched.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Je kan ook intel's OpenCV libs in PHP gebruiken, je kan er o.a. ook gezichten mee herkennen, en d.m.v. learning ook wel tekst.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op maandag 19 september 2011 @ 13:07:
Gewoon zorgen dat je de hele letter 'uit weet te knippen' en dit herschalen naar het formaat van de letters waartegen je matched.
Duidelijk. Ik vroeg me af of je misschien iets meer weet of het "match-proccess". Dus de wijze van matchen. Ik begin me af te vragen of pixels-based de juiste benadering is?

Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 06-10 09:50

Armageddon_2k

Trotse eigenaar: Yamaha R6

Verwijderd schreef op dinsdag 20 september 2011 @ 10:57:
[...]
Duidelijk. Ik vroeg me af of je misschien iets meer weet of het "match-proccess". Dus de wijze van matchen. Ik begin me af te vragen of pixels-based de juiste benadering is?
Je zegt dat het gaat over een screenshot zonder rotatie, maar er is wel pixel verschaling mogelijk.
is je height/widht scaling altijd gelijk?
Je kan 2 verschillende dingen doen om het simpel op te lossen.
Optie1
Je kan voor elke set een scaled version maken.
Dan wordt een a_scale_2 bijvoorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php 
$a = array( 
    "00111111", 
    "00111111", 
    "11001100", 
    "11001100", 
    "00111111" 
    "00111111" 
); 
?>


Deze array's kan je natuurlijk zelf met een programmatje snel uitdraaien.
Optie 2
Wat je ook kunt doen is je matching functie een scale option meegeven.
Waarschijnlijk loop je door de pixels heen. En ipv elke pixel 1 hit te laten geven, laat je elke pixel x scale hitten.
Pagina: 1