[{"data":1,"prerenderedAt":3255},["ShallowReactive",2],{"navigation_docs_en":3,"-en-advance-guide-multi-column-unwarp-orientation":173,"-en-advance-guide-multi-column-unwarp-orientation-surround":3250},[4,30,104,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],{"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,"children":108,"page":29},"Advance Guide","\u002Fen\u002Fadvance-guide","en\u002F03.advance-guide",[109,114,119,124,129,134,139,144,149],{"title":110,"path":111,"stem":112,"icon":113},"Models & Model Management","\u002Fen\u002Fadvance-guide\u002Fmodels-and-tiers","en\u002F03.advance-guide\u002F01.models-and-tiers","i-ph-cube",{"title":115,"path":116,"stem":117,"icon":118},"Multilingual OCR","\u002Fen\u002Fadvance-guide\u002Fmultilingual-ocr","en\u002F03.advance-guide\u002F02.multilingual-ocr","i-ph-translate",{"title":120,"path":121,"stem":122,"icon":123},"Spatial Layout Reconstruction","\u002Fen\u002Fadvance-guide\u002Fspatial-layout-reconstruction","en\u002F03.advance-guide\u002F03.spatial-layout-reconstruction","i-ph-layout",{"title":125,"path":126,"stem":127,"icon":128},"Image Preprocessing & Tuning","\u002Fen\u002Fadvance-guide\u002Fimage-preprocessing-and-tuning","en\u002F03.advance-guide\u002F04.image-preprocessing-and-tuning","i-ph-sliders",{"title":130,"path":131,"stem":132,"icon":133},"Multi-Column Text, Auto-Unwarp & Dynamic Orientation","\u002Fen\u002Fadvance-guide\u002Fmulti-column-unwarp-orientation","en\u002F03.advance-guide\u002F05.multi-column-unwarp-orientation","i-ph-arrows-clockwise",{"title":135,"path":136,"stem":137,"icon":138},"Use Decoded RGB Input","\u002Fen\u002Fadvance-guide\u002Fuse-decoded-rgb","en\u002F03.advance-guide\u002F06.use-decoded-rgb","lucide-image",{"title":140,"path":141,"stem":142,"icon":143},"Performance & Benchmarks","\u002Fen\u002Fadvance-guide\u002Fperformance-and-benchmarks","en\u002F03.advance-guide\u002F07.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\u002F08.troubleshooting","i-ph-wrench",{"title":150,"path":151,"stem":152,"icon":133},"Migration Guide","\u002Fen\u002Fadvance-guide\u002Fmigration-guide","en\u002F03.advance-guide\u002F09.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":130,"body":175,"description":3242,"extension":3243,"links":3244,"meta":3245,"navigation":3246,"path":131,"seo":3247,"stem":132,"__hash__":3249},"docs_en\u002Fen\u002F03.advance-guide\u002F05.multi-column-unwarp-orientation.md",{"type":176,"value":177,"toc":3217},"minimark",[178,182,211,214,217,222,589,591,595,600,755,763,766,1159,1165,1176,1204,1206,1210,1221,1229,1233,1321,1323,1327,1368,1608,1610,1614,1618,1913,1917,2030,2034,2295,2299,2577,2581,2783,2787,2960,2966,3034,3036,3040,3054,3063,3213],[179,180,181],"p",{},"Standard OCR engines are optimized for clean, single-column, upright flat scans. Real-world documents—such as open books, crumpled receipts, tilted smartphone photos, magazines, academic papers, and multi-column invoices—suffer from:",[183,184,185,193,199,205],"ol",{},[186,187,188,192],"li",{},[189,190,191],"strong",{},"3D page curvature & perspective distortion"," (folded edges, book gutter curvature).",[186,194,195,198],{},[189,196,197],{},"Arbitrary camera rotation"," (sideways 90°\u002F270° captures or upside-down 180° scans).",[186,200,201,204],{},[189,202,203],{},"Multi-column text scrambling"," (naive left-to-right reading merges adjacent column lines).",[186,206,207,210],{},[189,208,209],{},"Mixed inverted text lines"," (isolated upside-down phrases or stamps).",[179,212,213],{},"RustO! solves these challenges through a modular enhancement pipeline controlled per request via fluent builder toggles.",[215,216],"hr",{},[218,219,221],"h2",{"id":220},"_1-modular-enhancement-pipeline","1. Modular Enhancement Pipeline",[223,224,229],"pre",{"className":225,"code":226,"language":227,"meta":228,"style":228},"language-mermaid shiki shiki-themes material-theme-lighter github-light github-dark monokai","flowchart TD\n    A[\"Raw Input Image\u003Cbr\u002F>(Camera Capture \u002F Skewed Scan)\"] --> U{\"1. withAutoUnwarp?\u003Cbr\u002F>(uvdoc.rten)\"}\n    U -->|Enabled| U1[\"Geometric Distortion Correction\u003Cbr\u002F>(Flattens 3D curvature & folds)\"]\n    U -->|Disabled| B\n    U1 --> B{\"2. withOrientationDetection?\u003Cbr\u002F>(indra_orient.rten \u002F ppocr_orient.rten)\"}\n    B -->|Enabled| C[\"Detect & Rotate Canvas\u003Cbr\u002F>(0°, 90°, 180°, 270°)\"]\n    B -->|Disabled| L{\"3. withLayoutReading?\u003Cbr\u002F>(layout_cdla.rten \u002F publaynet)\"}\n    C --> L\n    L -->|Enabled| L1[\"Segment Semantic Regions\u003Cbr\u002F>(regionId & layoutType)\"]\n    L -->|Disabled| D[\"4. Text Detection\u003Cbr\u002F>(Extracts Text Polygon Quads)\"]\n    L1 --> D\n    D --> E{\"5. withLineClassification?\u003Cbr\u002F>(ppocr_cls.rten)\"}\n    E -->|Enabled| F[\"Rotate Inverted Lines 180°\"]\n    E -->|Disabled| G[\"6. Text Recognition\u003Cbr\u002F>(LineNet \u002F SVTR \u002F CRNN)\"]\n    F --> G\n    G --> RO{\"7. Reading Order Transformer?\u003Cbr\u002F>(indra_order.rten)\"}\n    RO -->|Enabled| H[\"Restore Natural Multi-Column Reading Sequence\"]\n    RO -->|Disabled| OUT[\"asLines \u002F asWords \u002F asSpatial Output\"]\n    H --> OUT\n","mermaid","",[230,231,232,245,277,303,318,337,359,380,391,413,434,445,463,485,506,517,535,557,578],"code",{"__ignoreMap":228},[233,234,237,241],"span",{"class":235,"line":236},"line",1,[233,238,240],{"class":239},"sRxSC","flowchart",[233,242,244],{"class":243},"sD0ED"," TD\n",[233,246,248,252,255,259,262,265,268,271,274],{"class":235,"line":247},2,[233,249,251],{"class":250},"s94S9","    A",[233,253,254],{"class":239},"[",[233,256,258],{"class":257},"sLACW","\"Raw Input Image\u003Cbr\u002F>(Camera Capture \u002F Skewed Scan)\"",[233,260,261],{"class":239},"]",[233,263,264],{"class":239}," -->",[233,266,267],{"class":250}," U",[233,269,270],{"class":239},"{",[233,272,273],{"class":257},"\"1. withAutoUnwarp?\u003Cbr\u002F>(uvdoc.rten)\"",[233,275,276],{"class":239},"}\n",[233,278,280,283,286,289,292,295,297,300],{"class":235,"line":279},3,[233,281,282],{"class":250},"    U ",[233,284,285],{"class":239},"-->|",[233,287,288],{"class":257},"Enabled",[233,290,291],{"class":239},"|",[233,293,294],{"class":250}," U1",[233,296,254],{"class":239},[233,298,299],{"class":257},"\"Geometric Distortion Correction\u003Cbr\u002F>(Flattens 3D curvature & folds)\"",[233,301,302],{"class":239},"]\n",[233,304,306,308,310,313,315],{"class":235,"line":305},4,[233,307,282],{"class":250},[233,309,285],{"class":239},[233,311,312],{"class":257},"Disabled",[233,314,291],{"class":239},[233,316,317],{"class":250}," B\n",[233,319,321,324,327,330,332,335],{"class":235,"line":320},5,[233,322,323],{"class":250},"    U1 ",[233,325,326],{"class":239},"-->",[233,328,329],{"class":250}," B",[233,331,270],{"class":239},[233,333,334],{"class":257},"\"2. withOrientationDetection?\u003Cbr\u002F>(indra_orient.rten \u002F ppocr_orient.rten)\"",[233,336,276],{"class":239},[233,338,340,343,345,347,349,352,354,357],{"class":235,"line":339},6,[233,341,342],{"class":250},"    B ",[233,344,285],{"class":239},[233,346,288],{"class":257},[233,348,291],{"class":239},[233,350,351],{"class":250}," C",[233,353,254],{"class":239},[233,355,356],{"class":257},"\"Detect & Rotate Canvas\u003Cbr\u002F>(0°, 90°, 180°, 270°)\"",[233,358,302],{"class":239},[233,360,362,364,366,368,370,373,375,378],{"class":235,"line":361},7,[233,363,342],{"class":250},[233,365,285],{"class":239},[233,367,312],{"class":257},[233,369,291],{"class":239},[233,371,372],{"class":250}," L",[233,374,270],{"class":239},[233,376,377],{"class":257},"\"3. withLayoutReading?\u003Cbr\u002F>(layout_cdla.rten \u002F publaynet)\"",[233,379,276],{"class":239},[233,381,383,386,388],{"class":235,"line":382},8,[233,384,385],{"class":250},"    C ",[233,387,326],{"class":239},[233,389,390],{"class":250}," L\n",[233,392,394,397,399,401,403,406,408,411],{"class":235,"line":393},9,[233,395,396],{"class":250},"    L ",[233,398,285],{"class":239},[233,400,288],{"class":257},[233,402,291],{"class":239},[233,404,405],{"class":250}," L1",[233,407,254],{"class":239},[233,409,410],{"class":257},"\"Segment Semantic Regions\u003Cbr\u002F>(regionId & layoutType)\"",[233,412,302],{"class":239},[233,414,416,418,420,422,424,427,429,432],{"class":235,"line":415},10,[233,417,396],{"class":250},[233,419,285],{"class":239},[233,421,312],{"class":257},[233,423,291],{"class":239},[233,425,426],{"class":250}," D",[233,428,254],{"class":239},[233,430,431],{"class":257},"\"4. Text Detection\u003Cbr\u002F>(Extracts Text Polygon Quads)\"",[233,433,302],{"class":239},[233,435,437,440,442],{"class":235,"line":436},11,[233,438,439],{"class":250},"    L1 ",[233,441,326],{"class":239},[233,443,444],{"class":250}," D\n",[233,446,448,451,453,456,458,461],{"class":235,"line":447},12,[233,449,450],{"class":250},"    D ",[233,452,326],{"class":239},[233,454,455],{"class":250}," E",[233,457,270],{"class":239},[233,459,460],{"class":257},"\"5. withLineClassification?\u003Cbr\u002F>(ppocr_cls.rten)\"",[233,462,276],{"class":239},[233,464,466,469,471,473,475,478,480,483],{"class":235,"line":465},13,[233,467,468],{"class":250},"    E ",[233,470,285],{"class":239},[233,472,288],{"class":257},[233,474,291],{"class":239},[233,476,477],{"class":250}," F",[233,479,254],{"class":239},[233,481,482],{"class":257},"\"Rotate Inverted Lines 180°\"",[233,484,302],{"class":239},[233,486,488,490,492,494,496,499,501,504],{"class":235,"line":487},14,[233,489,468],{"class":250},[233,491,285],{"class":239},[233,493,312],{"class":257},[233,495,291],{"class":239},[233,497,498],{"class":250}," G",[233,500,254],{"class":239},[233,502,503],{"class":257},"\"6. Text Recognition\u003Cbr\u002F>(LineNet \u002F SVTR \u002F CRNN)\"",[233,505,302],{"class":239},[233,507,509,512,514],{"class":235,"line":508},15,[233,510,511],{"class":250},"    F ",[233,513,326],{"class":239},[233,515,516],{"class":250}," G\n",[233,518,520,523,525,528,530,533],{"class":235,"line":519},16,[233,521,522],{"class":250},"    G ",[233,524,326],{"class":239},[233,526,527],{"class":250}," RO",[233,529,270],{"class":239},[233,531,532],{"class":257},"\"7. Reading Order Transformer?\u003Cbr\u002F>(indra_order.rten)\"",[233,534,276],{"class":239},[233,536,538,541,543,545,547,550,552,555],{"class":235,"line":537},17,[233,539,540],{"class":250},"    RO ",[233,542,285],{"class":239},[233,544,288],{"class":257},[233,546,291],{"class":239},[233,548,549],{"class":250}," H",[233,551,254],{"class":239},[233,553,554],{"class":257},"\"Restore Natural Multi-Column Reading Sequence\"",[233,556,302],{"class":239},[233,558,560,562,564,566,568,571,573,576],{"class":235,"line":559},18,[233,561,540],{"class":250},[233,563,285],{"class":239},[233,565,312],{"class":257},[233,567,291],{"class":239},[233,569,570],{"class":250}," OUT",[233,572,254],{"class":239},[233,574,575],{"class":257},"\"asLines \u002F asWords \u002F asSpatial Output\"",[233,577,302],{"class":239},[233,579,581,584,586],{"class":235,"line":580},19,[233,582,583],{"class":250},"    H ",[233,585,326],{"class":239},[233,587,588],{"class":250}," OUT\n",[215,590],{},[218,592,594],{"id":593},"_2-multi-column-text-document-layout-analysis","2. Multi-Column Text & Document Layout Analysis",[596,597,599],"h3",{"id":598},"layout-reading-order-models","Layout & Reading Order Models",[601,602,603,626],"table",{},[604,605,606],"thead",{},[607,608,609,614,617,620,623],"tr",{},[610,611,613],"th",{"align":612},"left","Layout Model",[610,615,616],{"align":612},"Origin",[610,618,619],{"align":612},"Size",[610,621,622],{"align":612},"Semantic Classes \u002F Role",[610,624,625],{"align":612},"Best For",[627,628,629,693,729],"tbody",{},[607,630,631,644,647,652,690],{},[632,633,634,639,640],"td",{"align":612},[189,635,636],{},[230,637,638],{},"layout_cdla.rten"," ",[641,642,643],"em",{},"(Default)",[632,645,646],{"align":612},"CDLA (PicoDet)",[632,648,649],{"align":612},[189,650,651],{},"~5.8 MB",[632,653,654,657,658,661,662,661,665,661,668,661,671,661,674,661,677,661,680,661,683,661,686,689],{"align":612},[189,655,656],{},"10 classes",": ",[230,659,660],{},"Text",", ",[230,663,664],{},"Title",[230,666,667],{},"Figure",[230,669,670],{},"FigureCaption",[230,672,673],{},"Table",[230,675,676],{},"TableCaption",[230,678,679],{},"Header",[230,681,682],{},"Footer",[230,684,685],{},"Reference",[230,687,688],{},"Equation",".",[632,691,692],{"align":612},"Academic publications, technical documents, journals, and complex books.",[607,694,695,702,705,710,726],{},[632,696,697],{"align":612},[189,698,699],{},[230,700,701],{},"layout_publaynet.rten",[632,703,704],{"align":612},"PubLayNet (PicoDet)",[632,706,707],{"align":612},[189,708,709],{},"~5.2 MB",[632,711,712,657,715,661,717,661,719,661,722,661,724,689],{"align":612},[189,713,714],{},"5 classes",[230,716,660],{},[230,718,664],{},[230,720,721],{},"List",[230,723,673],{},[230,725,667],{},[632,727,728],{"align":612},"Standard business reports, commercial invoices, and general articles.",[607,730,731,738,741,746,752],{},[632,732,733],{"align":612},[189,734,735],{},[230,736,737],{},"indra_order.rten",[632,739,740],{"align":612},"Indra OCR (DataLab)",[632,742,743],{"align":612},[189,744,745],{},"~2.9 MB",[632,747,748,751],{"align":612},[189,749,750],{},"Neural Reading Order",": Transformer-based visual reading order and multi-column sequence recovery.",[632,753,754],{"align":612},"Multi-column articles, brochures, tax forms, receipts, and complex pages.",[596,756,758,759,762],{"id":757},"dedicated-layout-detection-api-detect_layout","Dedicated Layout Detection API (",[230,760,761],{},"detect_layout",")",[179,764,765],{},"In Rust, you can also invoke document layout analysis standalone to inspect region bounding boxes without running text recognition:",[223,767,771],{"className":768,"code":769,"language":770,"meta":228,"style":228},"language-rust shiki shiki-themes material-theme-lighter github-light github-dark monokai","use rusto::{ImageSource, InitializeConfig, RustO};\n\nrusto::init();\nlet config = InitializeConfig::indra(\n    \"models\u002Findra_det.rten\",\n    \"models\u002Findra_rec.rten\",\n    \"models\u002Findra_meta.json\",\n)\n.with_layout(\"models\u002Flayout_cdla.rten\");\n\nlet mut ocr = RustO::initialize(config)?;\nlet regions = ocr.detect_layout(&ImageSource::Path(\"research_paper.png\".into()))?;\n\nfor region in regions {\n    println!(\n        \"Category: {:?}, Confidence: {:.2}, BBox: [{}, {}, {}, {}]\",\n        region.layout_type, region.confidence,\n        region.bbox.x_min, region.bbox.y_min, region.bbox.x_max, region.bbox.y_max\n    );\n}\n","rust",[230,772,773,807,813,826,849,864,875,886,891,911,915,948,997,1001,1017,1024,1074,1096,1149,1154],{"__ignoreMap":228},[233,774,775,779,783,787,790,793,796,799,801,804],{"class":235,"line":236},[233,776,778],{"class":777},"shWJe","use",[233,780,782],{"class":781},"sKvfc"," rusto",[233,784,786],{"class":785},"sGXK2","::",[233,788,270],{"class":789},"swvn1",[233,791,792],{"class":781},"ImageSource",[233,794,795],{"class":789},",",[233,797,798],{"class":781}," InitializeConfig",[233,800,795],{"class":789},[233,802,803],{"class":781}," RustO",[233,805,806],{"class":789},"};\n",[233,808,809],{"class":235,"line":247},[233,810,812],{"emptyLinePlaceholder":811},true,"\n",[233,814,815,818,820,823],{"class":235,"line":279},[233,816,817],{"class":781},"rusto",[233,819,786],{"class":785},[233,821,822],{"class":243},"init",[233,824,825],{"class":789},"();\n",[233,827,828,832,836,839,841,843,846],{"class":235,"line":305},[233,829,831],{"class":830},"srJo8","let",[233,833,835],{"class":834},"ss--_"," config ",[233,837,838],{"class":785},"=",[233,840,798],{"class":781},[233,842,786],{"class":785},[233,844,845],{"class":243},"indra",[233,847,848],{"class":789},"(\n",[233,850,851,855,858,861],{"class":235,"line":320},[233,852,854],{"class":853},"siCPE","    \"",[233,856,857],{"class":257},"models\u002Findra_det.rten",[233,859,860],{"class":853},"\"",[233,862,863],{"class":789},",\n",[233,865,866,868,871,873],{"class":235,"line":339},[233,867,854],{"class":853},[233,869,870],{"class":257},"models\u002Findra_rec.rten",[233,872,860],{"class":853},[233,874,863],{"class":789},[233,876,877,879,882,884],{"class":235,"line":361},[233,878,854],{"class":853},[233,880,881],{"class":257},"models\u002Findra_meta.json",[233,883,860],{"class":853},[233,885,863],{"class":789},[233,887,888],{"class":235,"line":382},[233,889,890],{"class":789},")\n",[233,892,893,895,898,901,903,906,908],{"class":235,"line":393},[233,894,689],{"class":785},[233,896,897],{"class":243},"with_layout",[233,899,900],{"class":789},"(",[233,902,860],{"class":853},[233,904,905],{"class":257},"models\u002Flayout_cdla.rten",[233,907,860],{"class":853},[233,909,910],{"class":789},");\n",[233,912,913],{"class":235,"line":415},[233,914,812],{"emptyLinePlaceholder":811},[233,916,917,919,923,926,928,930,932,935,937,940,942,945],{"class":235,"line":436},[233,918,831],{"class":830},[233,920,922],{"class":921},"sTNss"," mut",[233,924,925],{"class":834}," ocr ",[233,927,838],{"class":785},[233,929,803],{"class":781},[233,931,786],{"class":785},[233,933,934],{"class":243},"initialize",[233,936,900],{"class":789},[233,938,939],{"class":834},"config",[233,941,762],{"class":789},[233,943,944],{"class":785},"?",[233,946,947],{"class":789},";\n",[233,949,950,952,955,957,960,962,964,966,969,971,973,976,978,980,983,985,987,990,993,995],{"class":235,"line":447},[233,951,831],{"class":830},[233,953,954],{"class":834}," regions ",[233,956,838],{"class":785},[233,958,959],{"class":834}," ocr",[233,961,689],{"class":785},[233,963,761],{"class":243},[233,965,900],{"class":789},[233,967,968],{"class":785},"&",[233,970,792],{"class":781},[233,972,786],{"class":785},[233,974,975],{"class":243},"Path",[233,977,900],{"class":789},[233,979,860],{"class":853},[233,981,982],{"class":257},"research_paper.png",[233,984,860],{"class":853},[233,986,689],{"class":785},[233,988,989],{"class":243},"into",[233,991,992],{"class":789},"()))",[233,994,944],{"class":785},[233,996,947],{"class":789},[233,998,999],{"class":235,"line":465},[233,1000,812],{"emptyLinePlaceholder":811},[233,1002,1003,1006,1009,1012,1014],{"class":235,"line":487},[233,1004,1005],{"class":239},"for",[233,1007,1008],{"class":834}," region ",[233,1010,1011],{"class":777},"in",[233,1013,954],{"class":834},[233,1015,1016],{"class":789},"{\n",[233,1018,1019,1022],{"class":235,"line":508},[233,1020,1021],{"class":243},"    println!",[233,1023,848],{"class":789},[233,1025,1026,1029,1032,1034,1037,1040,1043,1045,1048,1050,1053,1056,1058,1060,1062,1064,1066,1068,1070,1072],{"class":235,"line":519},[233,1027,1028],{"class":853},"        \"",[233,1030,1031],{"class":257},"Category: ",[233,1033,270],{"class":853},[233,1035,1036],{"class":257},":?",[233,1038,1039],{"class":853},"}",[233,1041,1042],{"class":257},", Confidence: ",[233,1044,270],{"class":853},[233,1046,1047],{"class":257},":.2",[233,1049,1039],{"class":853},[233,1051,1052],{"class":257},", BBox: [",[233,1054,1055],{"class":853},"{}",[233,1057,661],{"class":257},[233,1059,1055],{"class":853},[233,1061,661],{"class":257},[233,1063,1055],{"class":853},[233,1065,661],{"class":257},[233,1067,1055],{"class":853},[233,1069,261],{"class":257},[233,1071,860],{"class":853},[233,1073,863],{"class":789},[233,1075,1076,1079,1081,1084,1086,1089,1091,1094],{"class":235,"line":537},[233,1077,1078],{"class":834},"        region",[233,1080,689],{"class":785},[233,1082,1083],{"class":834},"layout_type",[233,1085,795],{"class":789},[233,1087,1088],{"class":834}," region",[233,1090,689],{"class":785},[233,1092,1093],{"class":834},"confidence",[233,1095,863],{"class":789},[233,1097,1098,1100,1102,1105,1107,1110,1112,1114,1116,1118,1120,1123,1125,1127,1129,1131,1133,1136,1138,1140,1142,1144,1146],{"class":235,"line":559},[233,1099,1078],{"class":834},[233,1101,689],{"class":785},[233,1103,1104],{"class":834},"bbox",[233,1106,689],{"class":785},[233,1108,1109],{"class":834},"x_min",[233,1111,795],{"class":789},[233,1113,1088],{"class":834},[233,1115,689],{"class":785},[233,1117,1104],{"class":834},[233,1119,689],{"class":785},[233,1121,1122],{"class":834},"y_min",[233,1124,795],{"class":789},[233,1126,1088],{"class":834},[233,1128,689],{"class":785},[233,1130,1104],{"class":834},[233,1132,689],{"class":785},[233,1134,1135],{"class":834},"x_max",[233,1137,795],{"class":789},[233,1139,1088],{"class":834},[233,1141,689],{"class":785},[233,1143,1104],{"class":834},[233,1145,689],{"class":785},[233,1147,1148],{"class":834},"y_max\n",[233,1150,1151],{"class":235,"line":580},[233,1152,1153],{"class":789},"    );\n",[233,1155,1157],{"class":235,"line":1156},20,[233,1158,276],{"class":789},[596,1160,1162,1163,762],{"id":1161},"neural-reading-order-recovery-indra_orderrten","Neural Reading Order Recovery (",[230,1164,737],{},[179,1166,1167,1168,1171,1172,1175],{},"When ",[230,1169,1170],{},"enableReadingOrder: true"," (or ",[230,1173,1174],{},"--reading-order"," on the CLI) is active, RustO! orders detected text blocks according to natural multi-column flow (Column 1 top-to-bottom, then Column 2 top-to-bottom):",[223,1177,1181],{"className":1178,"code":1179,"language":1180,"meta":228,"style":228},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","rusto two_column_article.png --enable-layout --reading-order --format text\n","bash",[230,1182,1183],{"__ignoreMap":228},[233,1184,1185,1188,1191,1195,1198,1201],{"class":235,"line":236},[233,1186,817],{"class":1187},"sR7ES",[233,1189,1190],{"class":257}," two_column_article.png",[233,1192,1194],{"class":1193},"sFhLe"," --enable-layout",[233,1196,1197],{"class":1193}," --reading-order",[233,1199,1200],{"class":1193}," --format",[233,1202,1203],{"class":257}," text\n",[215,1205],{},[218,1207,1209],{"id":1208},"_3-auto-unwarp-3d-page-curvature-correction-uvdoc","3. Auto-Unwarp: 3D Page Curvature Correction (UVDoc)",[179,1211,1212,1213,1216,1217,1220],{},"Photographs of open thick books, curved documents, or crumpled paper contain non-affine 3D geometric distortions. The ",[189,1214,1215],{},"UVDoc"," network (",[230,1218,1219],{},"uvdoc.rten",", ~30 MB) predicts a dense displacement grid across the document surface and flattens it into a planar 2D image before text detection runs.",[223,1222,1227],{"className":1223,"code":1225,"language":1226,"meta":228},[1224],"language-text","       Curved \u002F Warped Input                     UVDoc Flattened Image\n    ╭────────────────────────╮                ┌────────────────────────┐\n   ╱     Curved Book Gutter   ╲    ───────>   │ Straight Text Lines    │\n  ╰────────────────────────────╯              │ Planar Document Rect   │\n                                              └────────────────────────┘\n","text",[230,1228,1225],{"__ignoreMap":228},[596,1230,1232],{"id":1231},"in-line-pipeline-dewarping","In-Line Pipeline Dewarping",[223,1234,1236],{"className":768,"code":1235,"language":770,"meta":228,"style":228},"use rusto::DetectTextBuilderExt;\n\nlet result = ocr\n    .detect_text_builder(image)\n    .with_auto_unwarp(true)\n    .as_lines()\n    .run()?;\n",[230,1237,1238,1251,1255,1267,1282,1297,1307],{"__ignoreMap":228},[233,1239,1240,1242,1244,1246,1249],{"class":235,"line":236},[233,1241,778],{"class":777},[233,1243,782],{"class":781},[233,1245,786],{"class":785},[233,1247,1248],{"class":781},"DetectTextBuilderExt",[233,1250,947],{"class":789},[233,1252,1253],{"class":235,"line":247},[233,1254,812],{"emptyLinePlaceholder":811},[233,1256,1257,1259,1262,1264],{"class":235,"line":279},[233,1258,831],{"class":830},[233,1260,1261],{"class":834}," result ",[233,1263,838],{"class":785},[233,1265,1266],{"class":834}," ocr\n",[233,1268,1269,1272,1275,1277,1280],{"class":235,"line":305},[233,1270,1271],{"class":785},"    .",[233,1273,1274],{"class":243},"detect_text_builder",[233,1276,900],{"class":789},[233,1278,1279],{"class":834},"image",[233,1281,890],{"class":789},[233,1283,1284,1286,1289,1291,1295],{"class":235,"line":320},[233,1285,1271],{"class":785},[233,1287,1288],{"class":243},"with_auto_unwarp",[233,1290,900],{"class":789},[233,1292,1294],{"class":1293},"sMTiH","true",[233,1296,890],{"class":789},[233,1298,1299,1301,1304],{"class":235,"line":339},[233,1300,1271],{"class":785},[233,1302,1303],{"class":243},"as_lines",[233,1305,1306],{"class":789},"()\n",[233,1308,1309,1311,1314,1317,1319],{"class":235,"line":361},[233,1310,1271],{"class":785},[233,1312,1313],{"class":243},"run",[233,1315,1316],{"class":789},"()",[233,1318,944],{"class":785},[233,1320,947],{"class":789},[215,1322],{},[218,1324,1326],{"id":1325},"_4-dynamic-orientation-text-line-cls","4. Dynamic Orientation & Text-Line CLS",[183,1328,1329,1356],{},[186,1330,1331,1341,1342,661,1345,661,1348,1351,1352,1355],{},[189,1332,1333,1334,1337,1338,762],{},"Whole-Page Orientation (",[230,1335,1336],{},"indra_orient.rten"," \u002F ",[230,1339,1340],{},"ppocr_orient.rten",": Evaluates ",[230,1343,1344],{},"0°",[230,1346,1347],{},"90°",[230,1349,1350],{},"180°",", and ",[230,1353,1354],{},"270°"," canvas rotation and rotates the page upright prior to detection.",[186,1357,1358,1364,1365,1367],{},[189,1359,1360,1361,762],{},"Text-Line Direction Classifier (",[230,1362,1363],{},"ppocr_cls.rten",": Checks cropped text lines for ",[230,1366,1350],{}," inversion prior to recognition (primarily used with PP-OCRv4\u002Fv5 pipelines).",[223,1369,1371],{"className":768,"code":1370,"language":770,"meta":228,"style":228},"use rusto::{DetectTextBuilderExt, InitializeConfig, RustO};\n\nrusto::init();\nlet config = InitializeConfig::ppv5(\"models\u002Fdet.rten\", \"models\u002Frec.rten\", \"models\u002Fdict.txt\")\n    .with_orientation_threshold(\"models\u002Fppocr_orient.rten\", 0.85)\n    .with_cls_threshold(\"models\u002Fppocr_cls.rten\", 0.9);\n\nlet mut ocr = RustO::initialize(config)?;\nlet result = ocr\n    .detect_text_builder(image)\n    .with_orientation_detection(true)\n    .with_line_classification(true)\n    .as_lines()\n    .run()?;\n",[230,1372,1373,1395,1399,1409,1454,1483,1510,1514,1540,1550,1562,1575,1588,1596],{"__ignoreMap":228},[233,1374,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393],{"class":235,"line":236},[233,1376,778],{"class":777},[233,1378,782],{"class":781},[233,1380,786],{"class":785},[233,1382,270],{"class":789},[233,1384,1248],{"class":781},[233,1386,795],{"class":789},[233,1388,798],{"class":781},[233,1390,795],{"class":789},[233,1392,803],{"class":781},[233,1394,806],{"class":789},[233,1396,1397],{"class":235,"line":247},[233,1398,812],{"emptyLinePlaceholder":811},[233,1400,1401,1403,1405,1407],{"class":235,"line":279},[233,1402,817],{"class":781},[233,1404,786],{"class":785},[233,1406,822],{"class":243},[233,1408,825],{"class":789},[233,1410,1411,1413,1415,1417,1419,1421,1424,1426,1428,1431,1433,1435,1438,1441,1443,1445,1447,1450,1452],{"class":235,"line":305},[233,1412,831],{"class":830},[233,1414,835],{"class":834},[233,1416,838],{"class":785},[233,1418,798],{"class":781},[233,1420,786],{"class":785},[233,1422,1423],{"class":243},"ppv5",[233,1425,900],{"class":789},[233,1427,860],{"class":853},[233,1429,1430],{"class":257},"models\u002Fdet.rten",[233,1432,860],{"class":853},[233,1434,795],{"class":789},[233,1436,1437],{"class":853}," \"",[233,1439,1440],{"class":257},"models\u002Frec.rten",[233,1442,860],{"class":853},[233,1444,795],{"class":789},[233,1446,1437],{"class":853},[233,1448,1449],{"class":257},"models\u002Fdict.txt",[233,1451,860],{"class":853},[233,1453,890],{"class":789},[233,1455,1456,1458,1461,1463,1465,1468,1470,1472,1476,1478,1481],{"class":235,"line":320},[233,1457,1271],{"class":785},[233,1459,1460],{"class":243},"with_orientation_threshold",[233,1462,900],{"class":789},[233,1464,860],{"class":853},[233,1466,1467],{"class":257},"models\u002Fppocr_orient.rten",[233,1469,860],{"class":853},[233,1471,795],{"class":789},[233,1473,1475],{"class":1474},"sYThS"," 0",[233,1477,689],{"class":1293},[233,1479,1480],{"class":1474},"85",[233,1482,890],{"class":789},[233,1484,1485,1487,1490,1492,1494,1497,1499,1501,1503,1505,1508],{"class":235,"line":339},[233,1486,1271],{"class":785},[233,1488,1489],{"class":243},"with_cls_threshold",[233,1491,900],{"class":789},[233,1493,860],{"class":853},[233,1495,1496],{"class":257},"models\u002Fppocr_cls.rten",[233,1498,860],{"class":853},[233,1500,795],{"class":789},[233,1502,1475],{"class":1474},[233,1504,689],{"class":1293},[233,1506,1507],{"class":1474},"9",[233,1509,910],{"class":789},[233,1511,1512],{"class":235,"line":361},[233,1513,812],{"emptyLinePlaceholder":811},[233,1515,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538],{"class":235,"line":382},[233,1517,831],{"class":830},[233,1519,922],{"class":921},[233,1521,925],{"class":834},[233,1523,838],{"class":785},[233,1525,803],{"class":781},[233,1527,786],{"class":785},[233,1529,934],{"class":243},[233,1531,900],{"class":789},[233,1533,939],{"class":834},[233,1535,762],{"class":789},[233,1537,944],{"class":785},[233,1539,947],{"class":789},[233,1541,1542,1544,1546,1548],{"class":235,"line":393},[233,1543,831],{"class":830},[233,1545,1261],{"class":834},[233,1547,838],{"class":785},[233,1549,1266],{"class":834},[233,1551,1552,1554,1556,1558,1560],{"class":235,"line":415},[233,1553,1271],{"class":785},[233,1555,1274],{"class":243},[233,1557,900],{"class":789},[233,1559,1279],{"class":834},[233,1561,890],{"class":789},[233,1563,1564,1566,1569,1571,1573],{"class":235,"line":436},[233,1565,1271],{"class":785},[233,1567,1568],{"class":243},"with_orientation_detection",[233,1570,900],{"class":789},[233,1572,1294],{"class":1293},[233,1574,890],{"class":789},[233,1576,1577,1579,1582,1584,1586],{"class":235,"line":447},[233,1578,1271],{"class":785},[233,1580,1581],{"class":243},"with_line_classification",[233,1583,900],{"class":789},[233,1585,1294],{"class":1293},[233,1587,890],{"class":789},[233,1589,1590,1592,1594],{"class":235,"line":465},[233,1591,1271],{"class":785},[233,1593,1303],{"class":243},[233,1595,1306],{"class":789},[233,1597,1598,1600,1602,1604,1606],{"class":235,"line":487},[233,1599,1271],{"class":785},[233,1601,1313],{"class":243},[233,1603,1316],{"class":789},[233,1605,944],{"class":785},[233,1607,947],{"class":789},[215,1609],{},[218,1611,1613],{"id":1612},"_5-cross-platform-implementation-guide","5. Cross-Platform Implementation Guide",[596,1615,1617],{"id":1616},"typescript-nodejs","TypeScript \u002F Node.js",[223,1619,1623],{"className":1620,"code":1621,"language":1622,"meta":228,"style":228},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark monokai","import { RustO } from '@rustors\u002Fnode';\n\nconst engine = RustO.initialize({\n  model: 'indraocr',\n  enableReadingOrder: true,\n  layoutVariant: 'cdla',\n  unwarp: { enabled: true },\n  orientation: { enabled: true },\n  layout: { enabled: true },\n  classification: { enabled: true },\n});\n\nconst spatialText = engine\n  .detectText('tilted_curved_book.jpg')\n  .withAutoUnwarp()\n  .withLayoutReading()\n  .withOrientationDetection()\n  .withLineClassification()\n  .asSpatial()\n  .run();\n\nengine.close();\n","typescript",[230,1624,1625,1652,1656,1678,1696,1709,1725,1744,1761,1778,1795,1803,1807,1819,1838,1847,1856,1865,1874,1883,1893,1898],{"__ignoreMap":228},[233,1626,1627,1630,1633,1635,1638,1641,1644,1647,1650],{"class":235,"line":236},[233,1628,1629],{"class":239},"import",[233,1631,1632],{"class":789}," {",[233,1634,803],{"class":834},[233,1636,1637],{"class":789}," }",[233,1639,1640],{"class":239}," from",[233,1642,1643],{"class":853}," '",[233,1645,1646],{"class":257},"@rustors\u002Fnode",[233,1648,1649],{"class":853},"'",[233,1651,947],{"class":789},[233,1653,1654],{"class":235,"line":247},[233,1655,812],{"emptyLinePlaceholder":811},[233,1657,1658,1661,1665,1668,1670,1672,1674,1676],{"class":235,"line":279},[233,1659,1660],{"class":830},"const",[233,1662,1664],{"class":1663},"s91G_"," engine",[233,1666,1667],{"class":785}," =",[233,1669,803],{"class":834},[233,1671,689],{"class":789},[233,1673,934],{"class":243},[233,1675,900],{"class":834},[233,1677,1016],{"class":789},[233,1679,1680,1684,1687,1689,1692,1694],{"class":235,"line":305},[233,1681,1683],{"class":1682},"squCx","  model",[233,1685,1686],{"class":789},":",[233,1688,1643],{"class":853},[233,1690,1691],{"class":257},"indraocr",[233,1693,1649],{"class":853},[233,1695,863],{"class":789},[233,1697,1698,1701,1703,1707],{"class":235,"line":320},[233,1699,1700],{"class":1682},"  enableReadingOrder",[233,1702,1686],{"class":789},[233,1704,1706],{"class":1705},"s8HiA"," true",[233,1708,863],{"class":789},[233,1710,1711,1714,1716,1718,1721,1723],{"class":235,"line":339},[233,1712,1713],{"class":1682},"  layoutVariant",[233,1715,1686],{"class":789},[233,1717,1643],{"class":853},[233,1719,1720],{"class":257},"cdla",[233,1722,1649],{"class":853},[233,1724,863],{"class":789},[233,1726,1727,1730,1732,1734,1737,1739,1741],{"class":235,"line":361},[233,1728,1729],{"class":1682},"  unwarp",[233,1731,1686],{"class":789},[233,1733,1632],{"class":789},[233,1735,1736],{"class":1682}," enabled",[233,1738,1686],{"class":789},[233,1740,1706],{"class":1705},[233,1742,1743],{"class":789}," },\n",[233,1745,1746,1749,1751,1753,1755,1757,1759],{"class":235,"line":382},[233,1747,1748],{"class":1682},"  orientation",[233,1750,1686],{"class":789},[233,1752,1632],{"class":789},[233,1754,1736],{"class":1682},[233,1756,1686],{"class":789},[233,1758,1706],{"class":1705},[233,1760,1743],{"class":789},[233,1762,1763,1766,1768,1770,1772,1774,1776],{"class":235,"line":393},[233,1764,1765],{"class":1682},"  layout",[233,1767,1686],{"class":789},[233,1769,1632],{"class":789},[233,1771,1736],{"class":1682},[233,1773,1686],{"class":789},[233,1775,1706],{"class":1705},[233,1777,1743],{"class":789},[233,1779,1780,1783,1785,1787,1789,1791,1793],{"class":235,"line":415},[233,1781,1782],{"class":1682},"  classification",[233,1784,1686],{"class":789},[233,1786,1632],{"class":789},[233,1788,1736],{"class":1682},[233,1790,1686],{"class":789},[233,1792,1706],{"class":1705},[233,1794,1743],{"class":789},[233,1796,1797,1799,1801],{"class":235,"line":436},[233,1798,1039],{"class":789},[233,1800,762],{"class":834},[233,1802,947],{"class":789},[233,1804,1805],{"class":235,"line":447},[233,1806,812],{"emptyLinePlaceholder":811},[233,1808,1809,1811,1814,1816],{"class":235,"line":465},[233,1810,1660],{"class":830},[233,1812,1813],{"class":1663}," spatialText",[233,1815,1667],{"class":785},[233,1817,1818],{"class":834}," engine\n",[233,1820,1821,1824,1827,1829,1831,1834,1836],{"class":235,"line":487},[233,1822,1823],{"class":789},"  .",[233,1825,1826],{"class":243},"detectText",[233,1828,900],{"class":834},[233,1830,1649],{"class":853},[233,1832,1833],{"class":257},"tilted_curved_book.jpg",[233,1835,1649],{"class":853},[233,1837,890],{"class":834},[233,1839,1840,1842,1845],{"class":235,"line":508},[233,1841,1823],{"class":789},[233,1843,1844],{"class":243},"withAutoUnwarp",[233,1846,1306],{"class":834},[233,1848,1849,1851,1854],{"class":235,"line":519},[233,1850,1823],{"class":789},[233,1852,1853],{"class":243},"withLayoutReading",[233,1855,1306],{"class":834},[233,1857,1858,1860,1863],{"class":235,"line":537},[233,1859,1823],{"class":789},[233,1861,1862],{"class":243},"withOrientationDetection",[233,1864,1306],{"class":834},[233,1866,1867,1869,1872],{"class":235,"line":559},[233,1868,1823],{"class":789},[233,1870,1871],{"class":243},"withLineClassification",[233,1873,1306],{"class":834},[233,1875,1876,1878,1881],{"class":235,"line":580},[233,1877,1823],{"class":789},[233,1879,1880],{"class":243},"asSpatial",[233,1882,1306],{"class":834},[233,1884,1885,1887,1889,1891],{"class":235,"line":1156},[233,1886,1823],{"class":789},[233,1888,1313],{"class":243},[233,1890,1316],{"class":834},[233,1892,947],{"class":789},[233,1894,1896],{"class":235,"line":1895},21,[233,1897,812],{"emptyLinePlaceholder":811},[233,1899,1901,1904,1906,1909,1911],{"class":235,"line":1900},22,[233,1902,1903],{"class":834},"engine",[233,1905,689],{"class":789},[233,1907,1908],{"class":243},"close",[233,1910,1316],{"class":834},[233,1912,947],{"class":789},[596,1914,1916],{"id":1915},"python","Python",[223,1918,1921],{"className":1919,"code":1920,"language":1915,"meta":228,"style":228},"language-python shiki shiki-themes material-theme-lighter github-light github-dark monokai","from rusto import ClassificationConfig, InitializeConfig, LayoutConfig, OrientationConfig, RustO, UnwarpConfig\n\nconfig = InitializeConfig(\n    model=\"indraocr\",\n    enable_reading_order=True,\n    layout_variant=\"cdla\",\n    unwarp=UnwarpConfig(enabled=True),\n    orientation=OrientationConfig(enabled=True),\n    layout=LayoutConfig(enabled=True),\n    classification=ClassificationConfig(enabled=True),\n)\n\nwith RustO.initialize(config) as engine:\n    result = (\n        engine.detect_text(\"two_column_paper.jpg\")\n        .with_auto_unwarp()\n        .with_layout_reading()\n        .with_orientation_detection()\n        .with_line_classification()\n        .as_lines()\n        .run()\n    )\n",[230,1922,1923,1928,1932,1937,1942,1947,1952,1957,1962,1967,1972,1976,1980,1985,1990,1995,2000,2005,2010,2015,2020,2025],{"__ignoreMap":228},[233,1924,1925],{"class":235,"line":236},[233,1926,1927],{},"from rusto import ClassificationConfig, InitializeConfig, LayoutConfig, OrientationConfig, RustO, UnwarpConfig\n",[233,1929,1930],{"class":235,"line":247},[233,1931,812],{"emptyLinePlaceholder":811},[233,1933,1934],{"class":235,"line":279},[233,1935,1936],{},"config = InitializeConfig(\n",[233,1938,1939],{"class":235,"line":305},[233,1940,1941],{},"    model=\"indraocr\",\n",[233,1943,1944],{"class":235,"line":320},[233,1945,1946],{},"    enable_reading_order=True,\n",[233,1948,1949],{"class":235,"line":339},[233,1950,1951],{},"    layout_variant=\"cdla\",\n",[233,1953,1954],{"class":235,"line":361},[233,1955,1956],{},"    unwarp=UnwarpConfig(enabled=True),\n",[233,1958,1959],{"class":235,"line":382},[233,1960,1961],{},"    orientation=OrientationConfig(enabled=True),\n",[233,1963,1964],{"class":235,"line":393},[233,1965,1966],{},"    layout=LayoutConfig(enabled=True),\n",[233,1968,1969],{"class":235,"line":415},[233,1970,1971],{},"    classification=ClassificationConfig(enabled=True),\n",[233,1973,1974],{"class":235,"line":436},[233,1975,890],{},[233,1977,1978],{"class":235,"line":447},[233,1979,812],{"emptyLinePlaceholder":811},[233,1981,1982],{"class":235,"line":465},[233,1983,1984],{},"with RustO.initialize(config) as engine:\n",[233,1986,1987],{"class":235,"line":487},[233,1988,1989],{},"    result = (\n",[233,1991,1992],{"class":235,"line":508},[233,1993,1994],{},"        engine.detect_text(\"two_column_paper.jpg\")\n",[233,1996,1997],{"class":235,"line":519},[233,1998,1999],{},"        .with_auto_unwarp()\n",[233,2001,2002],{"class":235,"line":537},[233,2003,2004],{},"        .with_layout_reading()\n",[233,2006,2007],{"class":235,"line":559},[233,2008,2009],{},"        .with_orientation_detection()\n",[233,2011,2012],{"class":235,"line":580},[233,2013,2014],{},"        .with_line_classification()\n",[233,2016,2017],{"class":235,"line":1156},[233,2018,2019],{},"        .as_lines()\n",[233,2021,2022],{"class":235,"line":1895},[233,2023,2024],{},"        .run()\n",[233,2026,2027],{"class":235,"line":1900},[233,2028,2029],{},"    )\n",[596,2031,2033],{"id":2032},"c-net","C# (.NET)",[223,2035,2039],{"className":2036,"code":2037,"language":2038,"meta":228,"style":228},"language-csharp shiki shiki-themes material-theme-lighter github-light github-dark monokai","using RustODotnet;\n\nvar config = new InitializeConfig\n{\n    Model = \"indraocr\",\n    EnableReadingOrder = true,\n    LayoutVariant = \"cdla\",\n    Unwarp = new UnwarpConfig { Enabled = true },\n    Orientation = new OrientationConfig { Enabled = true },\n    Layout = new LayoutConfig { Enabled = true }\n};\n\nusing var ocr = RustO.Initialize(config);\n\nvar result = ocr.DetectText(\"curved_doc.jpg\")\n    .WithAutoUnwarp()\n    .WithLayoutReading()\n    .WithOrientationDetection()\n    .AsSpatial()\n    .Run();\n","csharp",[230,2040,2041,2052,2056,2074,2078,2093,2104,2119,2142,2164,2187,2191,2195,2219,2223,2250,2259,2268,2277,2286],{"__ignoreMap":228},[233,2042,2043,2046,2050],{"class":235,"line":236},[233,2044,2045],{"class":777},"using",[233,2047,2049],{"class":2048},"sM5v9"," RustODotnet",[233,2051,947],{"class":789},[233,2053,2054],{"class":235,"line":247},[233,2055,812],{"emptyLinePlaceholder":811},[233,2057,2058,2062,2066,2068,2071],{"class":235,"line":279},[233,2059,2061],{"class":2060},"sQHqT","var",[233,2063,2065],{"class":2064},"sQqfL"," config",[233,2067,1667],{"class":785},[233,2069,2070],{"class":785}," new",[233,2072,2073],{"class":781}," InitializeConfig\n",[233,2075,2076],{"class":235,"line":305},[233,2077,1016],{"class":789},[233,2079,2080,2083,2085,2087,2089,2091],{"class":235,"line":320},[233,2081,2082],{"class":834},"    Model ",[233,2084,838],{"class":785},[233,2086,1437],{"class":853},[233,2088,1691],{"class":257},[233,2090,860],{"class":853},[233,2092,863],{"class":789},[233,2094,2095,2098,2100,2102],{"class":235,"line":339},[233,2096,2097],{"class":834},"    EnableReadingOrder ",[233,2099,838],{"class":785},[233,2101,1706],{"class":1705},[233,2103,863],{"class":789},[233,2105,2106,2109,2111,2113,2115,2117],{"class":235,"line":361},[233,2107,2108],{"class":834},"    LayoutVariant ",[233,2110,838],{"class":785},[233,2112,1437],{"class":853},[233,2114,1720],{"class":257},[233,2116,860],{"class":853},[233,2118,863],{"class":789},[233,2120,2121,2124,2126,2128,2131,2133,2136,2138,2140],{"class":235,"line":382},[233,2122,2123],{"class":834},"    Unwarp ",[233,2125,838],{"class":785},[233,2127,2070],{"class":785},[233,2129,2130],{"class":781}," UnwarpConfig",[233,2132,1632],{"class":789},[233,2134,2135],{"class":834}," Enabled ",[233,2137,838],{"class":785},[233,2139,1706],{"class":1705},[233,2141,1743],{"class":789},[233,2143,2144,2147,2149,2151,2154,2156,2158,2160,2162],{"class":235,"line":393},[233,2145,2146],{"class":834},"    Orientation ",[233,2148,838],{"class":785},[233,2150,2070],{"class":785},[233,2152,2153],{"class":781}," OrientationConfig",[233,2155,1632],{"class":789},[233,2157,2135],{"class":834},[233,2159,838],{"class":785},[233,2161,1706],{"class":1705},[233,2163,1743],{"class":789},[233,2165,2166,2169,2171,2173,2176,2178,2180,2182,2184],{"class":235,"line":415},[233,2167,2168],{"class":834},"    Layout ",[233,2170,838],{"class":785},[233,2172,2070],{"class":785},[233,2174,2175],{"class":781}," LayoutConfig",[233,2177,1632],{"class":789},[233,2179,2135],{"class":834},[233,2181,838],{"class":785},[233,2183,1706],{"class":1705},[233,2185,2186],{"class":789}," }\n",[233,2188,2189],{"class":235,"line":436},[233,2190,806],{"class":789},[233,2192,2193],{"class":235,"line":447},[233,2194,812],{"emptyLinePlaceholder":811},[233,2196,2197,2199,2202,2204,2206,2208,2210,2213,2215,2217],{"class":235,"line":465},[233,2198,2045],{"class":239},[233,2200,2201],{"class":2060}," var",[233,2203,959],{"class":2064},[233,2205,1667],{"class":785},[233,2207,803],{"class":834},[233,2209,689],{"class":789},[233,2211,2212],{"class":243},"Initialize",[233,2214,900],{"class":789},[233,2216,939],{"class":834},[233,2218,910],{"class":789},[233,2220,2221],{"class":235,"line":487},[233,2222,812],{"emptyLinePlaceholder":811},[233,2224,2225,2227,2230,2232,2234,2236,2239,2241,2243,2246,2248],{"class":235,"line":508},[233,2226,2061],{"class":2060},[233,2228,2229],{"class":2064}," result",[233,2231,1667],{"class":785},[233,2233,959],{"class":834},[233,2235,689],{"class":789},[233,2237,2238],{"class":243},"DetectText",[233,2240,900],{"class":789},[233,2242,860],{"class":853},[233,2244,2245],{"class":257},"curved_doc.jpg",[233,2247,860],{"class":853},[233,2249,890],{"class":789},[233,2251,2252,2254,2257],{"class":235,"line":519},[233,2253,1271],{"class":789},[233,2255,2256],{"class":243},"WithAutoUnwarp",[233,2258,1306],{"class":789},[233,2260,2261,2263,2266],{"class":235,"line":537},[233,2262,1271],{"class":789},[233,2264,2265],{"class":243},"WithLayoutReading",[233,2267,1306],{"class":789},[233,2269,2270,2272,2275],{"class":235,"line":559},[233,2271,1271],{"class":789},[233,2273,2274],{"class":243},"WithOrientationDetection",[233,2276,1306],{"class":789},[233,2278,2279,2281,2284],{"class":235,"line":580},[233,2280,1271],{"class":789},[233,2282,2283],{"class":243},"AsSpatial",[233,2285,1306],{"class":789},[233,2287,2288,2290,2293],{"class":235,"line":1156},[233,2289,1271],{"class":789},[233,2291,2292],{"class":243},"Run",[233,2294,825],{"class":789},[596,2296,2298],{"id":2297},"ios-swift","iOS (Swift)",[223,2300,2304],{"className":2301,"code":2302,"language":2303,"meta":228,"style":228},"language-swift shiki shiki-themes material-theme-lighter github-light github-dark monokai","import RustO\n\nvar config = InitializeConfig.indra()\nconfig.enableReadingOrder = true\nconfig.unwarp = UnwarpConfig(enabled: true, modelPath: nil)\nconfig.orientation = OrientationConfig(enabled: true, modelPath: nil, thresh: nil)\nconfig.layout = LayoutConfig(enabled: true, modelPath: nil, confThresh: nil, targetSize: nil, targetHeight: nil, targetWidth: nil)\n\nlet ocr = try RustO.initialize(config: config)\n\nlet result = try ocr.detectText(image: \"scan.jpg\")\n    .withAutoUnwarp()\n    .withLayoutReading()\n    .withOrientationDetection()\n    .asLines()\n    .run()\n","swift",[230,2305,2306,2313,2317,2333,2343,2373,2409,2472,2476,2502,2506,2536,2544,2552,2560,2569],{"__ignoreMap":228},[233,2307,2308,2310],{"class":235,"line":236},[233,2309,1629],{"class":239},[233,2311,2312],{"class":781}," RustO\n",[233,2314,2315],{"class":235,"line":247},[233,2316,812],{"emptyLinePlaceholder":811},[233,2318,2319,2321,2323,2325,2328,2331],{"class":235,"line":279},[233,2320,2061],{"class":777},[233,2322,835],{"class":834},[233,2324,838],{"class":785},[233,2326,2327],{"class":834}," InitializeConfig.",[233,2329,845],{"class":2330},"sMLJd",[233,2332,1306],{"class":789},[233,2334,2335,2338,2340],{"class":235,"line":305},[233,2336,2337],{"class":834},"config.enableReadingOrder ",[233,2339,838],{"class":785},[233,2341,2342],{"class":1705}," true\n",[233,2344,2345,2348,2350,2352,2354,2357,2359,2361,2363,2366,2368,2371],{"class":235,"line":320},[233,2346,2347],{"class":834},"config.unwarp ",[233,2349,838],{"class":785},[233,2351,2130],{"class":2330},[233,2353,900],{"class":789},[233,2355,2356],{"class":2330},"enabled",[233,2358,1686],{"class":789},[233,2360,1706],{"class":1705},[233,2362,661],{"class":834},[233,2364,2365],{"class":2330},"modelPath",[233,2367,1686],{"class":789},[233,2369,2370],{"class":1293}," nil",[233,2372,890],{"class":789},[233,2374,2375,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2403,2405,2407],{"class":235,"line":339},[233,2376,2377],{"class":834},"config.orientation ",[233,2379,838],{"class":785},[233,2381,2153],{"class":2330},[233,2383,900],{"class":789},[233,2385,2356],{"class":2330},[233,2387,1686],{"class":789},[233,2389,1706],{"class":1705},[233,2391,661],{"class":834},[233,2393,2365],{"class":2330},[233,2395,1686],{"class":789},[233,2397,2370],{"class":1293},[233,2399,661],{"class":834},[233,2401,2402],{"class":2330},"thresh",[233,2404,1686],{"class":789},[233,2406,2370],{"class":1293},[233,2408,890],{"class":789},[233,2410,2411,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2439,2441,2443,2445,2448,2450,2452,2454,2457,2459,2461,2463,2466,2468,2470],{"class":235,"line":361},[233,2412,2413],{"class":834},"config.layout ",[233,2415,838],{"class":785},[233,2417,2175],{"class":2330},[233,2419,900],{"class":789},[233,2421,2356],{"class":2330},[233,2423,1686],{"class":789},[233,2425,1706],{"class":1705},[233,2427,661],{"class":834},[233,2429,2365],{"class":2330},[233,2431,1686],{"class":789},[233,2433,2370],{"class":1293},[233,2435,661],{"class":834},[233,2437,2438],{"class":2330},"confThresh",[233,2440,1686],{"class":789},[233,2442,2370],{"class":1293},[233,2444,661],{"class":834},[233,2446,2447],{"class":2330},"targetSize",[233,2449,1686],{"class":789},[233,2451,2370],{"class":1293},[233,2453,661],{"class":834},[233,2455,2456],{"class":2330},"targetHeight",[233,2458,1686],{"class":789},[233,2460,2370],{"class":1293},[233,2462,661],{"class":834},[233,2464,2465],{"class":2330},"targetWidth",[233,2467,1686],{"class":789},[233,2469,2370],{"class":1293},[233,2471,890],{"class":789},[233,2473,2474],{"class":235,"line":382},[233,2475,812],{"emptyLinePlaceholder":811},[233,2477,2478,2480,2482,2484,2487,2490,2492,2494,2496,2498,2500],{"class":235,"line":393},[233,2479,831],{"class":777},[233,2481,925],{"class":834},[233,2483,838],{"class":785},[233,2485,2486],{"class":239}," try",[233,2488,2489],{"class":834}," RustO.",[233,2491,934],{"class":2330},[233,2493,900],{"class":789},[233,2495,939],{"class":2330},[233,2497,1686],{"class":789},[233,2499,2065],{"class":834},[233,2501,890],{"class":789},[233,2503,2504],{"class":235,"line":415},[233,2505,812],{"emptyLinePlaceholder":811},[233,2507,2508,2510,2512,2514,2516,2519,2521,2523,2525,2527,2529,2532,2534],{"class":235,"line":436},[233,2509,831],{"class":777},[233,2511,1261],{"class":834},[233,2513,838],{"class":785},[233,2515,2486],{"class":239},[233,2517,2518],{"class":834}," ocr.",[233,2520,1826],{"class":2330},[233,2522,900],{"class":789},[233,2524,1279],{"class":2330},[233,2526,1686],{"class":789},[233,2528,1437],{"class":853},[233,2530,2531],{"class":257},"scan.jpg",[233,2533,860],{"class":853},[233,2535,890],{"class":789},[233,2537,2538,2540,2542],{"class":235,"line":447},[233,2539,1271],{"class":834},[233,2541,1844],{"class":2330},[233,2543,1306],{"class":789},[233,2545,2546,2548,2550],{"class":235,"line":465},[233,2547,1271],{"class":834},[233,2549,1853],{"class":2330},[233,2551,1306],{"class":789},[233,2553,2554,2556,2558],{"class":235,"line":487},[233,2555,1271],{"class":834},[233,2557,1862],{"class":2330},[233,2559,1306],{"class":789},[233,2561,2562,2564,2567],{"class":235,"line":508},[233,2563,1271],{"class":834},[233,2565,2566],{"class":2330},"asLines",[233,2568,1306],{"class":789},[233,2570,2571,2573,2575],{"class":235,"line":519},[233,2572,1271],{"class":834},[233,2574,1313],{"class":2330},[233,2576,1306],{"class":789},[596,2578,2580],{"id":2579},"android-kotlin","Android (Kotlin)",[223,2582,2586],{"className":2583,"code":2584,"language":2585,"meta":228,"style":228},"language-kotlin shiki shiki-themes material-theme-lighter github-light github-dark monokai","import com.byrizki.rusto.*\n\nval config = InitializeConfig(\n    model = \"indraocr\",\n    enableReadingOrder = true,\n    unwarp = UnwarpConfig(enabled = true),\n    orientation = OrientationConfig(enabled = true),\n    layout = LayoutConfig(enabled = true)\n)\n\nRustO.initialize(context, config).use { ocr ->\n    val result = ocr.detectText(\"content:\u002F\u002F...\")\n        .withAutoUnwarp()\n        .withLayoutReading()\n        .withOrientationDetection()\n        .asLines()\n        .run()\n}\n","kotlin",[230,2587,2588,2599,2603,2616,2628,2639,2658,2675,2692,2696,2700,2718,2738,2747,2755,2763,2771,2779],{"__ignoreMap":228},[233,2589,2590,2592,2595],{"class":235,"line":236},[233,2591,1629],{"class":785},[233,2593,2594],{"class":2064}," com.byrizki.rusto.",[233,2596,2598],{"class":2597},"sSsL9","*\n",[233,2600,2601],{"class":235,"line":247},[233,2602,812],{"emptyLinePlaceholder":811},[233,2604,2605,2608,2610,2612,2614],{"class":235,"line":279},[233,2606,2607],{"class":785},"val",[233,2609,835],{"class":834},[233,2611,838],{"class":785},[233,2613,798],{"class":243},[233,2615,848],{"class":834},[233,2617,2618,2621,2623,2626],{"class":235,"line":305},[233,2619,2620],{"class":834},"    model ",[233,2622,838],{"class":785},[233,2624,2625],{"class":257}," \"indraocr\"",[233,2627,863],{"class":834},[233,2629,2630,2633,2635,2637],{"class":235,"line":320},[233,2631,2632],{"class":834},"    enableReadingOrder ",[233,2634,838],{"class":785},[233,2636,1706],{"class":1705},[233,2638,863],{"class":834},[233,2640,2641,2644,2646,2648,2651,2653,2655],{"class":235,"line":339},[233,2642,2643],{"class":834},"    unwarp ",[233,2645,838],{"class":785},[233,2647,2130],{"class":243},[233,2649,2650],{"class":834},"(enabled ",[233,2652,838],{"class":785},[233,2654,1706],{"class":1705},[233,2656,2657],{"class":834},"),\n",[233,2659,2660,2663,2665,2667,2669,2671,2673],{"class":235,"line":361},[233,2661,2662],{"class":834},"    orientation ",[233,2664,838],{"class":785},[233,2666,2153],{"class":243},[233,2668,2650],{"class":834},[233,2670,838],{"class":785},[233,2672,1706],{"class":1705},[233,2674,2657],{"class":834},[233,2676,2677,2680,2682,2684,2686,2688,2690],{"class":235,"line":382},[233,2678,2679],{"class":834},"    layout ",[233,2681,838],{"class":785},[233,2683,2175],{"class":243},[233,2685,2650],{"class":834},[233,2687,838],{"class":785},[233,2689,1706],{"class":1705},[233,2691,890],{"class":834},[233,2693,2694],{"class":235,"line":393},[233,2695,890],{"class":834},[233,2697,2698],{"class":235,"line":415},[233,2699,812],{"emptyLinePlaceholder":811},[233,2701,2702,2705,2707,2710,2712,2715],{"class":235,"line":436},[233,2703,2704],{"class":834},"RustO.",[233,2706,934],{"class":243},[233,2708,2709],{"class":834},"(context, config).",[233,2711,778],{"class":243},[233,2713,2714],{"class":834}," { ocr ",[233,2716,2717],{"class":830},"->\n",[233,2719,2720,2723,2725,2727,2729,2731,2733,2736],{"class":235,"line":447},[233,2721,2722],{"class":785},"    val",[233,2724,1261],{"class":834},[233,2726,838],{"class":785},[233,2728,2518],{"class":834},[233,2730,1826],{"class":243},[233,2732,900],{"class":834},[233,2734,2735],{"class":257},"\"content:\u002F\u002F...\"",[233,2737,890],{"class":834},[233,2739,2740,2743,2745],{"class":235,"line":465},[233,2741,2742],{"class":834},"        .",[233,2744,1844],{"class":243},[233,2746,1306],{"class":834},[233,2748,2749,2751,2753],{"class":235,"line":487},[233,2750,2742],{"class":834},[233,2752,1853],{"class":243},[233,2754,1306],{"class":834},[233,2756,2757,2759,2761],{"class":235,"line":508},[233,2758,2742],{"class":834},[233,2760,1862],{"class":243},[233,2762,1306],{"class":834},[233,2764,2765,2767,2769],{"class":235,"line":519},[233,2766,2742],{"class":834},[233,2768,2566],{"class":243},[233,2770,1306],{"class":834},[233,2772,2773,2775,2777],{"class":235,"line":537},[233,2774,2742],{"class":834},[233,2776,1313],{"class":243},[233,2778,1306],{"class":834},[233,2780,2781],{"class":235,"line":559},[233,2782,276],{"class":834},[596,2784,2786],{"id":2785},"react-native","React Native",[223,2788,2790],{"className":1620,"code":2789,"language":1622,"meta":228,"style":228},"import { detectText, initialize } from '@rustors\u002Freact-native';\n\nawait initialize({\n  model: 'indraocr',\n  enableReadingOrder: true,\n  layoutVariant: 'cdla',\n});\n\nconst lines = await detectText({ uri: 'file:\u002F\u002F\u002Fpath\u002Fto\u002Fscan.jpg' })\n  .withAutoUnwarp()\n  .withLayoutReading()\n  .withOrientationDetection()\n  .asLines()\n  .run();\n",[230,2791,2792,2819,2823,2834,2848,2858,2872,2880,2884,2918,2926,2934,2942,2950],{"__ignoreMap":228},[233,2793,2794,2796,2798,2801,2803,2806,2808,2810,2812,2815,2817],{"class":235,"line":236},[233,2795,1629],{"class":239},[233,2797,1632],{"class":789},[233,2799,2800],{"class":834}," detectText",[233,2802,795],{"class":789},[233,2804,2805],{"class":834}," initialize",[233,2807,1637],{"class":789},[233,2809,1640],{"class":239},[233,2811,1643],{"class":853},[233,2813,2814],{"class":257},"@rustors\u002Freact-native",[233,2816,1649],{"class":853},[233,2818,947],{"class":789},[233,2820,2821],{"class":235,"line":247},[233,2822,812],{"emptyLinePlaceholder":811},[233,2824,2825,2828,2830,2832],{"class":235,"line":279},[233,2826,2827],{"class":239},"await",[233,2829,2805],{"class":243},[233,2831,900],{"class":834},[233,2833,1016],{"class":789},[233,2835,2836,2838,2840,2842,2844,2846],{"class":235,"line":305},[233,2837,1683],{"class":1682},[233,2839,1686],{"class":789},[233,2841,1643],{"class":853},[233,2843,1691],{"class":257},[233,2845,1649],{"class":853},[233,2847,863],{"class":789},[233,2849,2850,2852,2854,2856],{"class":235,"line":320},[233,2851,1700],{"class":1682},[233,2853,1686],{"class":789},[233,2855,1706],{"class":1705},[233,2857,863],{"class":789},[233,2859,2860,2862,2864,2866,2868,2870],{"class":235,"line":339},[233,2861,1713],{"class":1682},[233,2863,1686],{"class":789},[233,2865,1643],{"class":853},[233,2867,1720],{"class":257},[233,2869,1649],{"class":853},[233,2871,863],{"class":789},[233,2873,2874,2876,2878],{"class":235,"line":361},[233,2875,1039],{"class":789},[233,2877,762],{"class":834},[233,2879,947],{"class":789},[233,2881,2882],{"class":235,"line":382},[233,2883,812],{"emptyLinePlaceholder":811},[233,2885,2886,2888,2891,2893,2896,2898,2900,2902,2905,2907,2909,2912,2914,2916],{"class":235,"line":393},[233,2887,1660],{"class":830},[233,2889,2890],{"class":1663}," lines",[233,2892,1667],{"class":785},[233,2894,2895],{"class":239}," await",[233,2897,2800],{"class":243},[233,2899,900],{"class":834},[233,2901,270],{"class":789},[233,2903,2904],{"class":1682}," uri",[233,2906,1686],{"class":789},[233,2908,1643],{"class":853},[233,2910,2911],{"class":257},"file:\u002F\u002F\u002Fpath\u002Fto\u002Fscan.jpg",[233,2913,1649],{"class":853},[233,2915,1637],{"class":789},[233,2917,890],{"class":834},[233,2919,2920,2922,2924],{"class":235,"line":415},[233,2921,1823],{"class":789},[233,2923,1844],{"class":243},[233,2925,1306],{"class":834},[233,2927,2928,2930,2932],{"class":235,"line":436},[233,2929,1823],{"class":789},[233,2931,1853],{"class":243},[233,2933,1306],{"class":834},[233,2935,2936,2938,2940],{"class":235,"line":447},[233,2937,1823],{"class":789},[233,2939,1862],{"class":243},[233,2941,1306],{"class":834},[233,2943,2944,2946,2948],{"class":235,"line":465},[233,2945,1823],{"class":789},[233,2947,2566],{"class":243},[233,2949,1306],{"class":834},[233,2951,2952,2954,2956,2958],{"class":235,"line":487},[233,2953,1823],{"class":789},[233,2955,1313],{"class":243},[233,2957,1316],{"class":834},[233,2959,947],{"class":789},[596,2961,2963,2964,762],{"id":2962},"command-line-interface-rusto","Command Line Interface (",[230,2965,817],{},[223,2967,2969],{"className":1178,"code":2968,"language":1180,"meta":228,"style":228},"# Enable all enhancement stages (auto-downloads missing auxiliary .rten files)\nrusto warped_two_column_scan.jpg \\\n  --enable-unwarp \\\n  --enable-orient \\\n  --enable-layout \\\n  --layout-variant cdla \\\n  --reading-order \\\n  --format spatial\n",[230,2970,2971,2977,2988,2995,3002,3009,3019,3026],{"__ignoreMap":228},[233,2972,2973],{"class":235,"line":236},[233,2974,2976],{"class":2975},"ss7Ak","# Enable all enhancement stages (auto-downloads missing auxiliary .rten files)\n",[233,2978,2979,2981,2984],{"class":235,"line":247},[233,2980,817],{"class":1187},[233,2982,2983],{"class":257}," warped_two_column_scan.jpg",[233,2985,2987],{"class":2986},"sQeA1"," \\\n",[233,2989,2990,2993],{"class":235,"line":279},[233,2991,2992],{"class":1193},"  --enable-unwarp",[233,2994,2987],{"class":2986},[233,2996,2997,3000],{"class":235,"line":305},[233,2998,2999],{"class":1193},"  --enable-orient",[233,3001,2987],{"class":2986},[233,3003,3004,3007],{"class":235,"line":320},[233,3005,3006],{"class":1193},"  --enable-layout",[233,3008,2987],{"class":2986},[233,3010,3011,3014,3017],{"class":235,"line":339},[233,3012,3013],{"class":1193},"  --layout-variant",[233,3015,3016],{"class":257}," cdla",[233,3018,2987],{"class":2986},[233,3020,3021,3024],{"class":235,"line":361},[233,3022,3023],{"class":1193},"  --reading-order",[233,3025,2987],{"class":2986},[233,3027,3028,3031],{"class":235,"line":382},[233,3029,3030],{"class":1193},"  --format",[233,3032,3033],{"class":257}," spatial\n",[215,3035],{},[218,3037,3039],{"id":3038},"_6-summary-of-optional-model-assets","6. Summary of Optional Model Assets",[179,3041,3042,3043,661,3046,3049,3050,3053],{},"All optional models (",[230,3044,3045],{},".mnn",[230,3047,3048],{},".rten",") are published on Hugging Face Hub (",[230,3051,3052],{},"byrizki\u002Frusto-models","):",[3055,3056,3057],"blockquote",{},[179,3058,3059,3060],{},"Base URL (Hugging Face): ",[230,3061,3062],{},"https:\u002F\u002Fhuggingface.co\u002Fbyrizki\u002Frusto-models\u002Fresolve\u002Fmain\u002F",[601,3064,3065,3081],{},[604,3066,3067],{},[607,3068,3069,3072,3075,3078],{},[610,3070,3071],{"align":612},"Model File",[610,3073,3074],{"align":612},"Enhancement Role",[610,3076,3077],{"align":612},"File Size",[610,3079,3080],{"align":612},"Recommended When",[627,3082,3083,3104,3126,3149,3170,3191],{},[607,3084,3085,3094,3097,3101],{},[632,3086,3087],{"align":612},[189,3088,3089,1337,3092],{},[230,3090,3091],{},"indra_order.mnn",[230,3093,737],{},[632,3095,3096],{"align":612},"Neural Reading Order & Layout Flow",[632,3098,3099],{"align":612},[189,3100,745],{},[632,3102,3103],{"align":612},"Multi-column articles, brochures, tax forms, receipts, and documents with non-linear layout flow.",[607,3105,3106,3115,3118,3123],{},[632,3107,3108],{"align":612},[189,3109,3110,1337,3113],{},[230,3111,3112],{},"uvdoc.mnn",[230,3114,1219],{},[632,3116,3117],{"align":612},"3D Document Geometric Dewarping",[632,3119,3120],{"align":612},[189,3121,3122],{},"~30 MB",[632,3124,3125],{"align":612},"Bound books, crumpled receipts, or folded paper captured with smartphone cameras.",[607,3127,3128,3138,3141,3146],{},[632,3129,3130],{"align":612},[189,3131,3132,1337,3135],{},[230,3133,3134],{},"indra_orient.mnn",[230,3136,3137],{},"ppocr_orient.mnn",[632,3139,3140],{"align":612},"0° \u002F 90° \u002F 180° \u002F 270° Page Rotation",[632,3142,3143],{"align":612},[189,3144,3145],{},"370 KB \u002F 6.4 MB",[632,3147,3148],{"align":612},"User photo uploads where documents may be captured sideways or upside-down.",[607,3150,3151,3160,3163,3167],{},[632,3152,3153],{"align":612},[189,3154,3155,1337,3158],{},[230,3156,3157],{},"layout_cdla.mnn",[230,3159,638],{},[632,3161,3162],{"align":612},"10-Class Document Layout Analysis",[632,3164,3165],{"align":612},[189,3166,651],{},[632,3168,3169],{"align":612},"Academic papers, complex publications, and multi-column articles requiring semantic segmentation.",[607,3171,3172,3181,3184,3188],{},[632,3173,3174],{"align":612},[189,3175,3176,1337,3179],{},[230,3177,3178],{},"layout_publaynet.mnn",[230,3180,701],{},[632,3182,3183],{"align":612},"5-Class Document Layout Analysis",[632,3185,3186],{"align":612},[189,3187,709],{},[632,3189,3190],{"align":612},"Standard commercial reports, general articles, and forms.",[607,3192,3193,3202,3205,3210],{},[632,3194,3195],{"align":612},[189,3196,3197,1337,3200],{},[230,3198,3199],{},"ppocr_cls.mnn",[230,3201,1363],{},[632,3203,3204],{"align":612},"180° Inverted Text-Line Classifier",[632,3206,3207],{"align":612},[189,3208,3209],{},"~585 KB",[632,3211,3212],{"align":612},"PP-OCRv4\u002Fv5 pipelines or documents containing isolated upside-down text lines.",[3214,3215,3216],"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 .shWJe, html code.shiki .shWJe{--shiki-light:#F76D47;--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 .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}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 .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 .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sTNss, html code.shiki .sTNss{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sFhLe, html code.shiki .sFhLe{--shiki-light:#91B859;--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 .sYThS, html code.shiki .sYThS{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}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}html pre.shiki code .s8HiA, html code.shiki .s8HiA{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sM5v9, html code.shiki .sM5v9{--shiki-light:#90A4AE;--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 .sQHqT, html code.shiki .sQHqT{--shiki-light:#E2931D;--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 .sQqfL, html code.shiki .sQqfL{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#F8F8F2}html pre.shiki code .sMLJd, html code.shiki .sMLJd{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}html pre.shiki code .sSsL9, html code.shiki .sSsL9{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#FD971F}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 .sQeA1, html code.shiki .sQeA1{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}",{"title":228,"searchDepth":247,"depth":247,"links":3218},[3219,3220,3227,3230,3231,3241],{"id":220,"depth":247,"text":221},{"id":593,"depth":247,"text":594,"children":3221},[3222,3223,3225],{"id":598,"depth":279,"text":599},{"id":757,"depth":279,"text":3224},"Dedicated Layout Detection API (detect_layout)",{"id":1161,"depth":279,"text":3226},"Neural Reading Order Recovery (indra_order.rten)",{"id":1208,"depth":247,"text":1209,"children":3228},[3229],{"id":1231,"depth":279,"text":1232},{"id":1325,"depth":247,"text":1326},{"id":1612,"depth":247,"text":1613,"children":3232},[3233,3234,3235,3236,3237,3238,3239],{"id":1616,"depth":279,"text":1617},{"id":1915,"depth":279,"text":1916},{"id":2032,"depth":279,"text":2033},{"id":2297,"depth":279,"text":2298},{"id":2579,"depth":279,"text":2580},{"id":2785,"depth":279,"text":2786},{"id":2962,"depth":279,"text":3240},"Command Line Interface (rusto)",{"id":3038,"depth":247,"text":3039},"Comprehensive guide for multi-column documents, neural reading order recovery, 3D geometric page unwarping (UVDoc), whole-page orientation, and line-level CLS classifiers.","md",null,{},{"icon":133},{"title":3248,"description":3242},"Multi-Column Text, Auto-Unwarp & Dynamic Orientation - RustO!","x6yt263BEdJsVOca_h-bY2jYTio7rJXACa30LWl9JkM",[3251,3253],{"title":125,"path":126,"stem":127,"description":3252,"icon":128,"children":-1},"Fine-tuning request-local 6-phase preprocessing, detection thresholds, morphological dilation, unclip ratios, and confidence filtering.",{"title":135,"path":136,"stem":137,"description":3254,"icon":138,"children":-1},"High-performance OCR directly from uncompressed, decoded interleaved RGB8 pixel buffers in Rust, C FFI, and language bindings.",1794089080814]