Pré-processamento de scans e OCR estruturado
HPDFScanPreprocess aceita um Graphics.TBitmap de posse do chamador e retorna uma imagem corrigida privada mais uma geometria invertível; HPDFScanOCRWorkflow usa um IHPDFOCREngine existente para retornar palavras mapeadas e layout semântico
O perfil embarcado de aceitação usa Delphi e FPC/Lazarus do Windows; o adapter de processos OSD do Tesseract usa APIs do Windows e não faz parte do perfil nativo headless de documentos do Linux
Correções e evidências
A ordem de correção é o quad de perspectiva fornecido pelo chamador, a orientação no sentido horário e o deskew de ângulo contínuo, com amostragem bilinear inversa e preenchimento branco fora da região fornecida da origem
Orientação explícita suporta 0, 90, 180 e 270 graus no sentido horário; orientação automática exige um detector e rejeita evidências insuficientes ou malformadas
HPDFScanOrientationTesseract fornece um adapter real de OSD Tesseract do Windows usando um executável explícito e um diretório tessdata contendo osd.traineddata; ele chama --psm 0 -l osd --dpi 300 diretamente num processo oculto, sem shell
O threshold default raw de margem de orientação é 15; LastOrientationScore retém o score real do Tesseract, e a confiança normalizada é o score dividido por 15, limitado a [0, 1]; esta normalização é uma escala de evidência, não uma probabilidade calibrada
Deskew automático amostra pixels escuros reais e compara a concentração de projeções de linhas sobre uma faixa delimitada de ângulos; a faixa default é ±10 graus em passos de 0.25 graus, com um threshold de evidência de 0.2; evidência insuficiente mantém o ângulo explícito e registra DeskewAccepted = False
Deskew explícito aceita qualquer ângulo contínuo de -180 a 180 graus; a busca automática suporta um raio de até 45 graus, e o passo precisa estar entre 0.1 e 5 graus
A correção de perspectiva exige um quad convexo finito ordenado top-left, top-right, bottom-right, bottom-left dentro do raster de origem e dimensões explícitas de alvo; detecção automática de quads não é fornecida
Limpeza e orçamentos finitos
Os defaults normalizam sombras locais por tiles, removem linhas e colunas contíguas de bordas escuras, e preservam saída grayscale; denoise opcional de mediana 3 por 3 e saída binária podem ser habilitados
A limpeza embranquece pixels de bordas sem mudar a origem das coordenadas; RemovedBorderPixels reporta os pixels afetados, e rasters uniformemente em branco pulam o OCR
Os bounds default são 32768 pixels por dimensão, 16777216 pixels de entrada e saída, uma estimativa conservadora de alocação de trabalho de 512 MiB, 500000000 unidades de trabalho e 20000 samples de deskew; os pixels da origem precisam adicionalmente caber num índice inteiro com sinal
A estimativa cobre clones próprios de rasters, arrays grayscale, armazenamento de saída, samples e histograms; ela não limita o bitmap de origem do chamador, alocações de gráficos do sistema operacional nem um engine OCR externo arbitrário
OSD do Tesseract delimita separadamente pixels e stdout/stderr combinados, faz polling do cancelamento e do tamanho de saída a cada 25 milissegundos, e termina o processo filho em timeout, cancelamento ou overflow de saída; o timeout precisa estar entre 1 e 3600000 milissegundos, e o limite de saída entre 1024 e 1048576 bytes
Posse e rollback
HPDFPreprocessScan nunca edita o bitmap de origem; em sucesso o chamador libera OutputBitmap, enquanto falha retorna nil e um status com evidências de diagnóstico
Um detector recebe uma cópia privada; o cancelamento é cooperativo nas fronteiras de linhas, ângulos candidatos, espera de processos e processamento de palavras; um engine OCR fornecido precisa honrar o token da requisição e os limites próprios dele de processos e saída
O workflow limpa palavras, layout semântico e quads de linhas após cada falha; o adapter mantém estado mutável de último relatório e deve ser usado serialmente
Geometria e OCR estruturado
Coordenadas de rasters usam origem no canto superior esquerdo e centros de pixels; a matriz homogênea age sobre o vetor coluna (X, Y, 1), com divisão pela terceira coordenada dele; a multiplicação de transforms A × B aplica B primeiro
SourceToOutput e OutputToSource preservam a operação afim ou projetiva completa; mapeie records separados de entrada e saída ao usar os helpers públicos
O wrapper de OCR fornece o raster corrigido com bounds temporários de PDF não rotacionados ao engine, valida UTF-16 e retângulos finitos de palavras, descarta palavras com confiança insuficiente ou não mapeáveis, e mapeia retângulos, baselines e quatro cantos de volta para o raster original
PageQuad e os limites semânticos levam em conta o page box do PDF de entrada, o DPI e a rotação de páginas de 0, 90, 180 ou 270 graus; a ordem de leitura é analisada no frame corrigido e vertical antes de a geometria ser mapeada de volta
Intervalos de caracteres são interpolados das caixas de palavras do OCR e permanecem aproximados; quadriláteros de linhas preservam a rotação e a perspectiva que limites alinhados aos eixos não conseguem representar
HPDFScanOCRLayoutToDOM cria uma stack editável própria em ordem analisada, usando nós de headings para headings detectados e nós de texto para as demais linhas
Exemplo
Options := HPDFDefaultScanOCRWorkflowOptions;
Options.Preprocess.AutoOrientation := True;
Detector := HPDFCreateTesseractOrientationDetector(
TesseractExecutable, OSDModelDirectory,
HPDFDefaultTesseractOrientationOptions);
Adapter := HPDFCreateScanPreprocessingOCREngine(
ExistingOCREngine, Options, Detector);
if Adapter.Recognize(Request, Words, Diagnostic) then
begin
Report := Adapter.LastReport;
DOM := HPDFScanOCRLayoutToDOM(Report);
try
// Consume the editable semantic output here
finally
DOM.Free;
end;
end;
Verificação
A suíte Delphi não GUI checa orientação explícita, ângulos contínuos reversíveis até ±179.25 graus, orientação automática real do Tesseract de 0/90/180/270 e rejeição de brancos, correção real automática de skew de cinco graus, limpeza de ruído e sombras, corners de perspectiva, orçamentos, cancelamento, imutabilidade da origem e OCR real de inglês em seis variantes de rasters, incluindo um scan de 37.5 graus
Cada canto de palavra aceito nos casos reais de OCR é mapeado de volta pela transformação inversa e checado dentro de 1e-6 pixels do raster corrigido; a suíte smoke do FPC executa adicionalmente deskew real, cancelamento, limites de alocação, OSD de 180 graus e em branco, e layout real de OCR de inglês
Os headers públicos gerados compilam sob C++Builder Win32 e Win64x, incluindo relatórios gerenciados de OCR, arguments default de interfaces, transforms de geometria e posse de DOM
Defina HOTPDF_TESSERACT_EXE, HOTPDF_TESSDATA para o modelo OSD e HOTPDF_OCR_TESSDATA para o modelo de inglês para habilitar a verificação de engines externos; configurações opcionais ausentes de runtime não estabelecem aceitação real de OCR