我正在尝试使用flexicapture SDK进行验证步骤。
当我试图从IText对象获得识别的字数时,它返回0(零)。
int wordCount = text.getRecognizedWordsCount();
wordCount在这里为零......
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 )
请建议一些解决方案; 我的主要任务是获取每个fieldValue,我们需要每个字或每个字符的置信度。
// © ABBYY. 2012.
// SAMPLES代码是ABBYY的属性,保留专有权。
//
//允许DEVELOPER将SAMPLES合并到他自己的APPLICATION中并在
下修改它// ABBYY与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();
}
}
}
答案 0 :(得分:0)
请在文档处理之前将IEngine :: EnableRecognitionVariants设置为TRUE。
我为ABBYY工作,随时准备帮助您。