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