Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Probleem bij Tesseract OCR arguments

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

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Wanneer ik tesseract aanroep vanuit C# met de volgende arguments:

C#:
1
2
3
4
5
6
7
8
9
string imageFilePath = @"C:\image.bmp";
string outputFilePath= @"C:\output";

string arguments = string.Format(@"{0} {1}", imageFilePath, outputFilePath);

Process p = new Process();
p.StartInfo.FileName = Path.GetFullPath(@"tesseract\tesseract.exe");
p.StartInfo.Arguments = arguments;
p.Start();


dan werkt het prima, het bestand output.txt wordt netjes aangemaakt gevuld met de text op het plaatje.

Echter wanneer een spatie (' ') in één van de arguments zet werkt het niet meer. Dus ik dacht dan zet ik gewoon quotes om de arguments heen dan werkt het wel weer maar dat is niet het geval.

C#:
1
2
3
4
string imageFilePath = @"C:\directory met spaties\image.bmp";
string outputFilePath= @"C:\directory met spaties\output";

string arguments = string.Format(@"""{0}"" ""{1}""", imageFilePath, outputFilePath);


Doe ik iets verkeerd of kan tesseract gewoon niet met spaties omgaan? Of is het iets anders?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gezien de source van Tesseract te downloaden is moet dit toch niet zo heel moeilijk te achterhalen zijn lijkt me? Even snuffelen/debuggen in de main() lijkt me al voldoende info op te leveren.

[ Voor 19% gewijzigd door RobIII op 15-10-2007 00:16 ]

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


  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Goed idee, ik ga eens kijken of ik er uit kom.

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Ik spreek zelf geen C++ maar wat ik uit de broncode kan halen lijkt het erop dat de arguments geen whitespaces mogen bevatten. Kan iemand dat bevestigen, want dat weet ik niet zeker? Op internet heb ik ook niks kunnen vinden.

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Na veel proberen ben ik er achter gekomen dat tesseract geen spaties accepteert in de arguments. De oplossing voor Windows is om de path arguments om te zetten naar het korte formaat (DOS).

C:\plaatje met spaties.bmp wordt dan: "C:\\PLAATJ~1.BMP"

In C# heb ik de conversie als volgt gedaan:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        public static string GetShortPathName(string path)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }
            string shortPath = path;
            StringBuilder sb = new StringBuilder(256);
            if (GetShortPathName(path, sb, sb.Capacity) > 0)
            {
                shortPath = sb.ToString();
            }
            return shortPath;
        }

        [DllImport("kernel32.dll")]
        static extern int GetShortPathName(string longPath, StringBuilder buffer, int bufferSize);


Tevens accepteert tesseract alleen de path arguments in lowercase.