Neste cenário, o ABBYY FineReader Engine é usado para ler códigos de barras. A leitura de códigos de barras pode ser necessária, por exemplo, para separação automática de documentos, para o processamento de documentos por um Sistema de Gerenciamento de Documentos ou para a indexação e classificação de documentos.Este cenário pode ser usado como parte de outros cenários. Por exemplo, documentos digitalizados com scanners de produção de alta velocidade podem ser separados por meio de códigos de barras, ou documentos preparados para armazenamento de longo prazo podem ser enviados para Sistemas de Gerenciamento de Documentos de arquivamento com base nos valores de seus códigos de barras.Ao extrair códigos de barras de textos, o sistema pode detectar todos os códigos de barras ou apenas códigos de barras de determinado tipo com um determinado valor. O sistema pode obter o valor de um código de barras e calcular seu dígito verificador. Para obter os resultados mais rápidos e de melhor qualidade no reconhecimento de códigos de barras:
Use imagens coloridas com resolução ideal de 300 dpi.
Ajuste a velocidade de reconhecimento usando perfis (consulte Trabalhando com perfis para mais detalhes).
Os valores dos códigos de barras reconhecidos podem ser salvos nos formatos mais adequados para processamento posterior, por exemplo, em TXT.
Os exemplos de código fornecidos neste tópico são específicos do Windows.
A seguir, é apresentada uma descrição detalhada do método recomendado para usar o ABBYY FineReader Engine 12 neste cenário. O método sugerido utiliza as configurações de processamento consideradas mais adequadas para este cenário.
Etapa 1. Carregar o ABBYY FineReader Engine
Para começar a trabalhar com o ABBYY FineReader Engine, você precisa criar o objeto Engine. O objeto Engine é o objeto de nível mais alto na hierarquia de objetos do ABBYY FineReader Engine e fornece diversas configurações globais, alguns métodos de processamento e métodos para criar os demais objetos.Para criar o objeto Engine, você pode usar a função InitializeEngine. Consulte também outras formas de carregar o objeto Engine (Win).
// Inicialize estas variáveis com o caminho para FREngine.dll, o ID do projeto do cliente do FineReader Engine,// e, se aplicável, o caminho para o token da Online License e a senha da Online Licensewchar_t* FreDllPath;wchar_t* CustomerProjectId;wchar_t* LicensePath; // se você não usar uma Online License, atribua strings vazias a estas variáveiswchar_t* LicensePassword;// HANDLE para FREngine.dllstatic HMODULE libraryHandle = 0;// Objeto global do FineReader EngineFREngine::IEnginePtr Engine;void LoadFREngine(){ if( Engine != 0 ) { // Já carregado return; } // Primeiro passo: carregar FREngine.dll if( libraryHandle == 0 ) { libraryHandle = LoadLibraryEx( FreDllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH ); if( libraryHandle == 0 ) { throw L"Erro ao carregar o ABBYY FineReader Engine"; } } // Segundo passo: obter o objeto Engine typedef HRESULT ( STDAPICALLTYPE* InitializeEngineFunc )( BSTR, BSTR, BSTR, BSTR, BSTR, VARIANT_BOOL, FREngine::IEngine** ); InitializeEngineFunc pInitializeEngine = ( InitializeEngineFunc )GetProcAddress( libraryHandle, "InitializeEngine" ); if( pInitializeEngine == 0 || pInitializeEngine( CustomerProjectId, LicensePath, LicensePassword, L"", L"", VARIANT_FALSE, &Engine ) != S_OK ) { UnloadFREngine(); throw L"Erro ao carregar o ABBYY FineReader Engine"; }}
Etapa 2. Carregando as configurações do cenário
As configurações mais adequadas podem ser selecionadas usando o método LoadPredefinedProfile do objeto Engine. Esse método recebe como parâmetro de entrada o nome do perfil de configurações em uso. Para saber mais sobre perfis, consulte Trabalhando com perfis.O ABBYY FineReader Engine oferece suporte a 2 opções de configuração para este cenário:
Nome do perfil
Descrição
BarcodeRecognition_Accuracy
Extrai apenas códigos de barras (textos, imagens e tabelas não são detectados). As configurações foram otimizadas para precisão. <Warning> Este perfil requer o módulo Barcode Autolocation disponível na licença. </Warning>
BarcodeRecognition_Speed
Extrai apenas códigos de barras (textos, imagens e tabelas não são detectados). As configurações foram otimizadas para velocidade de processamento. <Warning> Este perfil requer o módulo Barcode Autolocation disponível na licença. </Warning>
// Carregar um perfil predefinidoEngine->LoadPredefinedProfile( L"BarcodeRecognition_Speed" );
Se quiser alterar as configurações usadas no processamento, use os objetos Parameter correspondentes. Consulte a seção Otimização adicional abaixo para mais informações.
Etapa 3. Carregando e pré-processando as imagens
O ABBYY FineReader Engine fornece um objeto FRDocument para processar documentos com várias páginas. Para carregar as imagens de um documento e pré-processá-las, você deve criar o objeto FRDocument e adicionar imagens a ele. Você pode fazer uma das seguintes ações:
Criar um objeto FRDocument usando o método CreateFRDocumentFromImage do objeto Engine. Esse método cria um objeto FRDocument e carrega imagens de um arquivo especificado.
// Criar o objeto FRDocument a partir de um arquivo de imagemFREngine.IFRDocument frDocument = engine.CreateFRDocumentFromImage( "C:\\MyImage.tif", null );
// Abrir um arquivo de imagem e criar o objeto FRDocumentFREngine::IFRDocumentPtr frDocument = Engine->CreateFRDocumentFromImage( L"C:\\MyImage.tif", 0 );
Etapa 4. Extração de códigos de barras
Se o perfil BarcodeRecognition estiver carregado, você poderá usar o método Process do objeto FRDocument para extrair somente códigos de barras. Nesse caso, o ABBYY FineReader Engine detecta apenas blocos com códigos de barras. Nenhum outro bloco é detectado. Os blocos de códigos de barras reconhecidos podem ser acessados por meio do objeto Layout, que é um subobjeto do objeto FRPage, que representa uma página do documento.Para ler códigos de barras de um tipo específico, especifique os parâmetros apropriados do objeto BarcodeParams e passe o objeto BarcodeParams como parâmetro para uma das funções acima.
// Enquanto o perfil BarcodeRecognition estiver carregado,// você não precisará passar parâmetros adicionais para o método de processamento,// se os códigos de barras estiverem em conformidade com a especificaçãofrDocument.Process( null );// Se você precisar ler códigos de barras de um tipo específico// Crie um objeto DocumentProcessingParamsFREngine.IDocumentProcessingParams dpp = engine.CreateDocumentProcessingParams();// Especifique os parâmetros necessáriosdpp.PageProcessingParams.PageAnalysisParams.BarcodeParams.Type = ( int )FREngine.BarcodeTypeEnum.BT_Code39;// Agora reconheça os códigos de barras com esses parâmetrosfrDocument.Process( dpp );
// Enquanto o perfil BarcodeRecognition estiver carregado,// você não precisará passar parâmetros adicionais para o método de processamento,// se os códigos de barras estiverem em conformidade com a especificaçãofrDocument->Process( 0 );// Se você precisar ler códigos de barras de um tipo específico// Crie um objeto DocumentProcessingParamsFREngine::IDocumentProcessingParamsPtr params = Engine->CreateDocumentProcessingParams();// Especifique os parâmetros necessáriosparams->PageProcessingParams->PageAnalysisParams->BarcodeParams->Type = FREngine::BT_Code39;// Agora reconheça os códigos de barras com esses parâmetrosfrDocument->Process( params );
Etapa 5. Exportação dos dados reconhecidos
Para salvar os valores dos códigos de barras reconhecidos em um arquivo, você pode usar o método Export do objeto FRDocument, atribuindo a constante FileExportFormatEnum como um dos parâmetros. Nesse cenário, é possível exportar, por exemplo, para TXT. Você pode alterar os parâmetros padrão de exportação usando o respectivo objeto de exportação. Consulte Otimização adicional para tarefas específicas abaixo para mais informações.Depois de concluir o trabalho com o objeto FRDocument, libere todos os recursos usados por ele. Use o método IFRDocument::Close.
// Salve os códigos de barras reconhecidos em algum formato (por exemplo, TXT)frDocument.Export( "C:\\barcodes.txt", FREngine.FileExportFormatEnum.FEF_TextUnicodeDefaults, null );// Libere o objeto FRDocumentfrDocument.Close();
// Salve os códigos de barras reconhecidos em algum formato (por exemplo, TXT)frDocument->Export( L"C:\\barcodes.txt", FREngine::FEF_TextUnicodeDefaults, 0 );// Libere o objeto FRDocumentfrDocument->Close();
Etapa 6. Descarregando o ABBYY FineReader Engine
Depois de terminar de usar o ABBYY FineReader Engine, você precisa descarregar o objeto Engine. Para isso, use a função exportada DeinitializeEngine.
Você pode usar o arquivo FREngineDistribution.csv para criar automaticamente uma lista dos arquivos necessários para que sua aplicação funcione. Para processar com este cenário, selecione na coluna 5 (RequiredByModule) os seguintes valores:CoreCore.ResourcesOpeningOpening, ProcessingProcessingProcessing.OCRProcessing.OCR, Processing.ICRProcessing.OCR.NaturalLanguagesProcessing.OCR.NaturalLanguages, Processing.ICR.NaturalLanguagesExportExport, ProcessingSe você modificar o cenário padrão, ajuste os módulos necessários conforme apropriado. Você também precisa especificar os idiomas da interface, os idiomas de reconhecimento e quaisquer recursos adicionais usados pela sua aplicação (como, por exemplo, Opening.PDF se precisar abrir arquivos PDF, ou Processing.OCR.CJK se precisar reconhecer textos em idiomas CJK). Consulte Trabalhando com o arquivo FREngineDistribution.csv para obter mais detalhes.
Estas são as seções do arquivo de ajuda onde você pode encontrar informações adicionais sobre como configurar os parâmetros para os vários estágios de processamento:
Extração e leitura de códigos de barras
Objeto BarcodeParams Este objeto permite configurar os parâmetros de análise e leitura de códigos de barras.
Reconhecimento de códigos de barras Discute casos especiais no reconhecimento de códigos de barras e fornece dicas para trabalhar com códigos de barras.
Tipos de códigos de barras A lista de códigos de barras compatíveis com o ABBYY FineReader Engine 12 e suas breves descrições.
Objeto FRDocument Além dos valores de códigos de barras, talvez você precise extrair outras informações contidas no documento. Nesse caso, pode ser útil usar os métodos do objeto FRDocument.
Objeto PageProcessingParams Este objeto permite configurar os parâmetros de análise e reconhecimento para o documento inteiro. Com ele, você pode especificar se os valores dos códigos de barras devem ser reconhecidos. Os parâmetros de leitura de códigos de barras podem ser acessados por meio das propriedades BarcodeParams e DetectBarcodes do subobjeto PageAnalysisParams.
Trabalhando com Layout e blocos Você também pode marcar manualmente blocos de código de barras e especificar os respectivos parâmetros de análise e leitura. Esta seção fornece informações detalhadas sobre como trabalhar com blocos.
Trabalhando com os valores reconhecidos dos códigos de barras
Objeto BarcodeBlock As propriedades Text e BarcodeText deste objeto contêm o valor do código de barras obtido pelo reconhecimento. As outras propriedades deste objeto podem ser usadas para obter o tipo do código de barras, sua orientação e outros parâmetros.