Question

I'm trying to use flexicapture SDK for verification step. when i'm trying to obtain Recognized word count from IText object it returns 0 (zero). int wordCount = text.getRecognizedWordsCount() ;
wordCount is zero here ...

Work flow as below:
1.Load the engine
2.create project 
3.creating and adding images in batch obtained from project ( project.getBatches().AddNew("TestBatch") )
4.Recognize batch using batch object (batch.Recognize(null, RecognitionModeEnum.RM_ReRecognizeAll,null) ) 
5. Start verification session 
6. enable context verification and disable group verification 
7. Get work set from session 
8. FOR ALL Work Set: get verification group 
9. FOR ALL Verification group: get verification object 
10. FOR each verification object: Get Fields ( under context verification ) 
11. obtained IField object 
12. get IFieldValue object from Field object 
13. Get IText object ( IText text = fieldValue.getAsText()  ) 
14. get recognized word count ( int wordCount = text.getRecognizedWordsCount() )
             here i'm getting 0 as result ( wordCount = 0 ) 

Pls suggest some solution; My main task to get Every fieldValue, for each word or each character we need to confidence level.

// © ABBYY. 2012.

// SAMPLES code is property of ABBYY, exclusive rights are reserved.

//

// DEVELOPER is allowed to incorporate SAMPLES into his own APPLICATION and modify it under

// the terms of License Agreement between ABBYY and DEVELOPER.

import java.io.File;
import java.io.IOException;
import java.sql.BatchUpdateException;

import com.abbyy.FCEngine.*;

public class VerificationStep {


    private static Object verificationWorkSet(Object object) {
        // TODO Auto-generated method stub
        return null;
    }

    private static void trace( String txt ) 
    {
        System.out.println( txt );
    }

    static private String samplesFolder;
    static private String projectFolder;
    static private String serialNumber;
    static private String dllPath;

    static {

        samplesFolder = "C:\\ProgramData\\ABBYY\\SDK\\10\\FlexiCapture Engine\\Samples\\";
        projectFolder = "C:\\Users\\Nitin\\FlexicaptureTest\\flexiverificationtest" ; 

        try {

            java.io.FileInputStream file = new java.io.FileInputStream( samplesFolder + "SampleConfig\\SamplesConfig.txt" );

            java.io.BufferedReader reader = new java.io.BufferedReader( new java.io.InputStreamReader( file ) );

            serialNumber = reader.readLine();

            dllPath = reader.readLine();

            file.close();

        } catch( java.io.IOException e ) {
             System.out.println( e.getMessage() );
             e.printStackTrace();
        }
    }

    public static void main( String[] args ) 
    {
        // Load Engine 
        try {
                trace("Loading engine");
                IEngineLoader engineLoader= Engine.CreateEngineOutprocLoader();
                IEngine engine = engineLoader.Load(serialNumber,dllPath);

                try{
                    IProject project = engine.OpenProject( projectFolder + "\\flexitest.fcproj" );

                    try {
                        IBatch batch = null ; 
                        trace( "Creating Batch..." );
                        IBatches batchs = project.getBatches(); 
                        if (batchs == null || batchs.getCount() == 0){
                            batch = project.getBatches().AddNew("TestBatch");
                        }
                        batch = batchs.getElement(0);
                        assert(batch == null);

                        try{
                            trace("opening batch");
                            batch.Open();

                            trace( "Adding pdfs..." );
                        //  batch.AddImage( projectFolder + "\\test1.jpg" );
                            batch.AddImage(projectFolder + "\\13-2-600MP0053-02012-DR-ME-0004_A_2.pdf");
                            //batch.AddImage(projectFolder + "\\15-2-600MP0053-02012-DR-ME-0006_A_2.pdf");
                            /*batch.AddImage( projectFolder + "\\16-2-600MP0053-02012-DR-ME-0017_A_2.pdf" );
                            batch.AddImage(projectFolder + "\\17-2-600MP0053-02012-DR-ME-0018_A_21.pdf");
                            batch.AddImage( projectFolder + "\\18-2-600MP0053-02012-DR-ME-0019_A_2.pdf" );
                            */
                            /*batch.AddImage(projectFolder + "\\02.tif");

                            batch.AddImage(projectFolder + "\\01.tif");*/
                            //batch.AddImage(projectFolder + "\\03.tif");
                            //batch.AddImage(projectFolder + "\\04.tif");


                            trace( "Reconizing pdfs..." );
                            batch.Recognize(null, RecognitionModeEnum.RM_ReRecognizeAll,null);

                            trace("Creating Verification object");
                            try {   
                                IVerificationSession verificationSession = project.StartVerification(null); 

                                try {

                                    //enabling context verification
                                    verificationSession.getOptions().setVerifyFields(true); 

                                    //disabling group verification 
                                    verificationSession.getOptions().setVerifyBaseSymbols(false);
                                    verificationSession.getOptions().setVerifyExtraSymbols(false);

                                    try {
                                        trace("Get NextWork Set");
                                        IVerificationWorkSet verificationWorkSet =  verificationSession.NextWorkSet();

                                        if ( verificationWorkSet == null){
                                            trace("first verificationWork set is null");
                                        }else {

                                            //process each work set in Verification session
                                            trace("Processing Work Set");
                                            while ( verificationWorkSet != null ){

                                                try{
                                                    trace("Geting Verification group");
                                                    //get next group for verification 
                                                    IVerificationGroup verificationGroup = verificationWorkSet.NextGroup(); 

                                                    if ( verificationGroup == null ){
                                                        trace("First verification group is null");
                                                    }else {
                                                        trace("processing each group of a workset");
                                                        //processing each group of a work set
                                                        while ( verificationGroup!= null){
                                                            int verificationObjectInAGroupCount =  verificationGroup.getCount(); 
                                                            trace("Total number of verification object: " +verificationObjectInAGroupCount);

                                                            for ( int iterator = 0; iterator<verificationObjectInAGroupCount; iterator++){
                                                                trace ( "getting and Processing "+(iterator +1 ) + " verification object of A group");

                                                                //getting verification object 
                                                                IVerificationObject verificationObject = verificationGroup.getElement(iterator);
                                                                if ( verificationObject == null){
                                                                    trace("verification object is null");
                                                                }else {
                                                                    if ( verificationObject.getType() == VerificationObjectTypeEnum.VOT_Group ) {
                                                                        IGroupVerificationObject groupVerificationObject = verificationObject.AsGroupVerificationObject(); 

                                                                        if ( groupVerificationObject == null){
                                                                            System.out.println("group verification object is null ");
                                                                        }


                                                                    }else if ( verificationObject.getType() == VerificationObjectTypeEnum.VOT_Context) {
                                                                        IContextVerificationObject  contextVerificationObject = verificationObject.AsContextVerificationObject(); 



                                                                        if ( contextVerificationObject == null){
                                                                            trace("ContextVerification object is null");
                                                                        }else {
                                                                            IField field = contextVerificationObject.getField(); 
                                                                            if ( field == null){
                                                                                trace("field getting null");
                                                                            }else {
                                                                                System.out.println(" field full name: " +field.getFullName() + "\n Name: " +field.getName());

                                                                                IFieldValue fieldValue = field.getValue();
                                                                                if ( fieldValue == null){
                                                                                    trace("Field Value is Null");
                                                                                    }else {

                                                                                    System.out.println("suspicious: " +fieldValue.getIsSuspicious());
                                                                                    System.out.println("need valid: " +fieldValue.getIsValid());
                                                                                    System.out.println("is verifi: " +fieldValue.getIsVerified());
                                                                                    System.out.println("need verifi: " +fieldValue.getNeedsVerification());


                                                                                    trace ( "getting text from field value");
                                                                                    IText text = fieldValue.getAsText() ; 
                                                                                    if ( text == null){
                                                                                        trace("text getting null in field value");
                                                                                    }else {

                                                                                        int wordCount = text.getRecognizedWordsCount() ; 
                                                                                        trace("recognized word count: "+wordCount);

                                                                                        //getting words from text 
                                                                                        for ( int wordIndex = 0 ; wordIndex<wordCount; wordIndex++ ){
                                                                                            trace ("processing word number :" +wordIndex);

                                                                                            IRecognizedWordInfo recognizedWordInfo = engine.CreateRecognizedWordInfo()  ; 

                                                                                            if ( recognizedWordInfo == null){
                                                                                                trace("Can't create recognizedWordInfo object using engine");
                                                                                            }else {
                                                                                                text.GetRecognizedWord(wordIndex, -1, recognizedWordInfo);

                                                                                                //getting characters from word
                                                                                                for (int characterIndex = 0 ; characterIndex<recognizedWordInfo.getText().length(); characterIndex++ ){
                                                                                                    trace("processing character number : " +characterIndex);

                                                                                                    IRecognizedCharacterInfo recognizedCharacterInfo = engine.CreateRecognizedCharacterInfo(); 
                                                                                                    if ( recognizedCharacterInfo == null) {
                                                                                                        trace("can't create recognizedCharacterInfo object");
                                                                                                    }else {
                                                                                                        recognizedWordInfo.GetRecognizedCharacter(characterIndex, -1, recognizedCharacterInfo);

                                                                                                        System.out.println(" Character: " + recognizedCharacterInfo.getCharacter());
                                                                                                        System.out.println(" Confidence level : " +recognizedCharacterInfo.getCharConfidence());
                                                                                                    }
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    }
                                                                                    System.out.println(" Field Value : " +fieldValue.getAsString());
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }

                                                            trace("Geting next Verification group");
                                                            verificationGroup = verificationWorkSet.NextGroup();
                                                        }

                                                    }

                                                }catch (Exception e){
                                                    trace("Exception occured in getting next work group");
                                                    e.printStackTrace();
                                                }

                                                trace("Get next worksets");
                                                //get next work set
                                                verificationWorkSet =  verificationSession.NextWorkSet();

                                            }
                                        }

                                    }catch (Exception e){
                                        System.out.println("Exception durring getting next Work Set");
                                        e.printStackTrace();
                                    }


                                }finally {
                                    trace("closing Verification object");
                                    verificationSession.Close();
                                }
                            }catch (Exception e){
                                System.out.println("Excepton occured in Creating Verification object");
                                e.printStackTrace();
                            }


                            trace ("Getting Documents");
                            IDocuments documents = batch.getDocuments(); 

                            trace ("Getting Fields and printing");
                            for ( int j = 0 ; j < documents.getCount(); j++){
                                trace ("Getting documnets:" +(j+1));

                                IDocument document = documents.getElement(j);
                                IDocumentDefinition definition = document.getDocumentDefinition();
                                assert( definition != null );
                                assert( document.getPages().getCount() == 1 );


                                trace( "====================================" );
                                trace( "DocumentType: " + document.getDocumentDefinition().getName() );
                                trace( "====================================" );

                                try {
                                    trace("opening document");
                                    document.Open(true);
                                    IFields fields = document.getSections().Item( 0 ).getChildren();

                                    for( int i = 0; i < fields.getCount(); i++ ) {
                                        IField field = fields.getElement( i );
                                        trace( field.getName() + ": " + 
                                                                ( field.getValue() != null ? field.getValue().getAsString() : "." ) );
                                    }
                                }finally {
                                    trace("closing document");
                                    document.Close(true);
                                }
                            }
                        }finally {
                                trace("Closing Batch");
                                batch.Close();
                        }

                }catch (Exception e){
                        System.out.println("Exception in creating Batch");
                        e.printStackTrace();
                }
                finally {
                    trace("closing project");

                    project.Close();
                }

                }catch (Exception e){
                    System.out.println("Exception occured while loading project");
                    e.printStackTrace();
                }

        }catch (Exception e) {
                // TODO: handle exception
                System.out.println("Exception occured while loading engine");
                e.printStackTrace();
        }
        finally {
                trace("unloading Engine");
                Engine.Unload();
                DeleteDirectoryOrFileIntializer("C:\\Users\\Nitin\\FlexicaptureTest\\flexiverificationtest\\TestBatch");
                DeleteDirectoryOrFileIntializer("C:\\Users\\Nitin\\FlexicaptureTest\\flexiverificationtest\\BatchTypes");
                DeleteDirectoryOrFileIntializer("C:\\Users\\Nitin\\FlexicaptureTest\\flexiverificationtest\\ProjectIsOpen");
                DeleteDirectoryOrFileIntializer("C:\\Users\\Nitin\\FlexicaptureTest\\flexiverificationtest\\flexitest.fcproj.sync");

            }

    }


       public static void DeleteDirectoryOrFileIntializer(String args)
        {   

            File directory = new File(args);

            //make sure directory exists
            if(!directory.exists()){

               System.exit(0);

            }else{

               try{

                   delete(directory);

               }catch(IOException e){
                   e.printStackTrace();
                   System.exit(0);
               }
            }

            System.out.println("Deleteing files/Director : " +args+ " successfully Done");
        }

        public static void delete(File file)
            throws IOException{

            if(file.isDirectory()){

                //directory is empty, then delete it
                if(file.list().length==0){

                   file.delete();

                }else{

                   //list all the directory contents
                   String files[] = file.list();

                   for (String temp : files) {
                      //construct the file structure
                      File fileDelete = new File(file, temp);

                      //recursive delete
                     delete(fileDelete);
                   }

                   //check the directory again, if empty then delete it
                   if(file.list().length==0){
                     file.delete();
                   }
                }

            }else{
                //if file, then delete it
                file.delete();
            }
        }






}
Was it helpful?

Solution

Please set IEngine::EnableRecognitionVariants to TRUE before the document processing.
I work for ABBYY and ready to help you in comments.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top