0
我正在嘗試使用flexicapture SDK進行驗證步驟。 當我試圖從IText對象獲取識別字數時,它返回0(零)。 int wordCount = text.getRecognizedWordsCount();
是的wordCount零這裏...Flexicapture 10 SDK驗證步驟問題
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提出了一些解決方案; 我的主要任務是獲取每個fieldValue,對於每個單詞或每個角色我們都需要置信度級別。
// © ABBYY. 2012.
//樣本代碼是ABBYY的產權,專有權利被保留。
//
//開發商被允許納入樣本分成了自己的應用程序,並在
修改ABBYY和開發者之間的許可協議//條款。
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();
}
}
}
可以在這個問題上回答我:http://stackoverflow.com/questions/24034598/flexicapture-processor-recognize-only-first-page-of-document – nitin
因爲我知道你已經解決了這個問題。 –
是的,謝謝你,張貼後我得到了解決方案:) – nitin