Scan preprocessing and structured OCR
HPDFScanPreprocess přijme bitmapu Graphics.TBitmap vlastněnou volajícím a vrátí soukromý opravený obrázek plus invertovatelnou geometrii; HPDFScanOCRWorkflow použije stávající IHPDFOCREngine a vrátí zmapovaná slova i sémantický layout
Dodávaný akceptační profil používá Delphi a Windows FPC/Lazarus; adaptér procesu Tesseract OSD používá Windows API a nepatří do nativního headless dokumentového profilu Linuxu
Korekce a důkazy
Pořadí korekcí je dodaný perspektivní čtyřúhelník volajícího, orientace po směru hodinových ručiček a korekce naklonění spojitým úhlem, s bilineárním inverzním vzorkováním a bílou výplní mimo dodanou zdrojovou oblast
Explicitní orientace podporuje 0, 90, 180 a 270 stupňů po směru hodinových ručiček; automatická orientace vyžaduje detektor a odmítá nedostatečné či poškozené důkazy
HPDFScanOrientationTesseract dodá skutečný adaptér Windows Tesseract OSD s explicitním spustitelným souborem a adresářem tessdata obsahujícím osd.traineddata; spustí --psm 0 -l osd --dpi 300 přímo ve skrytém procesu, bez shellu
Výchozí práh marže surové orientace je 15; LastOrientationScore si uchová skutečné skóre Tesseractu a normalizovaná jistota je skóre dělené 15, oříznuté do [0, 1]; ta normalizace je škálou důkazů, nikoli kalibrovanou pravděpodobností
Automatický deskew vzorkuje skutečné tmavé pixely a porovnává koncentraci projekcí řádků přes ohraničené úhlové rozpětí; výchozí rozpětí je ±10 stupňů v krocích 0.25 stupně, s prahem důkazů 0.2; nedostatečné důkazy ponechají explicitní úhel a zaznamenají DeskewAccepted = False
Explicitní deskew přijme jakýkoli spojitý úhel od -180 do 180 stupňů; automatické hledání podporuje poloměr až 45 stupňů a krok musí být mezi 0.1 a 5 stupni
Korekce perspektivy vyžaduje konečný konvexní čtyřúhelník uspořádaný top-left, top-right, bottom-right, bottom-left uvnitř zdrojového rasteru i explicitní cílové rozměry; automatická detekce čtyřúhelníku se neposkytuje
Úklid a konečné rozpočty
Defaulty normalizují stíny lokální po dlaždicích, odstraní souvislé tmavé okrajové řádky a sloupce a zachovají grayscale výstup; volitelné 3 krát 3 mediánové odšumění i binární výstup lze zapnout
Úklid vybělí hraniční pixely, aniž by změnil počátek souřadnic; RemovedBorderPixels reportuje dotčené pixely a rovnoměrně prázdné rastery OCR přeskočí
Defaultní meze jsou 32768 pixelů na dimenzi, 16777216 vstupních i výstupních pixelů, konzervativní odhad pracovní alokace 512 MiB, 500000000 pracovních jednotek a 20000 deskew vzorků; zdrojové pixely se navíc musí vejít do indexu znaménkového celého čísla
Odhad pokrývá vlastněné rastrové kopie, grayscale pole, výstupní úložiště, vzorky i histogramy; nezastropuje zdrojovou bitmapu volajícího, grafické alokace operačního systému ani libovolný externí OCR engine
Tesseract OSD samostatně ohraničuje pixely i kombinované stdout/stderr, dotazuje zrušení i velikost výstupu každých 25 milisekund a při timeoutu, zrušení či přetečení výstupu podřízený proces ukončí; timeout musí být mezi 1 a 3600000 milisekundami a limit výstupu mezi 1024 a 1048576 bajty
Vlastnictví a rollback
HPDFPreprocessScan zdrojovou bitmapu nikdy neupraví; při úspěchu uvolní volající OutputBitmap, zatímco selhání vrátí nil a status s diagnostickými důkazy
Detektor dostane soukromou kopii; zrušení je kooperativní na hranicích řádků, kandidátních úhlů, čekání na proces i zpracování slov; dodaný OCR engine musí respektovat token žádosti i vlastní limity procesu i výstupu
Workflow po každém selhání vymaže slova, sémantický layout i čtyřúhelníky řádků; adaptér drží měnitelný stav posledního reportu a měl by se používat sériově
Geometrie a strukturované OCR
Rastrové souřadnice používají počátek vlevo nahoře a středy pixelů; homogenní matice působí na sloupcový vektor (X, Y, 1), s dělením jeho třetí souřadnicí; násobení transformací A × B aplikuje nejdřív B
SourceToOutput a OutputToSource zachovávají kompletní afinní či projektivní operaci; při použití veřejných helperů mapujte oddělené vstupní i výstupní záznamy
OCR wrapper dodá engine opravený raster s neotočenými dočasnými PDF mezemi, validuje UTF-16 i konečné obdélníky slov, zahodí slova s nedostatečnou jistotou či nezmapovatelná a zmapuje obdélníky, baselines i čtyři rohy zpět na původní raster
PageQuad i sémantické meze počítají s příchozím page boxem PDF, DPI i rotací stránky 0, 90, 180 či 270 stupňů; pořadí čtení se analyzuje v opraveném vzpřímeném rámci, dřív než se geometrie zmapuje zpět
Znakové intervaly se interpolují z boxů OCR slov a zůstávají přibližné; čtyřúhelníky řádků zachovávají rotaci a perspektivu, kterou meze zarovnané s osami zreprezentovat nedokážou
HPDFScanOCRLayoutToDOM vytvoří vlastněný upravitelný strom v analyzovaném pořadí, s heading uzly pro zjištěná nadpisy a textovými uzly pro ostatní řádky
Příklad
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;
Verifikace
Non-GUI Delphi sada kontroluje explicitní orientaci, vratné spojité úhly přes ±179.25 stupně, skutečnou automatickou orientaci 0/90/180/270 od Tesseractu i odmítání prázdných, skutečnou automatickou korekci pětistupňového naklonění, úklid šumu a stínů, rohy perspektivy, rozpočty, zrušení, neměnnost zdroje i skutečné anglické OCR na šesti rastrových variantách včetně skenu 37.5 stupně
Každý přijatý roh slova ve skutečných OCR case se zmapuje zpět inverzní transformací a zkontroluje v rámci 1e-6 opravených rastrových pixelů; FPC smoke sada navíc provede skutečný deskew, zrušení, alokační limity, 180stupňové i prázdné OSD i skutečný anglický OCR layout
Generované veřejné hlavičky se kompilují pod C++Builder Win32 a Win64x, tedy i se spravovanými OCR reporty, defaultními argumenty rozhraní, geometrickými transformacemi i vlastnictvím DOM
Pro zapnutí verifikace externím engine nastavte HOTPDF_TESSERACT_EXE, HOTPDF_TESSDATA pro OSD model a HOTPDF_OCR_TESSDATA pro anglický model; chybějící volitelná runtime nastavení nezakládají skutečnou OCR akceptaci