[{"data":1,"prerenderedAt":2332},["ShallowReactive",2],{"navigation_docs_en":3,"-en-how-to-use-android-kotlin":173,"-en-how-to-use-android-kotlin-surround":2327},[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":56,"body":175,"description":2319,"extension":2320,"links":2321,"meta":2322,"navigation":2323,"path":57,"seo":2324,"stem":58,"__hash__":2326},"docs_en\u002Fen\u002F02.how-to\u002F04.use-android-kotlin.md",{"type":176,"value":177,"toc":2311},"minimark",[178,198,202,213,286,292,347,350,354,365,664,666,670,687,795,797,804,807,977,979,983,986,2307],[179,180,181,182,186,187,186,190,193,194,197],"p",{},"The Android SDK is distributed via JitPack as an AAR containing pre-compiled JNI shared libraries for ",[183,184,185],"code",{},"arm64-v8a",", ",[183,188,189],{},"armeabi-v7a",[183,191,192],{},"x86",", and ",[183,195,196],{},"x86_64",".",[199,200,15],"h2",{"id":201},"installation",[179,203,204,205,208,209,212],{},"Add JitPack to your root ",[183,206,207],{},"settings.gradle"," (or ",[183,210,211],{},"build.gradle","):",[214,215,220],"pre",{"className":216,"code":217,"language":218,"meta":219,"style":219},"language-groovy shiki shiki-themes material-theme-lighter github-light github-dark monokai","dependencyResolutionManagement {\n    repositories {\n        google()\n        mavenCentral()\n        maven { url 'https:\u002F\u002Fjitpack.io' }\n    }\n}\n","groovy","",[183,221,222,231,237,247,255,274,280],{"__ignoreMap":219},[223,224,227],"span",{"class":225,"line":226},"line",1,[223,228,230],{"class":229},"ss--_","dependencyResolutionManagement {\n",[223,232,234],{"class":225,"line":233},2,[223,235,236],{"class":229},"    repositories {\n",[223,238,240,243],{"class":225,"line":239},3,[223,241,242],{"class":229},"        google",[223,244,246],{"class":245},"swvn1","()\n",[223,248,250,253],{"class":225,"line":249},4,[223,251,252],{"class":229},"        mavenCentral",[223,254,246],{"class":245},[223,256,258,261,265,269,271],{"class":225,"line":257},5,[223,259,260],{"class":229},"        maven { url ",[223,262,264],{"class":263},"siCPE","'",[223,266,268],{"class":267},"sLACW","https:\u002F\u002Fjitpack.io",[223,270,264],{"class":263},[223,272,273],{"class":229}," }\n",[223,275,277],{"class":225,"line":276},6,[223,278,279],{"class":229},"    }\n",[223,281,283],{"class":225,"line":282},7,[223,284,285],{"class":229},"}\n",[179,287,288,289,291],{},"In your app module's ",[183,290,211],{},":",[214,293,295],{"className":216,"code":294,"language":218,"meta":219,"style":219},"dependencies {\n    \u002F\u002F Core OCR runtime with JNI native binaries\n    implementation 'com.github.byrizki.rusto-rs:rusto-android:0.3.2'\n\n    \u002F\u002F Bundled PP-OCRv6 Tiny model package (~6 MB)\n    implementation 'com.github.byrizki.rusto-rs:rusto-models-ppocrv6-tiny:0.3.2'\n}\n",[183,296,297,302,308,321,327,332,343],{"__ignoreMap":219},[223,298,299],{"class":225,"line":226},[223,300,301],{"class":229},"dependencies {\n",[223,303,304],{"class":225,"line":233},[223,305,307],{"class":306},"ss7Ak","    \u002F\u002F Core OCR runtime with JNI native binaries\n",[223,309,310,313,315,318],{"class":225,"line":239},[223,311,312],{"class":229},"    implementation ",[223,314,264],{"class":263},[223,316,317],{"class":267},"com.github.byrizki.rusto-rs:rusto-android:0.3.2",[223,319,320],{"class":263},"'\n",[223,322,323],{"class":225,"line":249},[223,324,326],{"emptyLinePlaceholder":325},true,"\n",[223,328,329],{"class":225,"line":257},[223,330,331],{"class":306},"    \u002F\u002F Bundled PP-OCRv6 Tiny model package (~6 MB)\n",[223,333,334,336,338,341],{"class":225,"line":276},[223,335,312],{"class":229},[223,337,264],{"class":263},[223,339,340],{"class":267},"com.github.byrizki.rusto-rs:rusto-models-ppocrv6-tiny:0.3.2",[223,342,320],{"class":263},[223,344,345],{"class":225,"line":282},[223,346,285],{"class":229},[348,349],"hr",{},[199,351,353],{"id":352},"_1-engine-lifecycle-asset-resolution","1. Engine Lifecycle & Asset Resolution",[179,355,356,357,360,361,364],{},"Passing an Android ",[183,358,359],{},"Context"," to ",[183,362,363],{},"RustO.initialize()"," automatically unpacks and caches bundled model and dictionary assets on first launch:",[214,366,370],{"className":367,"code":368,"language":369,"meta":219,"style":219},"language-kotlin shiki shiki-themes material-theme-lighter github-light github-dark monokai","package com.example.ocr\n\nimport android.content.Context\nimport com.byrizki.rusto.*\n\nclass OcrManager(private val context: Context) : AutoCloseable {\n    \u002F\u002F 1. Initialize with default bundled PP-OCRv6 models\n    private val ocr: RustO = RustO.initialize(context)\n\n    \u002F\u002F 2. Or initialize with custom configuration:\n    fun initCustom(): RustO {\n        val config = InitializeConfig(\n            template = \"ppv6\",\n            detection = DetectionConfig(modelPath = \"custom_det.rten\"),\n            recognition = RecognitionConfig(\n                modelPath = \"custom_rec.rten\",\n                dictPath = \"custom_dict.txt\"\n            )\n        )\n        return RustO.initialize(context, config)\n    }\n\n    override fun close() {\n        ocr.close()\n    }\n}\n","kotlin",[183,371,372,382,386,394,405,409,442,447,474,479,485,501,519,533,555,568,581,592,598,604,618,623,628,643,654,659],{"__ignoreMap":219},[223,373,374,378],{"class":225,"line":226},[223,375,377],{"class":376},"sGXK2","package",[223,379,381],{"class":380},"sQqfL"," com.example.ocr\n",[223,383,384],{"class":225,"line":233},[223,385,326],{"emptyLinePlaceholder":325},[223,387,388,391],{"class":225,"line":239},[223,389,390],{"class":376},"import",[223,392,393],{"class":380}," android.content.Context\n",[223,395,396,398,401],{"class":225,"line":249},[223,397,390],{"class":376},[223,399,400],{"class":380}," com.byrizki.rusto.",[223,402,404],{"class":403},"sSsL9","*\n",[223,406,407],{"class":225,"line":257},[223,408,326],{"emptyLinePlaceholder":325},[223,410,411,414,418,421,425,428,431,433,436,439],{"class":225,"line":276},[223,412,413],{"class":376},"class",[223,415,417],{"class":416},"sKvfc"," OcrManager",[223,419,420],{"class":229},"(",[223,422,424],{"class":423},"sTNss","private",[223,426,427],{"class":376}," val",[223,429,430],{"class":229}," context: ",[223,432,359],{"class":416},[223,434,435],{"class":229},") : ",[223,437,438],{"class":416},"AutoCloseable",[223,440,441],{"class":229}," {\n",[223,443,444],{"class":225,"line":282},[223,445,446],{"class":306},"    \u002F\u002F 1. Initialize with default bundled PP-OCRv6 models\n",[223,448,450,453,455,458,461,464,467,471],{"class":225,"line":449},8,[223,451,452],{"class":423},"    private",[223,454,427],{"class":376},[223,456,457],{"class":229}," ocr: ",[223,459,460],{"class":416},"RustO",[223,462,463],{"class":376}," =",[223,465,466],{"class":229}," RustO.",[223,468,470],{"class":469},"sD0ED","initialize",[223,472,473],{"class":229},"(context)\n",[223,475,477],{"class":225,"line":476},9,[223,478,326],{"emptyLinePlaceholder":325},[223,480,482],{"class":225,"line":481},10,[223,483,484],{"class":306},"    \u002F\u002F 2. Or initialize with custom configuration:\n",[223,486,488,491,494,497,499],{"class":225,"line":487},11,[223,489,490],{"class":376},"    fun",[223,492,493],{"class":469}," initCustom",[223,495,496],{"class":229},"(): ",[223,498,460],{"class":416},[223,500,441],{"class":229},[223,502,504,507,510,513,516],{"class":225,"line":503},12,[223,505,506],{"class":376},"        val",[223,508,509],{"class":229}," config ",[223,511,512],{"class":376},"=",[223,514,515],{"class":469}," InitializeConfig",[223,517,518],{"class":229},"(\n",[223,520,522,525,527,530],{"class":225,"line":521},13,[223,523,524],{"class":229},"            template ",[223,526,512],{"class":376},[223,528,529],{"class":267}," \"ppv6\"",[223,531,532],{"class":229},",\n",[223,534,536,539,541,544,547,549,552],{"class":225,"line":535},14,[223,537,538],{"class":229},"            detection ",[223,540,512],{"class":376},[223,542,543],{"class":469}," DetectionConfig",[223,545,546],{"class":229},"(modelPath ",[223,548,512],{"class":376},[223,550,551],{"class":267}," \"custom_det.rten\"",[223,553,554],{"class":229},"),\n",[223,556,558,561,563,566],{"class":225,"line":557},15,[223,559,560],{"class":229},"            recognition ",[223,562,512],{"class":376},[223,564,565],{"class":469}," RecognitionConfig",[223,567,518],{"class":229},[223,569,571,574,576,579],{"class":225,"line":570},16,[223,572,573],{"class":229},"                modelPath ",[223,575,512],{"class":376},[223,577,578],{"class":267}," \"custom_rec.rten\"",[223,580,532],{"class":229},[223,582,584,587,589],{"class":225,"line":583},17,[223,585,586],{"class":229},"                dictPath ",[223,588,512],{"class":376},[223,590,591],{"class":267}," \"custom_dict.txt\"\n",[223,593,595],{"class":225,"line":594},18,[223,596,597],{"class":229},"            )\n",[223,599,601],{"class":225,"line":600},19,[223,602,603],{"class":229},"        )\n",[223,605,607,611,613,615],{"class":225,"line":606},20,[223,608,610],{"class":609},"sRxSC","        return",[223,612,466],{"class":229},[223,614,470],{"class":469},[223,616,617],{"class":229},"(context, config)\n",[223,619,621],{"class":225,"line":620},21,[223,622,279],{"class":229},[223,624,626],{"class":225,"line":625},22,[223,627,326],{"emptyLinePlaceholder":325},[223,629,631,634,637,640],{"class":225,"line":630},23,[223,632,633],{"class":423},"    override",[223,635,636],{"class":376}," fun",[223,638,639],{"class":469}," close",[223,641,642],{"class":229},"() {\n",[223,644,646,649,652],{"class":225,"line":645},24,[223,647,648],{"class":229},"        ocr.",[223,650,651],{"class":469},"close",[223,653,246],{"class":229},[223,655,657],{"class":225,"line":656},25,[223,658,279],{"class":229},[223,660,662],{"class":225,"line":661},26,[223,663,285],{"class":229},[348,665],{},[199,667,669],{"id":668},"_2-supported-image-sources","2. Supported Image Sources",[179,671,672,675,676,679,680,683,684,291],{},[183,673,674],{},"ImageSource"," natively resolves Android ",[183,677,678],{},"content:\u002F\u002F"," URIs, ",[183,681,682],{},"file:\u002F\u002F"," URIs, filesystem paths, and in-memory ",[183,685,686],{},"ByteArray",[214,688,690],{"className":367,"code":689,"language":369,"meta":219,"style":219},"\u002F\u002F 1. Content URI from Photo Picker or Camera Intent (automatic stream decoding)\nval uriSource = ImageSource.Uri(\"content:\u002F\u002Fmedia\u002Fexternal\u002Fimages\u002Fmedia\u002F1002\")\n\n\u002F\u002F 2. Local filesystem path\nval pathSource = ImageSource.Uri(\"\u002Fdata\u002Fuser\u002F0\u002Fcom.example\u002Fcache\u002Fdoc.jpg\")\n\n\u002F\u002F 3. Raw in-memory byte array\nval rawBytes: ByteArray = file.readBytes()\nval byteSource = ImageSource.Bytes(rawBytes)\n",[183,691,692,697,721,725,730,750,754,759,778],{"__ignoreMap":219},[223,693,694],{"class":225,"line":226},[223,695,696],{"class":306},"\u002F\u002F 1. Content URI from Photo Picker or Camera Intent (automatic stream decoding)\n",[223,698,699,702,705,707,710,713,715,718],{"class":225,"line":233},[223,700,701],{"class":376},"val",[223,703,704],{"class":229}," uriSource ",[223,706,512],{"class":376},[223,708,709],{"class":229}," ImageSource.",[223,711,712],{"class":469},"Uri",[223,714,420],{"class":229},[223,716,717],{"class":267},"\"content:\u002F\u002Fmedia\u002Fexternal\u002Fimages\u002Fmedia\u002F1002\"",[223,719,720],{"class":229},")\n",[223,722,723],{"class":225,"line":239},[223,724,326],{"emptyLinePlaceholder":325},[223,726,727],{"class":225,"line":249},[223,728,729],{"class":306},"\u002F\u002F 2. Local filesystem path\n",[223,731,732,734,737,739,741,743,745,748],{"class":225,"line":257},[223,733,701],{"class":376},[223,735,736],{"class":229}," pathSource ",[223,738,512],{"class":376},[223,740,709],{"class":229},[223,742,712],{"class":469},[223,744,420],{"class":229},[223,746,747],{"class":267},"\"\u002Fdata\u002Fuser\u002F0\u002Fcom.example\u002Fcache\u002Fdoc.jpg\"",[223,749,720],{"class":229},[223,751,752],{"class":225,"line":276},[223,753,326],{"emptyLinePlaceholder":325},[223,755,756],{"class":225,"line":282},[223,757,758],{"class":306},"\u002F\u002F 3. Raw in-memory byte array\n",[223,760,761,763,766,768,770,773,776],{"class":225,"line":449},[223,762,701],{"class":376},[223,764,765],{"class":229}," rawBytes: ",[223,767,686],{"class":416},[223,769,463],{"class":376},[223,771,772],{"class":229}," file.",[223,774,775],{"class":469},"readBytes",[223,777,246],{"class":229},[223,779,780,782,785,787,789,792],{"class":225,"line":476},[223,781,701],{"class":376},[223,783,784],{"class":229}," byteSource ",[223,786,512],{"class":376},[223,788,709],{"class":229},[223,790,791],{"class":469},"Bytes",[223,793,794],{"class":229},"(rawBytes)\n",[348,796],{},[199,798,800,801,803],{"id":799},"_3-request-local-options-ocrrunoptions","3. Request-Local Options (",[183,802,164],{},")",[179,805,806],{},"Configure options dynamically per scan call:",[214,808,810],{"className":367,"code":809,"language":369,"meta":219,"style":219},"val options = OcrRunOptions(\n    output = OutputGranularity.LINES, \u002F\u002F LINES, WORDS, or SPATIAL\n    lineYThreshold = 0.5f,            \u002F\u002F Dynamic row grouping tolerance\n    wordXThreshold = 0.4f,            \u002F\u002F Word spacing tolerance\n    textScore = 0.55f,                \u002F\u002F Minimum recognition score cutoff\n    maxSideLen = 1600f,               \u002F\u002F Maximum image side bound\n    detection = DetectionRunOptions(\n        limitSideLen = 960,\n        limitType = \"max\"\n    ),\n    postprocess = PostprocessRunOptions(\n        useDilation = true            \u002F\u002F Morphological dilation for faint receipts\n    )\n)\n",[183,811,812,826,839,856,871,887,903,915,927,937,942,954,968,973],{"__ignoreMap":219},[223,813,814,816,819,821,824],{"class":225,"line":226},[223,815,701],{"class":376},[223,817,818],{"class":229}," options ",[223,820,512],{"class":376},[223,822,823],{"class":469}," OcrRunOptions",[223,825,518],{"class":229},[223,827,828,831,833,836],{"class":225,"line":233},[223,829,830],{"class":229},"    output ",[223,832,512],{"class":376},[223,834,835],{"class":229}," OutputGranularity.LINES, ",[223,837,838],{"class":306},"\u002F\u002F LINES, WORDS, or SPATIAL\n",[223,840,841,844,846,850,853],{"class":225,"line":239},[223,842,843],{"class":229},"    lineYThreshold ",[223,845,512],{"class":376},[223,847,849],{"class":848},"sYThS"," 0.5f",[223,851,852],{"class":229},",            ",[223,854,855],{"class":306},"\u002F\u002F Dynamic row grouping tolerance\n",[223,857,858,861,863,866,868],{"class":225,"line":249},[223,859,860],{"class":229},"    wordXThreshold ",[223,862,512],{"class":376},[223,864,865],{"class":848}," 0.4f",[223,867,852],{"class":229},[223,869,870],{"class":306},"\u002F\u002F Word spacing tolerance\n",[223,872,873,876,878,881,884],{"class":225,"line":257},[223,874,875],{"class":229},"    textScore ",[223,877,512],{"class":376},[223,879,880],{"class":848}," 0.55f",[223,882,883],{"class":229},",                ",[223,885,886],{"class":306},"\u002F\u002F Minimum recognition score cutoff\n",[223,888,889,892,894,897,900],{"class":225,"line":276},[223,890,891],{"class":229},"    maxSideLen ",[223,893,512],{"class":376},[223,895,896],{"class":848}," 1600f",[223,898,899],{"class":229},",               ",[223,901,902],{"class":306},"\u002F\u002F Maximum image side bound\n",[223,904,905,908,910,913],{"class":225,"line":282},[223,906,907],{"class":229},"    detection ",[223,909,512],{"class":376},[223,911,912],{"class":469}," DetectionRunOptions",[223,914,518],{"class":229},[223,916,917,920,922,925],{"class":225,"line":449},[223,918,919],{"class":229},"        limitSideLen ",[223,921,512],{"class":376},[223,923,924],{"class":848}," 960",[223,926,532],{"class":229},[223,928,929,932,934],{"class":225,"line":476},[223,930,931],{"class":229},"        limitType ",[223,933,512],{"class":376},[223,935,936],{"class":267}," \"max\"\n",[223,938,939],{"class":225,"line":481},[223,940,941],{"class":229},"    ),\n",[223,943,944,947,949,952],{"class":225,"line":487},[223,945,946],{"class":229},"    postprocess ",[223,948,512],{"class":376},[223,950,951],{"class":469}," PostprocessRunOptions",[223,953,518],{"class":229},[223,955,956,959,961,965],{"class":225,"line":503},[223,957,958],{"class":229},"        useDilation ",[223,960,512],{"class":376},[223,962,964],{"class":963},"s8HiA"," true",[223,966,967],{"class":306},"            \u002F\u002F Morphological dilation for faint receipts\n",[223,969,970],{"class":225,"line":521},[223,971,972],{"class":229},"    )\n",[223,974,975],{"class":225,"line":535},[223,976,720],{"class":229},[348,978],{},[199,980,982],{"id":981},"_4-complete-jetpack-compose-document-scanner","4. Complete Jetpack Compose Document Scanner",[179,984,985],{},"Here is a full Kotlin Coroutine & Jetpack Compose implementation using Android's modern Photo Picker:",[214,987,989],{"className":367,"code":988,"language":369,"meta":219,"style":219},"package com.example.ocr\n\nimport android.net.Uri\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.foundation.layout.*\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material3.*\nimport androidx.compose.runtime.*\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.font.FontFamily\nimport androidx.compose.ui.unit.dp\nimport com.byrizki.rusto.*\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\n\n@Composable\nfun DocumentScannerScreen() {\n    val context = LocalContext.current\n    var selectedUri by remember { mutableStateOf\u003CUri?>(null) }\n    var results by remember { mutableStateOf\u003CList\u003CTextResult>>(emptyList()) }\n    var spatialText by remember { mutableStateOf(\"\") }\n    var isSpatial by remember { mutableStateOf(false) }\n    var isLoading by remember { mutableStateOf(false) }\n\n    val photoPicker = rememberLauncherForActivityResult(\n        contract = ActivityResultContracts.PickVisualMedia()\n    ) { uri ->\n        if (uri != null) {\n            selectedUri = uri\n        }\n    }\n\n    LaunchedEffect(selectedUri, isSpatial) {\n        val uri = selectedUri ?: return@LaunchedEffect\n        isLoading = true\n\n        withContext(Dispatchers.Default) {\n            RustO.initialize(context).use { ocr ->\n                val source = ImageSource.Uri(uri.toString())\n                if (isSpatial) {\n                    val spatialRes = ocr.detectText(\n                        source,\n                        OcrRunOptions(output = OutputGranularity.SPATIAL, lineYThreshold = 0.5f)\n                    )\n                    if (spatialRes is DetectTextResult.Spatial) {\n                        spatialText = spatialRes.text\n                        results = emptyList()\n                    }\n                } else {\n                    val structRes = ocr.detectText(\n                        source,\n                        OcrRunOptions(output = OutputGranularity.LINES, textScore = 0.5f)\n                    )\n                    if (structRes is DetectTextResult.Structured) {\n                        results = structRes.items\n                        spatialText = \"\"\n                    }\n                }\n            }\n        }\n        isLoading = false\n    }\n\n    Column(modifier = Modifier.fillMaxSize().padding(16.dp)) {\n        Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp)) {\n            Button(\n                onClick = { photoPicker.launch(androidx.activity.result.PickVisualMediaRequest()) },\n                modifier = Modifier.weight(1f)\n            ) {\n                Text(\"Select Document\")\n            }\n\n            FilterChip(\n                selected = isSpatial,\n                onClick = { isSpatial = !isSpatial },\n                label = { Text(if (isSpatial) \"Spatial Layout\" else \"Structured Lines\") }\n            )\n        }\n\n        if (isLoading) {\n            CircularProgressIndicator(modifier = Modifier.padding(vertical = 16.dp))\n        }\n\n        Spacer(modifier = Modifier.height(16.dp))\n\n        if (isSpatial && spatialText.isNotEmpty()) {\n            Text(\n                text = spatialText,\n                fontFamily = FontFamily.Monospace,\n                style = MaterialTheme.typography.bodySmall\n            )\n        } else {\n            LazyColumn(verticalArrangement = Arrangement.spacedBy(8.dp)) {\n                items(results) { item ->\n                    Card(modifier = Modifier.fillMaxWidth()) {\n                        Row(\n                            modifier = Modifier.padding(12.dp),\n                            horizontalArrangement = Arrangement.SpaceBetween\n                        ) {\n                            Text(text = item.text, modifier = Modifier.weight(1f))\n                            Text(\n                                text = \"${(item.score * 100).toInt()}%\",\n                                style = MaterialTheme.typography.bodySmall,\n                                color = MaterialTheme.colorScheme.primary\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n",[183,990,991,997,1001,1008,1015,1022,1031,1038,1045,1054,1063,1070,1077,1084,1091,1099,1106,1113,1117,1122,1132,1145,1180,1214,1236,1258,1279,1284,1299,1315,1325,1343,1354,1360,1365,1370,1379,1398,1409,1414,1423,1442,1466,1475,1494,1500,1520,1526,1541,1552,1565,1571,1582,1598,1603,1621,1626,1639,1649,1659,1664,1670,1676,1681,1691,1696,1701,1732,1765,1773,1796,1816,1822,1835,1840,1845,1853,1864,1882,1914,1919,1924,1929,1937,1962,1967,1972,1993,1998,2018,2026,2037,2048,2059,2064,2074,2095,2106,2122,2130,2150,2161,2167,2194,2201,2243,2254,2265,2271,2277,2282,2287,2292,2297,2302],{"__ignoreMap":219},[223,992,993,995],{"class":225,"line":226},[223,994,377],{"class":376},[223,996,381],{"class":380},[223,998,999],{"class":225,"line":233},[223,1000,326],{"emptyLinePlaceholder":325},[223,1002,1003,1005],{"class":225,"line":239},[223,1004,390],{"class":376},[223,1006,1007],{"class":380}," android.net.Uri\n",[223,1009,1010,1012],{"class":225,"line":249},[223,1011,390],{"class":376},[223,1013,1014],{"class":380}," androidx.activity.compose.rememberLauncherForActivityResult\n",[223,1016,1017,1019],{"class":225,"line":257},[223,1018,390],{"class":376},[223,1020,1021],{"class":380}," androidx.activity.result.contract.ActivityResultContracts\n",[223,1023,1024,1026,1029],{"class":225,"line":276},[223,1025,390],{"class":376},[223,1027,1028],{"class":380}," androidx.compose.foundation.layout.",[223,1030,404],{"class":403},[223,1032,1033,1035],{"class":225,"line":282},[223,1034,390],{"class":376},[223,1036,1037],{"class":380}," androidx.compose.foundation.lazy.LazyColumn\n",[223,1039,1040,1042],{"class":225,"line":449},[223,1041,390],{"class":376},[223,1043,1044],{"class":380}," androidx.compose.foundation.lazy.items\n",[223,1046,1047,1049,1052],{"class":225,"line":476},[223,1048,390],{"class":376},[223,1050,1051],{"class":380}," androidx.compose.material3.",[223,1053,404],{"class":403},[223,1055,1056,1058,1061],{"class":225,"line":481},[223,1057,390],{"class":376},[223,1059,1060],{"class":380}," androidx.compose.runtime.",[223,1062,404],{"class":403},[223,1064,1065,1067],{"class":225,"line":487},[223,1066,390],{"class":376},[223,1068,1069],{"class":380}," androidx.compose.ui.Modifier\n",[223,1071,1072,1074],{"class":225,"line":503},[223,1073,390],{"class":376},[223,1075,1076],{"class":380}," androidx.compose.ui.platform.LocalContext\n",[223,1078,1079,1081],{"class":225,"line":521},[223,1080,390],{"class":376},[223,1082,1083],{"class":380}," androidx.compose.ui.text.font.FontFamily\n",[223,1085,1086,1088],{"class":225,"line":535},[223,1087,390],{"class":376},[223,1089,1090],{"class":380}," androidx.compose.ui.unit.dp\n",[223,1092,1093,1095,1097],{"class":225,"line":557},[223,1094,390],{"class":376},[223,1096,400],{"class":380},[223,1098,404],{"class":403},[223,1100,1101,1103],{"class":225,"line":570},[223,1102,390],{"class":376},[223,1104,1105],{"class":380}," kotlinx.coroutines.Dispatchers\n",[223,1107,1108,1110],{"class":225,"line":583},[223,1109,390],{"class":376},[223,1111,1112],{"class":380}," kotlinx.coroutines.withContext\n",[223,1114,1115],{"class":225,"line":594},[223,1116,326],{"emptyLinePlaceholder":325},[223,1118,1119],{"class":225,"line":600},[223,1120,1121],{"class":416},"@Composable\n",[223,1123,1124,1127,1130],{"class":225,"line":606},[223,1125,1126],{"class":376},"fun",[223,1128,1129],{"class":469}," DocumentScannerScreen",[223,1131,642],{"class":229},[223,1133,1134,1137,1140,1142],{"class":225,"line":620},[223,1135,1136],{"class":376},"    val",[223,1138,1139],{"class":229}," context ",[223,1141,512],{"class":376},[223,1143,1144],{"class":229}," LocalContext.current\n",[223,1146,1147,1150,1153,1156,1159,1162,1165,1168,1170,1173,1177],{"class":225,"line":625},[223,1148,1149],{"class":376},"    var",[223,1151,1152],{"class":229}," selectedUri ",[223,1154,1155],{"class":423},"by",[223,1157,1158],{"class":469}," remember",[223,1160,1161],{"class":229}," { ",[223,1163,1164],{"class":469},"mutableStateOf",[223,1166,1167],{"class":229},"\u003C",[223,1169,712],{"class":416},[223,1171,1172],{"class":229},"?>(",[223,1174,1176],{"class":1175},"sMTiH","null",[223,1178,1179],{"class":229},") }\n",[223,1181,1182,1184,1187,1189,1191,1193,1195,1197,1200,1202,1205,1208,1211],{"class":225,"line":630},[223,1183,1149],{"class":376},[223,1185,1186],{"class":229}," results ",[223,1188,1155],{"class":423},[223,1190,1158],{"class":469},[223,1192,1161],{"class":229},[223,1194,1164],{"class":469},[223,1196,1167],{"class":229},[223,1198,1199],{"class":416},"List",[223,1201,1167],{"class":229},[223,1203,1204],{"class":416},"TextResult",[223,1206,1207],{"class":229},">>(",[223,1209,1210],{"class":469},"emptyList",[223,1212,1213],{"class":229},"()) }\n",[223,1215,1216,1218,1221,1223,1225,1227,1229,1231,1234],{"class":225,"line":645},[223,1217,1149],{"class":376},[223,1219,1220],{"class":229}," spatialText ",[223,1222,1155],{"class":423},[223,1224,1158],{"class":469},[223,1226,1161],{"class":229},[223,1228,1164],{"class":469},[223,1230,420],{"class":229},[223,1232,1233],{"class":267},"\"\"",[223,1235,1179],{"class":229},[223,1237,1238,1240,1243,1245,1247,1249,1251,1253,1256],{"class":225,"line":656},[223,1239,1149],{"class":376},[223,1241,1242],{"class":229}," isSpatial ",[223,1244,1155],{"class":423},[223,1246,1158],{"class":469},[223,1248,1161],{"class":229},[223,1250,1164],{"class":469},[223,1252,420],{"class":229},[223,1254,1255],{"class":963},"false",[223,1257,1179],{"class":229},[223,1259,1260,1262,1265,1267,1269,1271,1273,1275,1277],{"class":225,"line":661},[223,1261,1149],{"class":376},[223,1263,1264],{"class":229}," isLoading ",[223,1266,1155],{"class":423},[223,1268,1158],{"class":469},[223,1270,1161],{"class":229},[223,1272,1164],{"class":469},[223,1274,420],{"class":229},[223,1276,1255],{"class":963},[223,1278,1179],{"class":229},[223,1280,1282],{"class":225,"line":1281},27,[223,1283,326],{"emptyLinePlaceholder":325},[223,1285,1287,1289,1292,1294,1297],{"class":225,"line":1286},28,[223,1288,1136],{"class":376},[223,1290,1291],{"class":229}," photoPicker ",[223,1293,512],{"class":376},[223,1295,1296],{"class":469}," rememberLauncherForActivityResult",[223,1298,518],{"class":229},[223,1300,1302,1305,1307,1310,1313],{"class":225,"line":1301},29,[223,1303,1304],{"class":229},"        contract ",[223,1306,512],{"class":376},[223,1308,1309],{"class":229}," ActivityResultContracts.",[223,1311,1312],{"class":469},"PickVisualMedia",[223,1314,246],{"class":229},[223,1316,1318,1321],{"class":225,"line":1317},30,[223,1319,1320],{"class":229},"    ) { uri ",[223,1322,1324],{"class":1323},"srJo8","->\n",[223,1326,1328,1331,1334,1337,1340],{"class":225,"line":1327},31,[223,1329,1330],{"class":609},"        if",[223,1332,1333],{"class":229}," (uri ",[223,1335,1336],{"class":376},"!=",[223,1338,1339],{"class":1175}," null",[223,1341,1342],{"class":229},") {\n",[223,1344,1346,1349,1351],{"class":225,"line":1345},32,[223,1347,1348],{"class":229},"            selectedUri ",[223,1350,512],{"class":376},[223,1352,1353],{"class":229}," uri\n",[223,1355,1357],{"class":225,"line":1356},33,[223,1358,1359],{"class":229},"        }\n",[223,1361,1363],{"class":225,"line":1362},34,[223,1364,279],{"class":229},[223,1366,1368],{"class":225,"line":1367},35,[223,1369,326],{"emptyLinePlaceholder":325},[223,1371,1373,1376],{"class":225,"line":1372},36,[223,1374,1375],{"class":469},"    LaunchedEffect",[223,1377,1378],{"class":229},"(selectedUri, isSpatial) {\n",[223,1380,1382,1384,1387,1389,1392,1395],{"class":225,"line":1381},37,[223,1383,506],{"class":376},[223,1385,1386],{"class":229}," uri ",[223,1388,512],{"class":376},[223,1390,1391],{"class":229}," selectedUri ?: ",[223,1393,1394],{"class":609},"return",[223,1396,1397],{"class":229},"@LaunchedEffect\n",[223,1399,1401,1404,1406],{"class":225,"line":1400},38,[223,1402,1403],{"class":229},"        isLoading ",[223,1405,512],{"class":376},[223,1407,1408],{"class":963}," true\n",[223,1410,1412],{"class":225,"line":1411},39,[223,1413,326],{"emptyLinePlaceholder":325},[223,1415,1417,1420],{"class":225,"line":1416},40,[223,1418,1419],{"class":469},"        withContext",[223,1421,1422],{"class":229},"(Dispatchers.Default) {\n",[223,1424,1426,1429,1431,1434,1437,1440],{"class":225,"line":1425},41,[223,1427,1428],{"class":229},"            RustO.",[223,1430,470],{"class":469},[223,1432,1433],{"class":229},"(context).",[223,1435,1436],{"class":469},"use",[223,1438,1439],{"class":229}," { ocr ",[223,1441,1324],{"class":1323},[223,1443,1445,1448,1451,1453,1455,1457,1460,1463],{"class":225,"line":1444},42,[223,1446,1447],{"class":376},"                val",[223,1449,1450],{"class":229}," source ",[223,1452,512],{"class":376},[223,1454,709],{"class":229},[223,1456,712],{"class":469},[223,1458,1459],{"class":229},"(uri.",[223,1461,1462],{"class":469},"toString",[223,1464,1465],{"class":229},"())\n",[223,1467,1469,1472],{"class":225,"line":1468},43,[223,1470,1471],{"class":609},"                if",[223,1473,1474],{"class":229}," (isSpatial) {\n",[223,1476,1478,1481,1484,1486,1489,1492],{"class":225,"line":1477},44,[223,1479,1480],{"class":376},"                    val",[223,1482,1483],{"class":229}," spatialRes ",[223,1485,512],{"class":376},[223,1487,1488],{"class":229}," ocr.",[223,1490,1491],{"class":469},"detectText",[223,1493,518],{"class":229},[223,1495,1497],{"class":225,"line":1496},45,[223,1498,1499],{"class":229},"                        source,\n",[223,1501,1503,1506,1509,1511,1514,1516,1518],{"class":225,"line":1502},46,[223,1504,1505],{"class":469},"                        OcrRunOptions",[223,1507,1508],{"class":229},"(output ",[223,1510,512],{"class":376},[223,1512,1513],{"class":229}," OutputGranularity.SPATIAL, lineYThreshold ",[223,1515,512],{"class":376},[223,1517,849],{"class":848},[223,1519,720],{"class":229},[223,1521,1523],{"class":225,"line":1522},47,[223,1524,1525],{"class":229},"                    )\n",[223,1527,1529,1532,1535,1538],{"class":225,"line":1528},48,[223,1530,1531],{"class":609},"                    if",[223,1533,1534],{"class":229}," (spatialRes ",[223,1536,1537],{"class":376},"is",[223,1539,1540],{"class":229}," DetectTextResult.Spatial) {\n",[223,1542,1544,1547,1549],{"class":225,"line":1543},49,[223,1545,1546],{"class":229},"                        spatialText ",[223,1548,512],{"class":376},[223,1550,1551],{"class":229}," spatialRes.text\n",[223,1553,1555,1558,1560,1563],{"class":225,"line":1554},50,[223,1556,1557],{"class":229},"                        results ",[223,1559,512],{"class":376},[223,1561,1562],{"class":469}," emptyList",[223,1564,246],{"class":229},[223,1566,1568],{"class":225,"line":1567},51,[223,1569,1570],{"class":229},"                    }\n",[223,1572,1574,1577,1580],{"class":225,"line":1573},52,[223,1575,1576],{"class":229},"                } ",[223,1578,1579],{"class":609},"else",[223,1581,441],{"class":229},[223,1583,1585,1587,1590,1592,1594,1596],{"class":225,"line":1584},53,[223,1586,1480],{"class":376},[223,1588,1589],{"class":229}," structRes ",[223,1591,512],{"class":376},[223,1593,1488],{"class":229},[223,1595,1491],{"class":469},[223,1597,518],{"class":229},[223,1599,1601],{"class":225,"line":1600},54,[223,1602,1499],{"class":229},[223,1604,1606,1608,1610,1612,1615,1617,1619],{"class":225,"line":1605},55,[223,1607,1505],{"class":469},[223,1609,1508],{"class":229},[223,1611,512],{"class":376},[223,1613,1614],{"class":229}," OutputGranularity.LINES, textScore ",[223,1616,512],{"class":376},[223,1618,849],{"class":848},[223,1620,720],{"class":229},[223,1622,1624],{"class":225,"line":1623},56,[223,1625,1525],{"class":229},[223,1627,1629,1631,1634,1636],{"class":225,"line":1628},57,[223,1630,1531],{"class":609},[223,1632,1633],{"class":229}," (structRes ",[223,1635,1537],{"class":376},[223,1637,1638],{"class":229}," DetectTextResult.Structured) {\n",[223,1640,1642,1644,1646],{"class":225,"line":1641},58,[223,1643,1557],{"class":229},[223,1645,512],{"class":376},[223,1647,1648],{"class":229}," structRes.items\n",[223,1650,1652,1654,1656],{"class":225,"line":1651},59,[223,1653,1546],{"class":229},[223,1655,512],{"class":376},[223,1657,1658],{"class":267}," \"\"\n",[223,1660,1662],{"class":225,"line":1661},60,[223,1663,1570],{"class":229},[223,1665,1667],{"class":225,"line":1666},61,[223,1668,1669],{"class":229},"                }\n",[223,1671,1673],{"class":225,"line":1672},62,[223,1674,1675],{"class":229},"            }\n",[223,1677,1679],{"class":225,"line":1678},63,[223,1680,1359],{"class":229},[223,1682,1684,1686,1688],{"class":225,"line":1683},64,[223,1685,1403],{"class":229},[223,1687,512],{"class":376},[223,1689,1690],{"class":963}," false\n",[223,1692,1694],{"class":225,"line":1693},65,[223,1695,279],{"class":229},[223,1697,1699],{"class":225,"line":1698},66,[223,1700,326],{"emptyLinePlaceholder":325},[223,1702,1704,1707,1710,1712,1715,1718,1721,1724,1726,1729],{"class":225,"line":1703},67,[223,1705,1706],{"class":469},"    Column",[223,1708,1709],{"class":229},"(modifier ",[223,1711,512],{"class":376},[223,1713,1714],{"class":229}," Modifier.",[223,1716,1717],{"class":469},"fillMaxSize",[223,1719,1720],{"class":229},"().",[223,1722,1723],{"class":469},"padding",[223,1725,420],{"class":229},[223,1727,1728],{"class":848},"16",[223,1730,1731],{"class":229},".dp)) {\n",[223,1733,1735,1738,1740,1742,1744,1747,1750,1752,1755,1758,1760,1763],{"class":225,"line":1734},68,[223,1736,1737],{"class":469},"        Row",[223,1739,1709],{"class":229},[223,1741,512],{"class":376},[223,1743,1714],{"class":229},[223,1745,1746],{"class":469},"fillMaxWidth",[223,1748,1749],{"class":229},"(), horizontalArrangement ",[223,1751,512],{"class":376},[223,1753,1754],{"class":229}," Arrangement.",[223,1756,1757],{"class":469},"spacedBy",[223,1759,420],{"class":229},[223,1761,1762],{"class":848},"8",[223,1764,1731],{"class":229},[223,1766,1768,1771],{"class":225,"line":1767},69,[223,1769,1770],{"class":469},"            Button",[223,1772,518],{"class":229},[223,1774,1776,1779,1781,1784,1787,1790,1793],{"class":225,"line":1775},70,[223,1777,1778],{"class":229},"                onClick ",[223,1780,512],{"class":376},[223,1782,1783],{"class":229}," { photoPicker.",[223,1785,1786],{"class":469},"launch",[223,1788,1789],{"class":229},"(androidx.activity.result.",[223,1791,1792],{"class":469},"PickVisualMediaRequest",[223,1794,1795],{"class":229},"()) },\n",[223,1797,1799,1802,1804,1806,1809,1811,1814],{"class":225,"line":1798},71,[223,1800,1801],{"class":229},"                modifier ",[223,1803,512],{"class":376},[223,1805,1714],{"class":229},[223,1807,1808],{"class":469},"weight",[223,1810,420],{"class":229},[223,1812,1813],{"class":848},"1f",[223,1815,720],{"class":229},[223,1817,1819],{"class":225,"line":1818},72,[223,1820,1821],{"class":229},"            ) {\n",[223,1823,1825,1828,1830,1833],{"class":225,"line":1824},73,[223,1826,1827],{"class":469},"                Text",[223,1829,420],{"class":229},[223,1831,1832],{"class":267},"\"Select Document\"",[223,1834,720],{"class":229},[223,1836,1838],{"class":225,"line":1837},74,[223,1839,1675],{"class":229},[223,1841,1843],{"class":225,"line":1842},75,[223,1844,326],{"emptyLinePlaceholder":325},[223,1846,1848,1851],{"class":225,"line":1847},76,[223,1849,1850],{"class":469},"            FilterChip",[223,1852,518],{"class":229},[223,1854,1856,1859,1861],{"class":225,"line":1855},77,[223,1857,1858],{"class":229},"                selected ",[223,1860,512],{"class":376},[223,1862,1863],{"class":229}," isSpatial,\n",[223,1865,1867,1869,1871,1874,1876,1879],{"class":225,"line":1866},78,[223,1868,1778],{"class":229},[223,1870,512],{"class":376},[223,1872,1873],{"class":229}," { isSpatial ",[223,1875,512],{"class":376},[223,1877,1878],{"class":376}," !",[223,1880,1881],{"class":229},"isSpatial },\n",[223,1883,1885,1888,1890,1892,1895,1897,1900,1903,1906,1909,1912],{"class":225,"line":1884},79,[223,1886,1887],{"class":229},"                label ",[223,1889,512],{"class":376},[223,1891,1161],{"class":229},[223,1893,1894],{"class":469},"Text",[223,1896,420],{"class":229},[223,1898,1899],{"class":609},"if",[223,1901,1902],{"class":229}," (isSpatial) ",[223,1904,1905],{"class":267},"\"Spatial Layout\"",[223,1907,1908],{"class":609}," else",[223,1910,1911],{"class":267}," \"Structured Lines\"",[223,1913,1179],{"class":229},[223,1915,1917],{"class":225,"line":1916},80,[223,1918,597],{"class":229},[223,1920,1922],{"class":225,"line":1921},81,[223,1923,1359],{"class":229},[223,1925,1927],{"class":225,"line":1926},82,[223,1928,326],{"emptyLinePlaceholder":325},[223,1930,1932,1934],{"class":225,"line":1931},83,[223,1933,1330],{"class":609},[223,1935,1936],{"class":229}," (isLoading) {\n",[223,1938,1940,1943,1945,1947,1949,1951,1954,1956,1959],{"class":225,"line":1939},84,[223,1941,1942],{"class":469},"            CircularProgressIndicator",[223,1944,1709],{"class":229},[223,1946,512],{"class":376},[223,1948,1714],{"class":229},[223,1950,1723],{"class":469},[223,1952,1953],{"class":229},"(vertical ",[223,1955,512],{"class":376},[223,1957,1958],{"class":848}," 16",[223,1960,1961],{"class":229},".dp))\n",[223,1963,1965],{"class":225,"line":1964},85,[223,1966,1359],{"class":229},[223,1968,1970],{"class":225,"line":1969},86,[223,1971,326],{"emptyLinePlaceholder":325},[223,1973,1975,1978,1980,1982,1984,1987,1989,1991],{"class":225,"line":1974},87,[223,1976,1977],{"class":469},"        Spacer",[223,1979,1709],{"class":229},[223,1981,512],{"class":376},[223,1983,1714],{"class":229},[223,1985,1986],{"class":469},"height",[223,1988,420],{"class":229},[223,1990,1728],{"class":848},[223,1992,1961],{"class":229},[223,1994,1996],{"class":225,"line":1995},88,[223,1997,326],{"emptyLinePlaceholder":325},[223,1999,2001,2003,2006,2009,2012,2015],{"class":225,"line":2000},89,[223,2002,1330],{"class":609},[223,2004,2005],{"class":229}," (isSpatial ",[223,2007,2008],{"class":376},"&&",[223,2010,2011],{"class":229}," spatialText.",[223,2013,2014],{"class":469},"isNotEmpty",[223,2016,2017],{"class":229},"()) {\n",[223,2019,2021,2024],{"class":225,"line":2020},90,[223,2022,2023],{"class":469},"            Text",[223,2025,518],{"class":229},[223,2027,2029,2032,2034],{"class":225,"line":2028},91,[223,2030,2031],{"class":229},"                text ",[223,2033,512],{"class":376},[223,2035,2036],{"class":229}," spatialText,\n",[223,2038,2040,2043,2045],{"class":225,"line":2039},92,[223,2041,2042],{"class":229},"                fontFamily ",[223,2044,512],{"class":376},[223,2046,2047],{"class":229}," FontFamily.Monospace,\n",[223,2049,2051,2054,2056],{"class":225,"line":2050},93,[223,2052,2053],{"class":229},"                style ",[223,2055,512],{"class":376},[223,2057,2058],{"class":229}," MaterialTheme.typography.bodySmall\n",[223,2060,2062],{"class":225,"line":2061},94,[223,2063,597],{"class":229},[223,2065,2067,2070,2072],{"class":225,"line":2066},95,[223,2068,2069],{"class":229},"        } ",[223,2071,1579],{"class":609},[223,2073,441],{"class":229},[223,2075,2077,2080,2083,2085,2087,2089,2091,2093],{"class":225,"line":2076},96,[223,2078,2079],{"class":469},"            LazyColumn",[223,2081,2082],{"class":229},"(verticalArrangement ",[223,2084,512],{"class":376},[223,2086,1754],{"class":229},[223,2088,1757],{"class":469},[223,2090,420],{"class":229},[223,2092,1762],{"class":848},[223,2094,1731],{"class":229},[223,2096,2098,2101,2104],{"class":225,"line":2097},97,[223,2099,2100],{"class":469},"                items",[223,2102,2103],{"class":229},"(results) { item ",[223,2105,1324],{"class":1323},[223,2107,2109,2112,2114,2116,2118,2120],{"class":225,"line":2108},98,[223,2110,2111],{"class":469},"                    Card",[223,2113,1709],{"class":229},[223,2115,512],{"class":376},[223,2117,1714],{"class":229},[223,2119,1746],{"class":469},[223,2121,2017],{"class":229},[223,2123,2125,2128],{"class":225,"line":2124},99,[223,2126,2127],{"class":469},"                        Row",[223,2129,518],{"class":229},[223,2131,2133,2136,2138,2140,2142,2144,2147],{"class":225,"line":2132},100,[223,2134,2135],{"class":229},"                            modifier ",[223,2137,512],{"class":376},[223,2139,1714],{"class":229},[223,2141,1723],{"class":469},[223,2143,420],{"class":229},[223,2145,2146],{"class":848},"12",[223,2148,2149],{"class":229},".dp),\n",[223,2151,2153,2156,2158],{"class":225,"line":2152},101,[223,2154,2155],{"class":229},"                            horizontalArrangement ",[223,2157,512],{"class":376},[223,2159,2160],{"class":229}," Arrangement.SpaceBetween\n",[223,2162,2164],{"class":225,"line":2163},102,[223,2165,2166],{"class":229},"                        ) {\n",[223,2168,2170,2173,2176,2178,2181,2183,2185,2187,2189,2191],{"class":225,"line":2169},103,[223,2171,2172],{"class":469},"                            Text",[223,2174,2175],{"class":229},"(text ",[223,2177,512],{"class":376},[223,2179,2180],{"class":229}," item.text, modifier ",[223,2182,512],{"class":376},[223,2184,1714],{"class":229},[223,2186,1808],{"class":469},[223,2188,420],{"class":229},[223,2190,1813],{"class":848},[223,2192,2193],{"class":229},"))\n",[223,2195,2197,2199],{"class":225,"line":2196},104,[223,2198,2172],{"class":469},[223,2200,518],{"class":229},[223,2202,2204,2207,2209,2212,2216,2220,2223,2226,2229,2232,2235,2238,2241],{"class":225,"line":2203},105,[223,2205,2206],{"class":229},"                                text ",[223,2208,512],{"class":376},[223,2210,2211],{"class":267}," \"",[223,2213,2215],{"class":2214},"slF1C","${",[223,2217,2219],{"class":2218},"s-euU","(item.score ",[223,2221,2222],{"class":376},"*",[223,2224,2225],{"class":848}," 100",[223,2227,2228],{"class":2218},").",[223,2230,2231],{"class":469},"toInt",[223,2233,2234],{"class":2218},"()",[223,2236,2237],{"class":2214},"}",[223,2239,2240],{"class":267},"%\"",[223,2242,532],{"class":229},[223,2244,2246,2249,2251],{"class":225,"line":2245},106,[223,2247,2248],{"class":229},"                                style ",[223,2250,512],{"class":376},[223,2252,2253],{"class":229}," MaterialTheme.typography.bodySmall,\n",[223,2255,2257,2260,2262],{"class":225,"line":2256},107,[223,2258,2259],{"class":229},"                                color ",[223,2261,512],{"class":376},[223,2263,2264],{"class":229}," MaterialTheme.colorScheme.primary\n",[223,2266,2268],{"class":225,"line":2267},108,[223,2269,2270],{"class":229},"                            )\n",[223,2272,2274],{"class":225,"line":2273},109,[223,2275,2276],{"class":229},"                        }\n",[223,2278,2280],{"class":225,"line":2279},110,[223,2281,1570],{"class":229},[223,2283,2285],{"class":225,"line":2284},111,[223,2286,1669],{"class":229},[223,2288,2290],{"class":225,"line":2289},112,[223,2291,1675],{"class":229},[223,2293,2295],{"class":225,"line":2294},113,[223,2296,1359],{"class":229},[223,2298,2300],{"class":225,"line":2299},114,[223,2301,279],{"class":229},[223,2303,2305],{"class":225,"line":2304},115,[223,2306,285],{"class":229},[2308,2309,2310],"style",{},"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 .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--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 .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 .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 .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}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 .sSsL9, html code.shiki .sSsL9{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#FD971F}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 .sTNss, html code.shiki .sTNss{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}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 .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 .sYThS, html code.shiki .sYThS{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}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 .sMTiH, html code.shiki .sMTiH{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}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 .slF1C, html code.shiki .slF1C{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#F92672}html pre.shiki code .s-euU, html code.shiki .s-euU{--shiki-light:#90A4AE;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#F8F8F2}",{"title":219,"searchDepth":233,"depth":233,"links":2312},[2313,2314,2315,2316,2318],{"id":201,"depth":233,"text":15},{"id":352,"depth":233,"text":353},{"id":668,"depth":233,"text":669},{"id":799,"depth":233,"text":2317},"3. Request-Local Options (OcrRunOptions)",{"id":981,"depth":233,"text":982},"Using RustO! in native Android Kotlin and Jetpack Compose applications via JitPack.","md",null,{},{"icon":59},{"title":2325,"description":2319},"Use Android (Kotlin) - RustO!","Vvu-vznr7qkEkqZtkq4H_BebpXy89-l6U-IJpOa_MW4",[2328,2330],{"title":51,"path":52,"stem":53,"description":2329,"icon":54,"children":-1},"Integrating RustO! into iOS Swift and SwiftUI applications via Swift Package Manager (SPM) or CocoaPods.",{"title":61,"path":62,"stem":63,"description":2331,"icon":64,"children":-1},"C \u002F C++ and Foreign Function Interface (FFI) integration guide for RustO!.",1792905888442]