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); } }
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_ }