Pré-processamento de digitalizações e OCR estruturado

HPDFScanPreprocess aceita um Graphics.TBitmap próprio de quem chama e devolve uma imagem corrigida privada mais geometria invertível; HPDFScanOCRWorkflow usa um IHPDFOCREngine existente para devolver palavras mapeadas e layout semântico

O perfil de aceitação distribuído usa Delphi e Windows FPC/Lazarus; o adaptador de processos OSD do Tesseract usa APIs de Windows e não faz parte do perfil nativo headless de documentos de Linux

Correções e evidência

A ordem de correção é quadrilátero de perspetiva fornecido por quem chama, orientação horária e deskew de ângulos contínuos, com amostragem inversa bilinear e preenchimento branco fora da região fonte fornecida

A orientação explícita suporta 0, 90, 180 e 270 graus no sentido horário; a orientação automática exige um detetor e rejeita evidência insuficiente ou malformada

HPDFScanOrientationTesseract fornece um adaptador real de OSD Tesseract de Windows usando um executável explícito e um diretório tessdata contendo osd.traineddata; lança --psm 0 -l osd --dpi 300 diretamente num processo oculto sem shell

O limiar por defeito de margens brutas de orientação é 15; LastOrientationScore retém a pontuação real do Tesseract e a confiança normalizada é a pontuação dividida por 15, limitada a [0, 1]; esta normalização é uma escala de evidência, não uma probabilidade calibrada

O deskew automático amostra píxeis escuros reais e compara a concentração de projeções de linhas sobre um intervalo delimitado de ângulos; o intervalo por defeito é ±10 graus em passos de 0.25 graus, com um limiar de evidência de 0.2; evidência insuficiente mantém o ângulo explícito e regista DeskewAccepted = False

O deskew explícito aceita qualquer ângulo contínuo de -180 a 180 graus; a pesquisa automática suporta um raio até 45 graus, e o passo tem de estar entre 0.1 e 5 graus

A correção de perspetiva exige um quadrilátero convexo finito ordenado de topo-esquerda, topo-direita, fundo-direita, fundo-esquerda dentro do raster fonte e dimensões explícitas de alvo; a deteção automática de quadriláteros não é fornecida

Limpeza e orçamentos finitos

Os defaults normalizam sombras locais de tiles, removem linhas e colunas contíguas escuras de bordas e preservam a saída em tons de cinzento; denoising mediano opcional de 3 por 3 e saída binária podem ser ativados

A limpeza branqueia píxeis de bordas sem alterar a origem das coordenadas; RemovedBorderPixels reporta os píxeis afetados, e rasters uniformemente em branco saltam o OCR

Os limites por defeito são 32768 píxeis por dimensão, 16777216 píxeis de entrada e de saída, uma estimativa conservadora de alocação de trabalho de 512 MiB, 500000000 unidades de trabalho e 20000 amostras de deskew; os píxeis fonte têm adicionalmente de caber num índice de inteiro com sinal

A estimativa cobre clones próprios de rasters, arrays de tons de cinzento, armazenamento de saídas, amostras e histogramas; não limita o bitmap fonte de quem chama, alocações de gráficos do sistema operativo nem um motor OCR externo arbitrário

O OSD Tesseract delimita separadamente píxeis e stdout/stderr combinados, consulta o cancelamento e o tamanho da saída a cada 25 milissegundos e termina o filho no timeout, no cancelamento ou no transbordo de saída; o timeout tem de estar entre 1 e 3600000 milissegundos e o limite de saída entre 1024 e 1048576 bytes

Propriedade e rollback

HPDFPreprocessScan nunca edita o bitmap fonte; em caso de sucesso quem chama liberta o OutputBitmap, enquanto a falha devolve nil e um status com evidência de diagnóstico

Um detetor recebe uma cópia privada; o cancelamento é cooperativo nas fronteiras de linhas, de ângulos candidatos, de esperas de processos e de processamento de palavras; um motor OCR fornecido tem de honrar o token do pedido e os limites próprios dele de processos e de saídas

O workflow limpa palavras, layout semântico e quadriláteros de linhas após cada falha; o adaptador mantém o estado mutável do último relatório e deve ser usado em série

Geometria e OCR estruturado

As coordenadas de rasters usam uma origem superior esquerda e centros de píxeis; a matriz homogénea atua sobre o vetor de coluna (X, Y, 1), com divisão pela terceira coordenada dela; a multiplicação de transforms A × B aplica B primeiro

SourceToOutput e OutputToSource preservam a operação afim ou projetiva completa; mapeie registos separados de entrada e de saída ao usar os helpers públicos

O wrapper de OCR fornece ao motor o raster corrigido com bounds temporários PDF não rodados, valida UTF-16 e retângulos finitos de palavras, descarta palavras com confiança insuficiente ou não mapeáveis e mapeia retângulos, linhas de base e quatro cantos de volta para o raster original

PageQuad e os bounds semânticos têm em conta o page box 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 quadro corrigido vertical antes de a geometria ser mapeada de volta

Os intervalos de carateres são interpolados a partir de caixas de palavras OCR e permanecem aproximados; os quadriláteros de linhas preservam rotação e perspetiva que bounds alinhados aos eixos não conseguem representar

HPDFScanOCRLayoutToDOM cria uma pilha editável própria pela ordem analisada, usando nós de títulos para títulos detetados e nós de texto para as restantes 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 verifica orientação explícita, ângulos contínuos reversíveis até ±179.25 graus, orientação real automática do Tesseract de 0/90/180/270 e rejeição de páginas em branco, correção real automática de inclinações de cinco graus, limpeza de ruído e de sombras, cantos de perspetiva, orçamentos, cancelamento, imutabilidade da fonte e OCR real de inglês em seis variantes de rasters incluindo uma digitalização de 37.5 graus

Cada canto de palavra aceite nos casos reais de OCR é mapeado de volta através da transformação inversa e verificado dentro de 1e-6 píxeis de rasters corrigidos; a suíte smoke de FPC executa adicionalmente deskew real, cancelamento, limites de alocação, OSD de 180 graus e de páginas em branco e layout real de OCR de inglês

Os cabeçalhos públicos gerados compilam sob C++Builder Win32 e Win64x, incluindo relatórios geridos de OCR, argumentos por defeito de interfaces, transforms de geometria e propriedade de DOMs

Defina HOTPDF_TESSERACT_EXE, HOTPDF_TESSDATA para o modelo OSD e HOTPDF_OCR_TESSDATA para o modelo de inglês para ativar a verificação de motores externos; definições opcionais de runtime em falta não estabelecem aceitação real de OCR