2012-01-24 2 views
3

tesseract ORC가 이미지 파일을 실행하여 내용을 스캔하도록하고 싶습니다.
문제는 tesseract가 TIFF를 요구할뿐만 아니라 tiff 파일이 특정 형식이어야한다는 것입니다.
tesseract OCR에서 읽을 수있는 TIFF 파일을 만드는 방법은 무엇입니까?

그냥 일반 TIFF 파일로, 내가 얻을 : 지금까지 내가 해독제를 찾기 위해 관리해야

[email protected]:~/Desktop# tesseract crap.tif crap.txt 
Tesseract Open Source OCR Engine 
check_legal_image_size:Error:Only 1,2,4,5,6,8 bpp are supported:32 
Segmentation fault 

합니다.
그것은 256
enter image description here
에 "색상의 최대 수를", 김프를 사용하여 이미지> 모드> 인덱스로 이동하고, "최적의 팔레트를 생성"설정으로 구성 는 내가 저장 "전에 한 번 더 트릭을 할해야 같이".
레이어로 이동> 투명도> 알파 채널 제거 투명도가 제거되므로 TIF 이미지에 투명도가 적용될 수 없으므로 투명도가 제거됩니다.

enter image description here

지금 문제는 내 입력 이미지가 C 번호에서 오는이며, AFORGE.NET 이미지 분석 필터를 전처리한다.

는 또한 LibTiff의 .NET 포트, 여기에 컬러 팔레트와 이미지를 작성하는 방법의 예를 발견 :
http://bitmiracle.com/libtiff/help/create-tiff-with-palette-(color-map).aspx

하지만 소스에서 데이터를 가져 오는 방법을 모르는 TIFF (잘못된 팔레트가있는 팔레트)를 대상 팔레트 형식 (올바른 팔레트 형식)으로 설정하십시오.

답변

2

그레이 스케일 TIFF는 tesseract가 좋다고 들었습니다.

그래서 그레이 스케일 것들에 TIFF 이미지의 변환을위한 다음 코드를보십시오 :

using (Tiff tif = Tiff.Open(@"input.tif", "r")) 
{ 
    FieldValue[] value = tif.GetField(TiffTag.IMAGEWIDTH); 
    int width = value[0].ToInt(); 

    value = tif.GetField(TiffTag.IMAGELENGTH); 
    int height = value[0].ToInt(); 

    int xresolution = -1; 
    value = tif.GetField(TiffTag.XRESOLUTION); 
    if (value != null) 
     xresolution = value[0].ToInt(); 

    int yresolution = -1; 
    value = tif.GetField(TiffTag.YRESOLUTION); 
    if (value != null) 
     yresolution = value[0].ToInt(); 

    int[] raster = new int[height * width]; 
    if (!tif.ReadRGBAImageOriented(width, height, raster, Orientation.TOPLEFT)) 
    { 
     System.Windows.Forms.MessageBox.Show("Could not read image"); 
     return; 
    } 

    string fileName = "grayscale.tif"; 
    using (Tiff output = Tiff.Open(fileName, "w")) 
    { 
     output.SetField(TiffTag.IMAGEWIDTH, width); 
     output.SetField(TiffTag.IMAGELENGTH, height); 
     output.SetField(TiffTag.ROWSPERSTRIP, 1); 
     output.SetField(TiffTag.SAMPLESPERPIXEL, 1); 
     output.SetField(TiffTag.BITSPERSAMPLE, 8); 
     output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG); 
     output.SetField(TiffTag.COMPRESSION, Compression.LZW); 
     output.SetField(TiffTag.FILLORDER, FillOrder.MSB2LSB); 
     output.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK); 

     if (xresolution != -1 && yresolution != -1) 
     { 
      output.SetField(TiffTag.XRESOLUTION, xresolution); 
      output.SetField(TiffTag.YRESOLUTION, yresolution); 
     } 

     byte[] samples = new byte[width]; 
     for (int y = 0, index = 0; y < height; y++) 
     { 
      for (int x = 0; x < width; x++) 
      { 
       int rgb = raster[index++]; 

       // compute pixel brightness taking human eye's sensitivity 
       // to each of red, green and blue colors into account 
       byte gray = (byte)(Tiff.GetR(rgb) * 0.299 + Tiff.GetG(rgb) * 0.587 + Tiff.GetB(rgb) * 0.114); 

       // Alternative formulas for RGB -> Gray conversion 

       //byte gray = (byte)(Tiff.GetR(rgb) * 0.2125 + Tiff.GetG(rgb) * 0.7154 + Tiff.GetB(rgb) * 0.0721); 
       //byte gray = (byte)((Tiff.GetR(rgb) + Tiff.GetG(rgb) + Tiff.GetB(rgb))/3); 

       samples[x] = gray; 
      } 

      output.WriteEncodedStrip(y, samples, samples.Length); 
     } 
    } 
} 

희망, 그것은 트릭을 할 것입니다.

2

나는 Tesseract에서 같은 문제가 있었지만, 귀하의 충고 덕분에 김프를 사용하여 컬러 파일의 .tif를 그레이 스케일로 변경했습니다. 이미지 모드 - 그레이 스케일 명령을 사용하고 tif로 다시 저장하면 쉽게 완료 할 수 있습니다. 이것이 이미지 문제를 해결하기 위해 명령 줄을 사용하고 싶지 않은 사람에게 도움이되기를 바랍니다.

+0

기존 솔루션에 대한 좋은 대안입니다. +1 –

관련 문제