關於我自己

2014年11月25日 星期二

OpenCV + cvFindContours + tesseract-ocr

主指:

利用cvFindContour找出輪廓,然後依照輪廓的大小在去排除較小的輪廓

之後截取圖片利用  tesseract-ocr 辨識


缺點:

1.看來在符號部分必須還要在一次細部輪廓大小判別

2.在確認的部分,看來tesseract-ocr對英文跟數字的辨識率蠻高的說, 

 不過在符號的部分,卻沒有辨識,可能要在利用 tesseract-ocr的訓練器在截取 訓練符號的樣本了

流程:

1.樣本圖片:

 

2.在cvFindContours 尋找輪廓 ~在DOS部份我顯示出輪廓的高度

 

3.我把它存成tif檔案 ~但是肉眼一看明顯2.tif就是不及格的圖片

 

4.所以就加入限制

 for (ptr =contours; ptr != NULL; ptr = ptr->h_next)
{
     double reg = fabs(cvContourArea(ptr, CV_WHOLE_SEQ));
     //if(reg >600 && reg <10000)
     {
      CvScalar ext_color = CV_RGB( 255, 255, 255 ); //randomly coloring different contours
      CvRect rectEst = cvBoundingRect( ptr, 0 );
      CvPoint pt1,pt2;
      pt1.x = rectEst.x;
      pt1.y = rectEst.y;
      pt2.x = rectEst.x+ rectEst.width;
      pt2.y = rectEst.y+ rectEst.height;
      printf("%d \n",(pt2.y-pt1.y));
      int thickness =1 ;
      cvRectangle( img3, pt1, pt2, CV_RGB(255,255,255 ), thickness );
     
      cvSetImageROI(img,rectEst);
      if((pt2.y-pt1.y)>30)
      {
      object_total++;
          char filename[50]; // buff is large enough to hold the entire formatted string
          sprintf(filename, "%d.tif", object_total);
          // printf(filename);
          cvSaveImage(filename,img,0);
      }
      cvResetImageROI(img);
     }
}

 

5.結合另一篇 (tesseract-ocr 文字辨識 ) 去辨識三張圖片~輸出文字

    tesseract::TessBaseAPI api;
    api.Init("", "eng", tesseract::OEM_DEFAULT);
    api.SetPageSegMode(static_cast<tesseract::PageSegMode>(7));
    api.SetOutputName("out");
    for(int i=1;i<=object_total;i++){
    char image[256];
    sprintf(image, "%d.tif", i);
    PIX   *pixs = pixRead(image);
    STRING text_out;
    api.ProcessPages(image, NULL, 0, &text_out);
    FILE *output;
     char itxt[256];
    sprintf(itxt, "%d.txt", i);
    output=fopen(itxt,"wb");
    fwrite( text_out.string(), 1, text_out.length(), output );
    fclose(output);
    string  Text01 = UTF8ToBig5(text_out.string());
    cout<<"輸出文字:"<<Text01.c_str()<<endl;

    } 

擷取樣本圖示:

1.tif

 2.tif

 

3.tif 

 

沒有留言:

張貼留言