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