[{"data":1,"prerenderedAt":918},["ShallowReactive",2],{"navigation_docs_en":3,"-en-advance-guide-spatial-layout-reconstruction":173,"-en-advance-guide-spatial-layout-reconstruction-surround":913},[4,30,109,153],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fen\u002Fgetting-started","en\u002F01.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F01.getting-started\u002F1.introduction","i-ph-rocket",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F01.getting-started\u002F2.installation","i-ph-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fen\u002Fgetting-started\u002Fquick-start","en\u002F01.getting-started\u002F3.quick-start","i-ph-play",{"title":25,"path":26,"stem":27,"icon":28},"Live Demo","\u002Fen\u002Fgetting-started\u002Flive-demo","en\u002F01.getting-started\u002F4.live-demo","i-ph-sparkle",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"How To","\u002Fen\u002Fhow-to","en\u002F02.how-to",[35,40,45,50,55,60,65,70,75,79,84,89,94,99,104],{"title":36,"path":37,"stem":38,"icon":39},"Use Rust","\u002Fen\u002Fhow-to\u002Fuse-rust","en\u002F02.how-to\u002F00.use-rust","simple-icons-rust",{"title":41,"path":42,"stem":43,"icon":44},"Use .NET \u002F C#","\u002Fen\u002Fhow-to\u002Fuse-csharp","en\u002F02.how-to\u002F01.use-csharp","simple-icons-dotnet",{"title":46,"path":47,"stem":48,"icon":49},"Use React Native","\u002Fen\u002Fhow-to\u002Fuse-react-native","en\u002F02.how-to\u002F02.use-react-native","simple-icons-react",{"title":51,"path":52,"stem":53,"icon":54},"Use iOS (Swift)","\u002Fen\u002Fhow-to\u002Fuse-ios-swift","en\u002F02.how-to\u002F03.use-ios-swift","simple-icons-apple",{"title":56,"path":57,"stem":58,"icon":59},"Use Android (Kotlin)","\u002Fen\u002Fhow-to\u002Fuse-android-kotlin","en\u002F02.how-to\u002F04.use-android-kotlin","simple-icons-android",{"title":61,"path":62,"stem":63,"icon":64},"Use C FFI","\u002Fen\u002Fhow-to\u002Fuse-c-ffi","en\u002F02.how-to\u002F05.use-c-ffi","simple-icons-c",{"title":66,"path":67,"stem":68,"icon":69},"Use CLI","\u002Fen\u002Fhow-to\u002Fuse-cli","en\u002F02.how-to\u002F06.use-cli","simple-icons-gnubash",{"title":71,"path":72,"stem":73,"icon":74},"Use Web","\u002Fen\u002Fhow-to\u002Fuse-web","en\u002F02.how-to\u002F07.use-web","simple-icons-javascript",{"title":76,"path":77,"stem":78,"icon":49},"Use React","\u002Fen\u002Fhow-to\u002Fuse-react","en\u002F02.how-to\u002F08.use-react",{"title":80,"path":81,"stem":82,"icon":83},"Use Node.js","\u002Fen\u002Fhow-to\u002Fuse-node","en\u002F02.how-to\u002F09.use-node","simple-icons-nodedotjs",{"title":85,"path":86,"stem":87,"icon":88},"Use Python","\u002Fen\u002Fhow-to\u002Fuse-python","en\u002F02.how-to\u002F10.use-python","simple-icons-python",{"title":90,"path":91,"stem":92,"icon":93},"Use Golang","\u002Fen\u002Fhow-to\u002Fuse-golang","en\u002F02.how-to\u002F11.use-golang","simple-icons-go",{"title":95,"path":96,"stem":97,"icon":98},"Use Java & JVM","\u002Fen\u002Fhow-to\u002Fuse-java","en\u002F02.how-to\u002F12.use-java","simple-icons-openjdk",{"title":100,"path":101,"stem":102,"icon":103},"Use Flutter & Dart","\u002Fen\u002Fhow-to\u002Fuse-flutter","en\u002F02.how-to\u002F13.use-flutter","simple-icons-flutter",{"title":105,"path":106,"stem":107,"icon":108},"Use Decoded RGB Input","\u002Fen\u002Fhow-to\u002Fuse-decoded-rgb","en\u002F02.how-to\u002F14.use-decoded-rgb","lucide-image",{"title":110,"path":111,"stem":112,"children":113,"page":29},"Advance Guide","\u002Fen\u002Fadvance-guide","en\u002F03.advance-guide",[114,119,124,129,134,139,144,149],{"title":115,"path":116,"stem":117,"icon":118},"Models & Tiers","\u002Fen\u002Fadvance-guide\u002Fmodels-and-tiers","en\u002F03.advance-guide\u002F01.models-and-tiers","i-ph-cube",{"title":120,"path":121,"stem":122,"icon":123},"Multilingual OCR","\u002Fen\u002Fadvance-guide\u002Fmultilingual-ocr","en\u002F03.advance-guide\u002F02.multilingual-ocr","i-ph-translate",{"title":125,"path":126,"stem":127,"icon":128},"Spatial Layout Reconstruction","\u002Fen\u002Fadvance-guide\u002Fspatial-layout-reconstruction","en\u002F03.advance-guide\u002F03.spatial-layout-reconstruction","i-ph-layout",{"title":130,"path":131,"stem":132,"icon":133},"Image Preprocessing & Tuning","\u002Fen\u002Fadvance-guide\u002Fimage-preprocessing-and-tuning","en\u002F03.advance-guide\u002F04.image-preprocessing-and-tuning","i-ph-sliders",{"title":135,"path":136,"stem":137,"icon":138},"Classification & Orientation","\u002Fen\u002Fadvance-guide\u002Fclassification-and-orientation","en\u002F03.advance-guide\u002F05.classification-and-orientation","i-ph-arrows-clockwise",{"title":140,"path":141,"stem":142,"icon":143},"Performance & Benchmarks","\u002Fen\u002Fadvance-guide\u002Fperformance-and-benchmarks","en\u002F03.advance-guide\u002F06.performance-and-benchmarks","i-ph-chart-line-up",{"title":145,"path":146,"stem":147,"icon":148},"Troubleshooting","\u002Fen\u002Fadvance-guide\u002Ftroubleshooting","en\u002F03.advance-guide\u002F07.troubleshooting","i-ph-wrench",{"title":150,"path":151,"stem":152,"icon":138},"v0.2 to v0.3","\u002Fen\u002Fadvance-guide\u002Fmigration-guide","en\u002F03.advance-guide\u002F08.migration-guide",{"title":154,"path":155,"stem":156,"children":157,"page":29},"Api Reference","\u002Fen\u002Fapi-reference","en\u002F04.api-reference",[158,163,168],{"title":159,"path":160,"stem":161,"icon":162},"InitializeConfig","\u002Fen\u002Fapi-reference\u002Finitialize-config","en\u002F04.api-reference\u002F01.initialize-config","i-ph-code-block",{"title":164,"path":165,"stem":166,"icon":167},"OcrRunOptions","\u002Fen\u002Fapi-reference\u002Focr-run-options","en\u002F04.api-reference\u002F02.ocr-run-options","i-ph-faders",{"title":169,"path":170,"stem":171,"icon":172},"TextResult & Output Modes","\u002Fen\u002Fapi-reference\u002Ftext-result-and-output","en\u002F04.api-reference\u002F03.text-result-and-output","i-ph-textbox",{"id":174,"title":125,"body":175,"description":905,"extension":906,"links":907,"meta":908,"navigation":909,"path":126,"seo":910,"stem":127,"__hash__":912},"docs_en\u002Fen\u002F03.advance-guide\u002F03.spatial-layout-reconstruction.md",{"type":176,"value":177,"toc":889},"minimark",[178,182,190,195,286,289,293,296,305,313,319,326,332,337,339,343,349,474,478,569,571,575,578,759,763,885],[179,180,181],"p",{},"Standard OCR engines return a flat list of disconnected bounding boxes, losing table structures, column gaps, and line indentations.",[179,183,184,185,189],{},"RustO! includes a built-in ",[186,187,188],"strong",{},"Spatial Layout Reconstruction Engine"," that analyzes 2D geometric relationships to produce formatted, visually aligned text.",[191,192,194],"h2",{"id":193},"how-the-algorithm-works","🎯 How the Algorithm Works",[196,197,202],"pre",{"className":198,"code":199,"language":200,"meta":201,"style":201},"language-mermaid shiki shiki-themes material-theme-lighter github-light github-dark monokai","flowchart TD\n    A[\"Raw Detected Polygons\u003Cbr\u002F>(Coordinates, Texts, Confidences)\"] --> B[\"Phase 1: Vertical Line Clustering (lineYThreshold)\u003Cbr\u002F>• Compute median box height (H_med)\u003Cbr\u002F>• Calculate center Y = (Top + Bottom) \u002F 2\u003Cbr\u002F>• Cluster boxes into rows if |Y_i - Y_avg| &le; H_med &times; lineYThreshold\"]\n    B --> C[\"Phase 2: Horizontal Spacing & Column Gaps (wordXThreshold)\u003Cbr\u002F>• Estimate average character width (W_char)\u003Cbr\u002F>• Measure horizontal gap = Left[i+1] - Right[i]\u003Cbr\u002F>• Insert scaled spaces = Gap \u002F W_char\"]\n    C --> D[\"Phase 3: Cursor Assembly & 2D Reconstruction\u003Cbr\u002F>• Sort lines top-to-bottom\u003Cbr\u002F>• Sort words left-to-right\u003Cbr\u002F>• Emit formatted multi-line spatial layout\"]\n","mermaid","",[203,204,205,218,249,268],"code",{"__ignoreMap":201},[206,207,210,214],"span",{"class":208,"line":209},"line",1,[206,211,213],{"class":212},"sRxSC","flowchart",[206,215,217],{"class":216},"sD0ED"," TD\n",[206,219,221,225,228,232,235,238,241,243,246],{"class":208,"line":220},2,[206,222,224],{"class":223},"s94S9","    A",[206,226,227],{"class":212},"[",[206,229,231],{"class":230},"sLACW","\"Raw Detected Polygons\u003Cbr\u002F>(Coordinates, Texts, Confidences)\"",[206,233,234],{"class":212},"]",[206,236,237],{"class":212}," -->",[206,239,240],{"class":223}," B",[206,242,227],{"class":212},[206,244,245],{"class":230},"\"Phase 1: Vertical Line Clustering (lineYThreshold)\u003Cbr\u002F>• Compute median box height (H_med)\u003Cbr\u002F>• Calculate center Y = (Top + Bottom) \u002F 2\u003Cbr\u002F>• Cluster boxes into rows if |Y_i - Y_avg| &le; H_med &times; lineYThreshold\"",[206,247,248],{"class":212},"]\n",[206,250,252,255,258,261,263,266],{"class":208,"line":251},3,[206,253,254],{"class":223},"    B ",[206,256,257],{"class":212},"-->",[206,259,260],{"class":223}," C",[206,262,227],{"class":212},[206,264,265],{"class":230},"\"Phase 2: Horizontal Spacing & Column Gaps (wordXThreshold)\u003Cbr\u002F>• Estimate average character width (W_char)\u003Cbr\u002F>• Measure horizontal gap = Left[i+1] - Right[i]\u003Cbr\u002F>• Insert scaled spaces = Gap \u002F W_char\"",[206,267,248],{"class":212},[206,269,271,274,276,279,281,284],{"class":208,"line":270},4,[206,272,273],{"class":223},"    C ",[206,275,257],{"class":212},[206,277,278],{"class":223}," D",[206,280,227],{"class":212},[206,282,283],{"class":230},"\"Phase 3: Cursor Assembly & 2D Reconstruction\u003Cbr\u002F>• Sort lines top-to-bottom\u003Cbr\u002F>• Sort words left-to-right\u003Cbr\u002F>• Emit formatted multi-line spatial layout\"",[206,285,248],{"class":212},[287,288],"hr",{},[191,290,292],{"id":291},"visual-comparison-output-modes","Visual Comparison: Output Modes",[179,294,295],{},"Consider a standard retail invoice with two item rows and two columns:",[297,298,300,301,304],"h3",{"id":299},"_1-flat-line-list-output-lines","1. Flat Line List (",[203,302,303],{},"output: \"lines\"",")",[196,306,311],{"className":307,"code":309,"language":310,"meta":201},[308],"language-text","Item Description\nAmount\nCoffee Latte\n$4.50\nCroissant\n$3.50\nTotal\n$8.00\n","text",[203,312,309],{"__ignoreMap":201},[179,314,315],{},[316,317,318],"em",{},"(Notice how column relationships are flattened into a single vertical sequence).",[297,320,322,323,304],{"id":321},"_2-reconstructed-spatial-text-output-spatial","2. Reconstructed Spatial Text (",[203,324,325],{},"output: \"spatial\"",[196,327,330],{"className":328,"code":329,"language":310,"meta":201},[308],"Item Description                       Amount\nCoffee Latte                            $4.50\nCroissant                               $3.50\n─────────────────────────────────────────────\nTotal                                   $8.00\n",[203,331,329],{"__ignoreMap":201},[179,333,334],{},[316,335,336],{},"(Column headers, tabular items, and total rows remain aligned in their original 2D positions).",[287,338],{},[191,340,342],{"id":341},"️-tuning-spatial-parameters","⚙️ Tuning Spatial Parameters",[179,344,345,346,348],{},"Spatial reconstruction is controlled at runtime via ",[203,347,164],{},":",[196,350,354],{"className":351,"code":352,"language":353,"meta":201,"style":201},"language-rust shiki shiki-themes material-theme-lighter github-light github-dark monokai","let options = OcrRunOptions {\n    output: OutputGranularity::Spatial,\n    line_y_threshold: Some(0.5), \u002F\u002F Vertical row clustering tolerance\n    word_x_threshold: Some(0.4), \u002F\u002F Horizontal word & column spacing tolerance\n    ..Default::default()\n};\n","rust",[203,355,356,378,397,428,451,468],{"__ignoreMap":201},[206,357,358,362,366,370,374],{"class":208,"line":209},[206,359,361],{"class":360},"srJo8","let",[206,363,365],{"class":364},"ss--_"," options ",[206,367,369],{"class":368},"sGXK2","=",[206,371,373],{"class":372},"sKvfc"," OcrRunOptions",[206,375,377],{"class":376},"swvn1"," {\n",[206,379,380,383,385,388,391,394],{"class":208,"line":220},[206,381,382],{"class":364},"    output",[206,384,348],{"class":368},[206,386,387],{"class":372}," OutputGranularity",[206,389,390],{"class":368},"::",[206,392,393],{"class":372},"Spatial",[206,395,396],{"class":376},",\n",[206,398,399,402,404,407,410,414,418,421,424],{"class":208,"line":251},[206,400,401],{"class":364},"    line_y_threshold",[206,403,348],{"class":368},[206,405,406],{"class":372}," Some",[206,408,409],{"class":376},"(",[206,411,413],{"class":412},"sYThS","0",[206,415,417],{"class":416},"sMTiH",".",[206,419,420],{"class":412},"5",[206,422,423],{"class":376},"),",[206,425,427],{"class":426},"ss7Ak"," \u002F\u002F Vertical row clustering tolerance\n",[206,429,430,433,435,437,439,441,443,446,448],{"class":208,"line":270},[206,431,432],{"class":364},"    word_x_threshold",[206,434,348],{"class":368},[206,436,406],{"class":372},[206,438,409],{"class":376},[206,440,413],{"class":412},[206,442,417],{"class":416},[206,444,445],{"class":412},"4",[206,447,423],{"class":376},[206,449,450],{"class":426}," \u002F\u002F Horizontal word & column spacing tolerance\n",[206,452,454,457,460,462,465],{"class":208,"line":453},5,[206,455,456],{"class":368},"    ..",[206,458,459],{"class":372},"Default",[206,461,390],{"class":368},[206,463,464],{"class":216},"default",[206,466,467],{"class":376},"()\n",[206,469,471],{"class":208,"line":470},6,[206,472,473],{"class":376},"};\n",[297,475,477],{"id":476},"parameter-guidelines","Parameter Guidelines",[479,480,481,499],"table",{},[482,483,484],"thead",{},[485,486,487,491,493,496],"tr",{},[488,489,490],"th",{},"Parameter",[488,492,459],{},[488,494,495],{},"When to Increase",[488,497,498],{},"When to Decrease",[500,501,502,538],"tbody",{},[485,503,504,512,517,528],{},[505,506,507],"td",{},[186,508,509],{},[203,510,511],{},"lineYThreshold",[505,513,514],{},[203,515,516],{},"0.5",[505,518,519,520,523,524,527],{},"Increase (",[203,521,522],{},"0.7"," - ",[203,525,526],{},"0.9",") if slightly wavy, handheld, or skewed receipt lines get fragmented into multiple lines.",[505,529,530,531,523,534,537],{},"Decrease (",[203,532,533],{},"0.2",[203,535,536],{},"0.35",") for dense spreadsheets or multi-line tables where rows are packed tightly together.",[485,539,540,547,552,561],{},[505,541,542],{},[186,543,544],{},[203,545,546],{},"wordXThreshold",[505,548,549],{},[203,550,551],{},"0.4",[505,553,519,554,523,557,560],{},[203,555,556],{},"0.6",[203,558,559],{},"0.8",") to merge spaced words across wider gaps into single phrases.",[505,562,530,563,523,565,568],{},[203,564,533],{},[203,566,567],{},"0.3",") to preserve distinct column boundaries in tightly aligned data tables.",[287,570],{},[191,572,574],{"id":573},"practical-examples-by-platform","💡 Practical Examples by Platform",[297,576,577],{"id":353},"Rust",[196,579,581],{"className":351,"code":580,"language":353,"meta":201,"style":201},"let spatial_text = match ocr.detect_text(&image_source, &OcrRunOptions {\n    output: OutputGranularity::Spatial,\n    line_y_threshold: Some(0.5),\n    word_x_threshold: Some(0.4),\n    ..Default::default()\n})? {\n    DetectTextResult::Spatial(text) => text,\n    _ => unreachable!(),\n};\nprintln!(\"{spatial_text}\");\n",[203,582,583,621,635,654,672,684,694,718,733,738],{"__ignoreMap":201},[206,584,585,587,590,592,595,598,600,603,605,608,611,614,617,619],{"class":208,"line":209},[206,586,361],{"class":360},[206,588,589],{"class":364}," spatial_text ",[206,591,369],{"class":368},[206,593,594],{"class":212}," match",[206,596,597],{"class":364}," ocr",[206,599,417],{"class":368},[206,601,602],{"class":216},"detect_text",[206,604,409],{"class":376},[206,606,607],{"class":368},"&",[206,609,610],{"class":364},"image_source",[206,612,613],{"class":376},",",[206,615,616],{"class":368}," &",[206,618,164],{"class":372},[206,620,377],{"class":376},[206,622,623,625,627,629,631,633],{"class":208,"line":220},[206,624,382],{"class":364},[206,626,348],{"class":368},[206,628,387],{"class":372},[206,630,390],{"class":368},[206,632,393],{"class":372},[206,634,396],{"class":376},[206,636,637,639,641,643,645,647,649,651],{"class":208,"line":251},[206,638,401],{"class":364},[206,640,348],{"class":368},[206,642,406],{"class":372},[206,644,409],{"class":376},[206,646,413],{"class":412},[206,648,417],{"class":416},[206,650,420],{"class":412},[206,652,653],{"class":376},"),\n",[206,655,656,658,660,662,664,666,668,670],{"class":208,"line":270},[206,657,432],{"class":364},[206,659,348],{"class":368},[206,661,406],{"class":372},[206,663,409],{"class":376},[206,665,413],{"class":412},[206,667,417],{"class":416},[206,669,445],{"class":412},[206,671,653],{"class":376},[206,673,674,676,678,680,682],{"class":208,"line":453},[206,675,456],{"class":368},[206,677,459],{"class":372},[206,679,390],{"class":368},[206,681,464],{"class":216},[206,683,467],{"class":376},[206,685,686,689,692],{"class":208,"line":470},[206,687,688],{"class":376},"})",[206,690,691],{"class":368},"?",[206,693,377],{"class":376},[206,695,697,700,702,704,706,708,710,713,716],{"class":208,"line":696},7,[206,698,699],{"class":372},"    DetectTextResult",[206,701,390],{"class":368},[206,703,393],{"class":216},[206,705,409],{"class":376},[206,707,310],{"class":364},[206,709,304],{"class":376},[206,711,712],{"class":368}," =>",[206,714,715],{"class":364}," text",[206,717,396],{"class":376},[206,719,721,724,727,730],{"class":208,"line":720},8,[206,722,723],{"class":364},"    _ ",[206,725,726],{"class":368},"=>",[206,728,729],{"class":216}," unreachable!",[206,731,732],{"class":376},"(),\n",[206,734,736],{"class":208,"line":735},9,[206,737,473],{"class":376},[206,739,741,744,746,750,753,756],{"class":208,"line":740},10,[206,742,743],{"class":216},"println!",[206,745,409],{"class":376},[206,747,749],{"class":748},"siCPE","\"{",[206,751,752],{"class":230},"spatial_text",[206,754,755],{"class":748},"}\"",[206,757,758],{"class":376},");\n",[297,760,762],{"id":761},"react-native","React Native",[196,764,768],{"className":765,"code":766,"language":767,"meta":201,"style":201},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark monokai","const formattedLayout = await detectText(\n  { uri: 'file:\u002F\u002F\u002Fpath\u002Fto\u002Finvoice.jpg' },\n  {\n    output: 'spatial',\n    lineYThreshold: 0.5,\n    wordXThreshold: 0.4,\n  }\n);\nconsole.log(formattedLayout);\n","typescript",[203,769,770,791,814,819,834,846,858,863,870],{"__ignoreMap":201},[206,771,772,775,779,782,785,788],{"class":208,"line":209},[206,773,774],{"class":360},"const",[206,776,778],{"class":777},"s91G_"," formattedLayout",[206,780,781],{"class":368}," =",[206,783,784],{"class":212}," await",[206,786,787],{"class":216}," detectText",[206,789,790],{"class":364},"(\n",[206,792,793,796,800,802,805,808,811],{"class":208,"line":220},[206,794,795],{"class":376},"  {",[206,797,799],{"class":798},"squCx"," uri",[206,801,348],{"class":376},[206,803,804],{"class":748}," '",[206,806,807],{"class":230},"file:\u002F\u002F\u002Fpath\u002Fto\u002Finvoice.jpg",[206,809,810],{"class":748},"'",[206,812,813],{"class":376}," },\n",[206,815,816],{"class":208,"line":251},[206,817,818],{"class":376},"  {\n",[206,820,821,823,825,827,830,832],{"class":208,"line":270},[206,822,382],{"class":798},[206,824,348],{"class":376},[206,826,804],{"class":748},[206,828,829],{"class":230},"spatial",[206,831,810],{"class":748},[206,833,396],{"class":376},[206,835,836,839,841,844],{"class":208,"line":453},[206,837,838],{"class":798},"    lineYThreshold",[206,840,348],{"class":376},[206,842,843],{"class":412}," 0.5",[206,845,396],{"class":376},[206,847,848,851,853,856],{"class":208,"line":470},[206,849,850],{"class":798},"    wordXThreshold",[206,852,348],{"class":376},[206,854,855],{"class":412}," 0.4",[206,857,396],{"class":376},[206,859,860],{"class":208,"line":696},[206,861,862],{"class":376},"  }\n",[206,864,865,867],{"class":208,"line":720},[206,866,304],{"class":364},[206,868,869],{"class":376},";\n",[206,871,872,875,877,880,883],{"class":208,"line":735},[206,873,874],{"class":364},"console",[206,876,417],{"class":376},[206,878,879],{"class":216},"log",[206,881,882],{"class":364},"(formattedLayout)",[206,884,869],{"class":376},[886,887,888],"style",{},"html pre.shiki code .sRxSC, html code.shiki .sRxSC{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#F92672;--shiki-sepia-font-style:inherit}html pre.shiki code .sD0ED, html code.shiki .sD0ED{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .s94S9, html code.shiki .s94S9{--shiki-light:#90A4AE;--shiki-default:#E36209;--shiki-dark:#FFAB70;--shiki-sepia:#F8F8F2}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .srJo8, html code.shiki .srJo8{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sKvfc, html code.shiki .sKvfc{--shiki-light:#E2931D;--shiki-light-text-decoration:inherit;--shiki-default:#6F42C1;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sYThS, html code.shiki .sYThS{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sMTiH, html code.shiki .sMTiH{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .s91G_, html code.shiki .s91G_{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#F8F8F2}html pre.shiki code .squCx, html code.shiki .squCx{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}",{"title":201,"searchDepth":220,"depth":220,"links":890},[891,892,898,901],{"id":193,"depth":220,"text":194},{"id":291,"depth":220,"text":292,"children":893},[894,896],{"id":299,"depth":251,"text":895},"1. Flat Line List (output: \"lines\")",{"id":321,"depth":251,"text":897},"2. Reconstructed Spatial Text (output: \"spatial\")",{"id":341,"depth":220,"text":342,"children":899},[900],{"id":476,"depth":251,"text":477},{"id":573,"depth":220,"text":574,"children":902},[903,904],{"id":353,"depth":251,"text":577},{"id":761,"depth":251,"text":762},"How RustO! reconstructs human-readable 2D spatial layouts for multi-column tables, invoices, receipts, and forms.","md",null,{},{"icon":128},{"title":911,"description":905},"Spatial Layout Reconstruction - RustO!","tuR_Wrd1blg5aaKttWJ_EKN0rXHdxx1Vq6O0gEzJuB4",[914,916],{"title":120,"path":121,"stem":122,"description":915,"icon":123,"children":-1},"Language and script support in RustO!: PP-OCRv6 bilingual (Chinese + Latin) scope, and dedicated PP-OCRv5 \u002F PP-OCRv4 regional language packs.",{"title":130,"path":131,"stem":132,"description":917,"icon":133,"children":-1},"Fine-tuning request-local preprocessing, DBNet detection, morphological dilation, and unclip parameters.",1792905889452]