Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[C#] PDF document lezen voor specifiek 'teken'

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • Douweegbertje
  • Registratie: mei 2008
  • Laatst online: 22-04 12:34

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Ik ben even met een hobby projectje bezig en in het kort is het de bedoeling dat ik een globale dir blijf controleren voor nieuwe PDF's. Vervolgens moet ik checken of er in dat PDF een specifieke pagina is met bijvoorbeeld een vooraf gedefinieerd woord/teken/plaatje (hoe of wat het word maakt niet uit).
Indien er zo'n pagina is, dan wordt het PDF bestand daarop gesplitst, en uiteraard valt die specifieke scheidingspagina in het niet :)

Nu heb ik gewoon de basis al klaar en loop ik door de PDF's heen, maar het 'probleem' is dat het altijd ingescande PDF's zijn. Oftewel je kunt niet zomaar 'tekst' lezen. Immers is het eigenlijk een plaatje en geen digitaal document.

Ik loop nu eigenlijk een beetje vast op hoe ik nu verder moet gaan. Ik wil liever niet het wiel opnieuw uitvinden en m'n C# kennis is gewoon miniem. Waar ik zelf aan zit te denken is dat het 'schutblad' een tekst bevat met een bepaalde grootte zodat ik deze dan kan vergelijken als een image. Het andere waar ik aan dacht is een barcode. Ik ga er vanuit, al helpt google hierin niet echt; dat dit relatief gezien makkelijk te parsen moet zijn.

Hebben jullie wat pointers waar ik naar kan kijken, of domweg een voorbeeld van iemand die het zelfde wil/doet?

Acties:
  • 0Henk 'm!

  • RobIII
  • Registratie: december 2001
  • Nu online

RobIII

Moderator Devschuur®

^ Romeinse 3 ja!

Al eens gezocht op "c# image (of pattern) recognition"? Is toch zat te vinden denk ik zo?
quote:
Douweegbertje schreef op zondag 28 juni 2015 @ 01:29:
hoe of wat het word maakt niet uit
Blijkbaar heb je daar enige "say" in? Kun je dan niet beter vragen of "men" ergens in de meta-data van die PDF ofzo een bepaald getal (op welke pagina te splitsen) ofzo zet? Of sterker: (er zal vast een reden voor zijn) waarom laat je niet meteen 2 (of meerdere) pdf's aanleveren? Of een extra file met daarin wat "splitsgegevens" ofzo?

Verder moet een barcode (of, hey, een QR code, hebben die dingen ook nog eens nut :P ) ook prima te doen zijn. Andere term waar je mogelijk iets aan hebt: OCR.

RobIII wijzigde deze reactie 28-06-2015 01:52 (99%)

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


Acties:
  • 0Henk 'm!

  • Damic
  • Registratie: september 2003
  • Laatst online: 07:20

Damic

Afwezig soms

OCR gaat volgens mij niet op een image, maar ik snap waar je op doelt.

Damic wijzigde deze reactie 28-06-2015 09:00 (28%)

Ik kan vanalles en nog wat maar niets te goei, klinkt bekent?? Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0Henk 'm!

  • Mostrow
  • Registratie: januari 2011
  • Laatst online: 10:05
Moet juist wel werken op een image volgens mij?
Een scan van een document is toch ook niks anders (tijdelijk) bestand met daarin een collectie bytes?

De eerste hit door RobIII's aangegeven google search gaat zelfs over het vergelijken over het vergelijken van genomen afbeeldingen via de webcam.

En er worden op deze thread van stackoverflow ook twee ocr libraries aangeraden voor dit doel.

Acties:
  • 0Henk 'm!

  • RobIII
  • Registratie: december 2001
  • Nu online

RobIII

Moderator Devschuur®

^ Romeinse 3 ja!

quote:
Damic schreef op zondag 28 juni 2015 @ 08:59:
OCR gaat volgens mij niet op een image, maar ik snap waar je op doelt.
Lees de eerste regel tekst van m'n OCR link eens 8)7
quote:
Optical character recognition (OCR) is the mechanical or electronic conversion of images of typewritten or printed text into machine-encoded text.

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


Acties:
  • 0Henk 'm!

  • Damic
  • Registratie: september 2003
  • Laatst online: 07:20

Damic

Afwezig soms

Ha, dat is handig om te weten. Nu nog goede software vinden dat deftig ocr ondersteund ;)

Ik kan vanalles en nog wat maar niets te goei, klinkt bekent?? Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0Henk 'm!

  • Killah_Priest
  • Registratie: augustus 2001
  • Laatst online: 22-04 19:50
Tesseract is een goede open OCR engine .
Ik kan daar zelfs OCR mee doen vanuit Powershell.

  • Douweegbertje
  • Registratie: mei 2008
  • Laatst online: 22-04 12:34

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
quote:
RobIII schreef op zondag 28 juni 2015 @ 01:40:
Al eens gezocht op "c# image (of pattern) recognition"? Is toch zat te vinden denk ik zo?

[...]

Blijkbaar heb je daar enige "say" in? Kun je dan niet beter vragen of "men" ergens in de meta-data van die PDF ofzo een bepaald getal (op welke pagina te splitsen) ofzo zet? Of sterker: (er zal vast een reden voor zijn) waarom laat je niet meteen 2 (of meerdere) pdf's aanleveren? Of een extra file met daarin wat "splitsgegevens" ofzo?

Verder moet een barcode (of, hey, een QR code, hebben die dingen ook nog eens nut :P ) ook prima te doen zijn. Andere term waar je mogelijk iets aan hebt: OCR.
De PDF's worden gegenereerd door de printer met scannen. Indien er een grote batch ingescand moet worden is het makkelijk en efficiënter om er een schutblad tussen de verschillende 'stukken' te doen dan het handmatig 1 voor 1 in te voeren.


En ja, met 'image recognition' kun je inderdaad wat, maar ik zie nog niet helemaal in hoe je dan een een stuk op een PDF zou kunnen vergelijken met een image. Immers zou je dan van het stukje op de PDF een 'plaatje' moeten maken.

Douweegbertje wijzigde deze reactie 29-06-2015 09:17 (9%)


  • roy-t
  • Registratie: oktober 2004
  • Laatst online: 08-04 17:03
Om met OCR of zoiets een specifiek woord foutloos te detecteren is best wel lastig. Maar inderdaad een barcode detecteren is makkelijker. Nog makkelijker is het om een QR code (zo'n vierkante bar code) te detecteren. En daar is ontzettend veel over te vinden op google.

Deze library voor .net ondersteund 'detection and recognition of QR code captures' https://qrcodenet.codeplex.com lijkt me precies wat je nodig hebt!

Google heeft ook een library hiervoor: ZXING. Aan de hand van dit antwoord op SE lijkt het erg makkelijk om hier een code mee te detecteren:

http://stackoverflow.com/...tector-sample-using-zxing

Disclaimer: ik heb beide projecten nog nooit gebruikt dus het kan geen kwaad om eerst zelf nog even verder te zoeken

roy-t wijzigde deze reactie 29-06-2015 09:24 (30%)

~ Mijn prog blog! ~ @RoyTries


  • jeroen3
  • Registratie: mei 2010
  • Laatst online: 12:51
Adobe heeft een SDK voor Acrobat. Zit daar niets nuttigs in?

Ik weet dat een tool bestaat die een hoopje PDF bestanden leest en hernoemt naar factuurnummer/datum die hij uit de ingescande file haalt. Helaas lang geleden, dus ik weet de naam niet meer.
En het zijn nou niet de meest veilige zoektermen om meteen free/share-ware voor te gaan downloaden.

  • RobIII
  • Registratie: december 2001
  • Nu online

RobIII

Moderator Devschuur®

^ Romeinse 3 ja!

quote:
Douweegbertje schreef op maandag 29 juni 2015 @ 09:15:
En ja, met 'image recognition' kun je inderdaad wat, maar ik zie nog niet helemaal in hoe je dan een een stuk op een PDF zou kunnen vergelijken met een image. Immers zou je dan van het stukje op de PDF een 'plaatje' moeten maken.
Ik begreep eigenlijk dat je dat al klaar had?
quote:
Douweegbertje schreef op zondag 28 juni 2015 @ 01:29:
Nu heb ik gewoon de basis al klaar en loop ik door de PDF's heen
Misschien dan even aangeven wat je nu precies wel en wat precies niet hebt? Hoe "loop" je nu door de PDF's heen? Ik begrijp dat je dan dus eigenlijk een foreach over een Directory.GetFiles(path, "*.pdf") bedoelt ofzoiets? Of kun je de PDF's al lezen en er (per 'pagina') een imageuit extraheren?

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Douweegbertje
  • Registratie: mei 2008
  • Laatst online: 22-04 12:34

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Beter verwoord loop ik zowel door alle files in de folder indien ze worden toegevoegd, als dat ik door een PDF zelf heen ga voor elke pagina.
Ik heb dus een watcher, en itereer niet door de dir heen. Uiteindelijk kom je gewoon bij het stukje
code:
1
PdfDocument inputDocument = PdfReader.Open(filename, PdfDocumentOpenMode.Import);

En vervolgens loop ik door elke pagina van het PDF document.

Ik had dat al zo ongeveer in elkaar om het volgende te proberen
code:
1
2
PdfDictionary.PdfStream stream = page.Contents.Elements.GetDictionary(index).Stream;
                        outputText += new PDFParser().ExtractTextFromPDFBytes(stream.Value);

Maar dat werkt niet met ingescande PDF's (?) .

Ik gebruikte al PDFSharp, dus ik zal eens kijken wat er gebeurt als ik het volgende gebruik;
http://www.pdfsharp.net/wiki/ExportImages-sample.ashx

Al denk ik niet dat ik zo een barcode of w/e eruit kan krijgen...

  • EddoH
  • Registratie: maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Een pdf pagina bestaat uit verschillende typen objecten (text/images, etc). Als je een ingescande pagina als PDF hebt, zul je hoogstwaarschijnlijk op elke pdf pagina 1 image object hebben: de scan van de pagina.

Met een QR code scanner kun je dan toch een eventuele QR code in die afbeelding detecteren? Dit zal waarschijnlijk moeten gebeuren in 2 stappen: detecteren wáár de QR code op de pagina staat, om vervolgens de QR code te decoderen. De QR code scanner op mijn telefoon kan ook van een afbeelding zelf herkennen waar de QR code staat. Er zullen vast wel libs zijn om dit relatief makkelijk voor elkaar te krijgen.

  • RobIII
  • Registratie: december 2001
  • Nu online

RobIII

Moderator Devschuur®

^ Romeinse 3 ja!

quote:
Douweegbertje schreef op maandag 29 juni 2015 @ 10:23:
Al denk ik niet dat ik zo een barcode of w/e eruit kan krijgen...
Nee, natuurlijk niet. Je PDF bevat gescande pagina's; niets anders dan een blob van bytes (in TIFF of JPEG of whatever formaat). En bij een multi-page PDF heb je dus meerdere van die blobs (plaatjes). Die zul je vervolgens aan de volgende moeten voeren; be it je OCR reader, QR code scanner of wat dan ook. Waarschijnlijk kun je die images wel als een stream benaderen in je PDF en door passen naar de OCQ/QR/whatever zonder dat je er verder aan hoeft te komen, maar het kan ook zijn dat je ze even moet encapsulaten in een bitmap of, hell, zelfs mogelijk tijdelijk naar een temp-directory wegschrijven als afbeelding als die libraries alleen maar een bestandspad accepteren. Hoe je 't zaakje inhoudelijk aan elkaar knoopt valt pas iets over te zeggen als je een keuze hebt gemaakt voor een library en die keuze kun je, IMHO, pas maken als je met een paar van die dingen gespeeld hebt / documentatie gelezen hebt en gekeken hebt waar je de meeste kans hebt te bereiken wat je wil en/of wat je het best bevalt.

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Douweegbertje
  • Registratie: mei 2008
  • Laatst online: 22-04 12:34

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
quote:
RobIII schreef op maandag 29 juni 2015 @ 11:54:
[...]

Nee, natuurlijk niet. Je PDF bevat gescande pagina's; niets anders dan een blob van bytes (in TIFF of JPEG of whatever formaat). En bij een multi-page PDF heb je dus meerdere van die blobs (plaatjes). Die zul je vervolgens aan de volgende moeten voeren; be it je OCR reader, QR code scanner of wat dan ook. Waarschijnlijk kun je die images wel als een stream benaderen in je PDF en door passen naar de OCQ/QR/whatever zonder dat je er verder aan hoeft te komen, maar het kan ook zijn dat je ze even moet encapsulaten in een bitmap of, hell, zelfs mogelijk tijdelijk naar een temp-directory wegschrijven als afbeelding als die libraries alleen maar een bestandspad accepteren. Hoe je 't zaakje inhoudelijk aan elkaar knoopt valt pas iets over te zeggen als je een keuze hebt gemaakt voor een library en die keuze kun je, IMHO, pas maken als je met een paar van die dingen gespeeld hebt / documentatie gelezen hebt en gekeken hebt waar je de meeste kans hebt te bereiken wat je wil en/of wat je het best bevalt.
Ik heb nu gekozen om het PDF te splitten in losse pagina's, hier worden weer images van gemaakt en vervolgens wordt er gekeken of er barcode in staat. Dan wordt het daar weer op gesplit in het originele bestand. De procedure wordt nu ook dat ik altijd de eerste pagina check waar dan het schutblad moet staan, indien dat niet zo is dan check ik de rest niet meer.

Het kan allemaal wat efficiënter denk ik (weet ik wel zeker :+) maar voor nu is het helemaal prima.

  • ido
  • Registratie: januari 2001
  • Niet online
quote:
Douweegbertje schreef op zondag 28 juni 2015 @ 01:29:
Ik ben even met een hobby projectje bezig ...
Andere mogelijkheid die ik zelf ook al eens heb gebruikt, is een python script, die het PDF bestand opslaat/converteert naar een zwart-wit JPG.
Als het teken waar je naar op zoek bent, altijd op een vaste plaats staat, dan kun je vervolgens die regel inlezen (horizontaal vanaf pixel 1 op die regel tot de laatste pixel op de regel) en tel je gewoon hoeveel zwarte en witte pixels je uiteindelijjk hebt. Staat het logo in dat bestand niet, dan zul je bijv. meer witte pixels hebben, en staat het logo/teken er wel, dan heb je meer zwarte pixels .

info: http://effbot.org/imagingbook/image.htm met dus gebruik van getpixel

Misschien iets omslachtig, maar het werkt :)

ido wijzigde deze reactie 29-06-2015 15:01 (4%)


  • Woy
  • Registratie: april 2000
  • Niet online

Woy

Moderator Devschuur®
quote:
ido schreef op maandag 29 juni 2015 @ 14:50:
[...]


Andere mogelijkheid die ik zelf ook al eens heb gebruikt, is een python script, die het PDF bestand opslaat/converteert naar een zwart-wit JPG.
Als het teken waar je naar op zoek bent, altijd op een vaste plaats staat, dan kun je vervolgens die regel inlezen (horizontaal vanaf pixel 1 op die regel tot de laatste pixel op de regel) en tel je gewoon hoeveel zwarte en witte pixels je uiteindelijjk hebt. Staat het logo in dat bestand niet, dan zul je bijv. meer witte pixels hebben, en staat het logo/teken er wel, dan heb je meer zwarte pixels .

info: http://effbot.org/imagingbook/image.htm met dus gebruik van getpixel

Misschien iets omslachtig, maar het werkt :)
Dat is natuurlijk wel erg foutgevoelig, aangezien een gescand document nooit erg goed pixel-precies overeenkomt. In het geval van de TS zou ik gewoon een blad met een specifieke QR code en niks anders gebruiken en die aan een QR code lib voeren. Enige voorwaarde is dan dat de genoemde QR code niet op andere pagina's voor mag komen ( Het scannen van de FAQ hoe deze applicatie werkt zal dus niet goed gaan :+ )

je krijgt dan simpel gezegd het volgende (pseudo-code)
C#:
1
2
3
4
5
6
7
8
9
10
foreach( var file in files )
{
    foreach(var page in file)
    {
        if(page.ContainsQrCode())
        {
            DoMagic();
        }
    }
}

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1


OnePlus 7 Microsoft Xbox One S All-Digital Edition LG W7 Google Pixel 3 XL OnePlus 6T (6GB ram) FIFA 19 Samsung Galaxy S10 Sony PlayStation 5

Tweakers vormt samen met Tweakers Elect, Hardware.Info, Autotrack, Nationale Vacaturebank, Intermediair en Independer de Persgroep Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True