Ejemplo n.º 1
0
void GImageEditor::imageNormalisation(GLetter* letter){
    //cout<<inputData.data["action"]; 
    //string path=inputData.data["root"]+"/edit/letterImg.jpg";
    if(inputData.data["action"]=="imageNormalisation"){
        if(!letter->maskOriginal.status||letter->maskOriginal.mW!=128){
           if(letter->maskOriginal.mW!=128)cout<<"new original"<<endl;
           letter->maskOriginal=letter->mask128;   //save original mask
           letter->maskOriginal.status=1;
           //cout<<" save original";
        }else{
           letter->mask128=letter->maskOriginal;   //restore original mask
        }    
        GBitmap *img=letter->mask128.unPackMask(); 
        int w=img->columns();
        int h=img->rows();
        GBitmap *outBitmap=GBitmap::create(PICT_SIZE,PICT_SIZE);
        int x0=letter->mask128.xMask+PICT_SIZE/2;
        int y0=letter->mask128.yMask+PICT_SIZE/2;
        outBitmap->drawImg(img, x0,y0); 
        adaptiveFiltration1(outBitmap,1,2);
        //string mode="jpg";
        //WriteImageData(outBitmap, path, 0,mode);
        img->destroy();
        img=GBitmap::createRegion(outBitmap,x0, y0, w, h);
        //WriteImageData(img, "/_1.jpg", 0);
        letter->mask128.packBitMask128(img);
        img->destroy();
        outBitmap->destroy();
        letter->reloadMask();
    }   
    if(inputData.data["action"]=="revertImage"){
        cout<<"letter->maskOriginal.status="<<(short)letter->maskOriginal.status;
        if(letter->maskOriginal.status){
           letter->mask128=letter->maskOriginal;   //restore original mask
        }
        letter->reloadMask();
    }
    if(inputData.data["action"]=="setFocalPoints"){

        vector<OCRPoint>str;
        GBitmap *img=letter->mask128.unPackMask();
        GGraph outGraph=GGraph(PICT_SIZE,PICT_SIZE);
        int x0=letter->mask128.xMask+PICT_SIZE/2;
        int y0=letter->mask128.yMask+PICT_SIZE/2;
        outGraph.drawImg(img, x0,y0);
     
        
        outGraph.StablePoint(str);
        
        //WriteImageData(outBitmap, "/_Image2OCR/_2.jpg", 0); //exit(0);
        
        //cout<<"new size="<<str->size()<<" x0="<<x0<<" y0="<<y0<<endl;
        letter->focalPoint->resize(0);
        for(int i=0;i<str.size();i++){
            str[i].x-=PICT_SIZE/2;
            str[i].y-=PICT_SIZE/2;
            letter->focalPoint->push_back(str[i]);
            cout<<"x="<<letter->fPoint[i].x<<" y="<<letter->fPoint[i].y<<" p="<<(int)letter->fPoint[i].type<<endl;
        }
        //exit(0);
        
    }
}
Ejemplo n.º 2
0
void GBitsetOCR::pageOCR(GLogicProcessor *logicProcessor, int mode){
	if(strArray[0].size()==0)return;
    if(!aliKali)return;    
    if(aliKali->letterCount()<1)return;

TIME_START
    int print=0;
    
	string letter;
	mainString="";
    vector<OCRMatch>pageText;
    
    
    int indexString=0;  //14  строка для распознавания. //-2 full page //-1 debug mode
    
    inputData.lineSize.resize(5);
    
    if(inputData.data["ocrData"]=="lineOCR"){
        indexString=atoi(inputData.data["index"].c_str());
        inputData.data["inputFile"]=inputData.data["root"]+"/edit/OCR/_OCR/_line.jpg";
    }
 
    vector<wordOCR>lineText;
    vector<OCRPoint>focalPoint;        //массив фокальных точек
    vector<OCRFocalLine>focalLine;     //массив фокальных линий
    
    string pathText;
    ((GVector*)inputData.prefVector)->getStr(20,pathText);
    GBitmap* pechaImg=((GImageEditor*)inputData.imageEditor)->LoadImageData(pathText,0);
    if(pechaImg->DetectGradations())pechaImg->binarisation(85,24);
    
    GGraph pechaGraph=GGraph(pechaImg);
    pechaGraph.focalLine(15);
    pechaGraph.focalPointXTL(focalPoint);
    pechaGraph.focalLineRecognition(focalPoint,focalLine);
    VStr2D<int>point2D;
    VStr2D<int>line2D;
    
    
    for(int lineIndex=0;lineIndex<focalLine.size();lineIndex++){
        cout<<"index="<<lineIndex<<" x="<<" alpha1="<<focalLine[lineIndex].alpha<<endl;
    }
    pechaGraph.setLineMatrix(focalPoint,focalLine,point2D,line2D,12);
    
    
    
    setMatrix=GBitsetMatrix::createRegion(inputBitmap,
                                         0,
                                         0,
                                         inputBitmap->columns(),
                                         inputBitmap->rows(),
                                         1,1,
                                         IMGNOFLIP
                                         );
   vector<OCRMatch>matchLine;
   pechaGraph.setLineCorrelation(focalPoint,focalLine,point2D,line2D,setMatrix,&matchLine);
   return;
    
    
   GBitmap *lineImg32=&setMatrix->drawLine;
   //((GImageEditor*)inputData.imageEditor)->WriteImageData(lineImg,"/_Image2OCR/_1Draw_.jpg",0); exit(0);
   //((GImageEditor*)inputData.imageEditor)->WriteImageData((GBitmap*)&setMatrix->drawPoint,"/_Image2OCR/_1Draw_.jpg",0); exit(0);
   //((GImageEditor*)inputData.imageEditor)->WriteImageDataRGB(setMatrix->drawDataRGB,"/_Image2OCR/_1DrawRGB.jpg",0);
   //((GImageEditor*)inputData.imageEditor)->WriteImageData(lineImg32,"/_Image2OCR/_1Draw32.jpg",0); exit(0);
   
#ifdef DEBUGLVL_DRAW         
             ((GImageEditor*)inputData.imageEditor)->WriteImageDataRGB(setMatrix->drawDataRGB,"/_Image2OCR/1Draw.jpg",0);
             ((GImageEditor*)inputData.imageEditor)->WriteImageData(setMatrix->drawPoint,"/_Image2OCR/1Draw_.jpg",0);
#endif
             string strW;
             vector<ushort>letterX;
             vector<OCRMatch>line;
             vector<OCRMatch>dLine;
             vector<OCRMatch>resultLine;
             map<vector<short>,int>searchResult;

             if(indexString>-2){ cout<<"OCR "; TIME_PRINT_ }