In mijn C++ applicatie zou ik graag gebruik maken van de OCR software in Microsoft Office Document Imaging (MODI). Nu is dit kinderlijk eenvoudig in C#, door simpelweg de reference MODI 12.0 Type Library aan je project toe te voegen. Vervolgens is het slechts een kwestie van een paar regeltjes code:
Volgens Microsoft zou dit ook mogelijk moeten zijn in C++:
Na wat zoeken op het internet ben ik een aantal potentiele oplossingen tegen gekomen:
Een van mijn belangrijkste eisen is dat de code zoveel mogelijk platform onafhankelijk blijft. Uiteraard besef ik dat het gebruik van de OCR software in MODI tegenstrijdig is, echter is het idee dat dit als losstaand component in mijn code past en zo in de toekomst (indien gewenst) makkelijk te vervangen is door een ander (platform onafhankelijk) alternatief.
Mijn huidige oplossing is een simpele system call naar een C# applicatie met als parameters de locatie van een afbeelding en een locatie voor de output. Dit is natuurlijk ook niet erg mooi en bovendien heeft dit een efficientie probleem tot gevolg, doordat ik me bezig hou met tekst herkenning in videos en daardoor elke afbeelding (frame) eerst van het geheugen weg moet schrijven naar een bestand. Dit veroorzaakt een hoop I/O overhead, wat het gehele systeem significant veel trager maakt. Al moet ik toegeven dat ik ook nog niet direct een oplossing heb gevonden dit efficientie probleem te omzeilen in C#. Misschien is dit zelfs wel onmogelijk erg lastig.
De vraag is nu: Hoe zouden jullie dit oplossen? Zie ik misschien iets over het hoofd?
C#:
1
2
3
4
5
6
7
8
| string OCR(string filename) { MODI.Document md = new MODI.Document(); md.Create(filename); md.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true); MODI.Image image = (MODI.Image)md.Images[0]; return image.Layout.Text; } |
Volgens Microsoft zou dit ook mogelijk moeten zijn in C++:
Helaas is het voor mij een groot raadsel hoe ik dit precies zou moeten doen, omdat deze library volgens mij in de MDIVWCTL.DLL zit en er verder geen lib en header files zijn om te includen.A programmer can use a number of different programming languages, for example Visual Basic, C++, or VBScript, to manipulate these objects by invoking methods on the object or by getting and setting the object's properties.
Na wat zoeken op het internet ben ik een aantal potentiele oplossingen tegen gekomen:
- An article on how to use MODI for OCR in Visual C++
- OCR Images Using Microsoft Office'2003 SDK
- DLL Tutorial For Beginners
Een van mijn belangrijkste eisen is dat de code zoveel mogelijk platform onafhankelijk blijft. Uiteraard besef ik dat het gebruik van de OCR software in MODI tegenstrijdig is, echter is het idee dat dit als losstaand component in mijn code past en zo in de toekomst (indien gewenst) makkelijk te vervangen is door een ander (platform onafhankelijk) alternatief.
Mijn huidige oplossing is een simpele system call naar een C# applicatie met als parameters de locatie van een afbeelding en een locatie voor de output. Dit is natuurlijk ook niet erg mooi en bovendien heeft dit een efficientie probleem tot gevolg, doordat ik me bezig hou met tekst herkenning in videos en daardoor elke afbeelding (frame) eerst van het geheugen weg moet schrijven naar een bestand. Dit veroorzaakt een hoop I/O overhead, wat het gehele systeem significant veel trager maakt. Al moet ik toegeven dat ik ook nog niet direct een oplossing heb gevonden dit efficientie probleem te omzeilen in C#. Misschien is dit zelfs wel onmogelijk erg lastig.
De vraag is nu: Hoe zouden jullie dit oplossen? Zie ik misschien iets over het hoofd?