[{"data":1,"prerenderedAt":3310},["ShallowReactive",2],{"navigation_docs_id":3,"-id-how-to-use-ios-swift":173,"-id-how-to-use-ios-swift-surround":3305},[4,30,109,153],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fid\u002Fgetting-started","id\u002F01.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Pengenalan","\u002Fid\u002Fgetting-started\u002Fintroduction","id\u002F01.getting-started\u002F1.introduction","i-ph-rocket",{"title":15,"path":16,"stem":17,"icon":18},"Instalasi","\u002Fid\u002Fgetting-started\u002Finstallation","id\u002F01.getting-started\u002F2.installation","i-ph-download",{"title":20,"path":21,"stem":22,"icon":23},"Panduan Cepat","\u002Fid\u002Fgetting-started\u002Fquick-start","id\u002F01.getting-started\u002F3.quick-start","i-ph-play",{"title":25,"path":26,"stem":27,"icon":28},"Demo Langsung","\u002Fid\u002Fgetting-started\u002Flive-demo","id\u002F01.getting-started\u002F4.live-demo","i-ph-sparkle",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"How To","\u002Fid\u002Fhow-to","id\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},"Menggunakan Rust","\u002Fid\u002Fhow-to\u002Fuse-rust","id\u002F02.how-to\u002F00.use-rust","simple-icons-rust",{"title":41,"path":42,"stem":43,"icon":44},"Menggunakan .NET \u002F C#","\u002Fid\u002Fhow-to\u002Fuse-csharp","id\u002F02.how-to\u002F01.use-csharp","simple-icons-dotnet",{"title":46,"path":47,"stem":48,"icon":49},"Menggunakan React Native","\u002Fid\u002Fhow-to\u002Fuse-react-native","id\u002F02.how-to\u002F02.use-react-native","simple-icons-react",{"title":51,"path":52,"stem":53,"icon":54},"Menggunakan iOS (Swift)","\u002Fid\u002Fhow-to\u002Fuse-ios-swift","id\u002F02.how-to\u002F03.use-ios-swift","simple-icons-apple",{"title":56,"path":57,"stem":58,"icon":59},"Menggunakan Android (Kotlin)","\u002Fid\u002Fhow-to\u002Fuse-android-kotlin","id\u002F02.how-to\u002F04.use-android-kotlin","simple-icons-android",{"title":61,"path":62,"stem":63,"icon":64},"Menggunakan C FFI","\u002Fid\u002Fhow-to\u002Fuse-c-ffi","id\u002F02.how-to\u002F05.use-c-ffi","simple-icons-c",{"title":66,"path":67,"stem":68,"icon":69},"Menggunakan CLI","\u002Fid\u002Fhow-to\u002Fuse-cli","id\u002F02.how-to\u002F06.use-cli","simple-icons-gnubash",{"title":71,"path":72,"stem":73,"icon":74},"Menggunakan Web","\u002Fid\u002Fhow-to\u002Fuse-web","id\u002F02.how-to\u002F07.use-web","simple-icons-javascript",{"title":76,"path":77,"stem":78,"icon":49},"Menggunakan React","\u002Fid\u002Fhow-to\u002Fuse-react","id\u002F02.how-to\u002F08.use-react",{"title":80,"path":81,"stem":82,"icon":83},"Menggunakan Node.js","\u002Fid\u002Fhow-to\u002Fuse-node","id\u002F02.how-to\u002F09.use-node","simple-icons-nodedotjs",{"title":85,"path":86,"stem":87,"icon":88},"Menggunakan Python","\u002Fid\u002Fhow-to\u002Fuse-python","id\u002F02.how-to\u002F10.use-python","simple-icons-python",{"title":90,"path":91,"stem":92,"icon":93},"Menggunakan Golang","\u002Fid\u002Fhow-to\u002Fuse-golang","id\u002F02.how-to\u002F11.use-golang","simple-icons-go",{"title":95,"path":96,"stem":97,"icon":98},"Menggunakan Java & JVM","\u002Fid\u002Fhow-to\u002Fuse-java","id\u002F02.how-to\u002F12.use-java","simple-icons-openjdk",{"title":100,"path":101,"stem":102,"icon":103},"Menggunakan Flutter & Dart","\u002Fid\u002Fhow-to\u002Fuse-flutter","id\u002F02.how-to\u002F13.use-flutter","simple-icons-flutter",{"title":105,"path":106,"stem":107,"icon":108},"Menggunakan Input RGB Terdekode","\u002Fid\u002Fhow-to\u002Fuse-decoded-rgb","id\u002F02.how-to\u002F14.use-decoded-rgb","lucide-image",{"title":110,"path":111,"stem":112,"children":113,"page":29},"Advance Guide","\u002Fid\u002Fadvance-guide","id\u002F03.advance-guide",[114,119,124,129,134,139,144,149],{"title":115,"path":116,"stem":117,"icon":118},"Model & Tingkatan (Tiers)","\u002Fid\u002Fadvance-guide\u002Fmodels-and-tiers","id\u002F03.advance-guide\u002F01.models-and-tiers","i-ph-cube",{"title":120,"path":121,"stem":122,"icon":123},"OCR Multibahasa","\u002Fid\u002Fadvance-guide\u002Fmultilingual-ocr","id\u002F03.advance-guide\u002F02.multilingual-ocr","i-ph-translate",{"title":125,"path":126,"stem":127,"icon":128},"Rekonstruksi Tata Letak Spasial","\u002Fid\u002Fadvance-guide\u002Fspatial-layout-reconstruction","id\u002F03.advance-guide\u002F03.spatial-layout-reconstruction","i-ph-layout",{"title":130,"path":131,"stem":132,"icon":133},"Pra-pemrosesan & Tuning Gambar","\u002Fid\u002Fadvance-guide\u002Fimage-preprocessing-and-tuning","id\u002F03.advance-guide\u002F04.image-preprocessing-and-tuning","i-ph-sliders",{"title":135,"path":136,"stem":137,"icon":138},"Klasifikasi & Orientasi","\u002Fid\u002Fadvance-guide\u002Fclassification-and-orientation","id\u002F03.advance-guide\u002F05.classification-and-orientation","i-ph-arrows-clockwise",{"title":140,"path":141,"stem":142,"icon":143},"Performa & Tolok Ukur (Benchmarks)","\u002Fid\u002Fadvance-guide\u002Fperformance-and-benchmarks","id\u002F03.advance-guide\u002F06.performance-and-benchmarks","i-ph-chart-line-up",{"title":145,"path":146,"stem":147,"icon":148},"Pemecahan Masalah (Troubleshooting)","\u002Fid\u002Fadvance-guide\u002Ftroubleshooting","id\u002F03.advance-guide\u002F07.troubleshooting","i-ph-wrench",{"title":150,"path":151,"stem":152,"icon":138},"v0.2 ke v0.3","\u002Fid\u002Fadvance-guide\u002Fmigration-guide","id\u002F03.advance-guide\u002F08.migration-guide",{"title":154,"path":155,"stem":156,"children":157,"page":29},"Api Reference","\u002Fid\u002Fapi-reference","id\u002F04.api-reference",[158,163,168],{"title":159,"path":160,"stem":161,"icon":162},"InitializeConfig","\u002Fid\u002Fapi-reference\u002Finitialize-config","id\u002F04.api-reference\u002F01.initialize-config","i-ph-code-block",{"title":164,"path":165,"stem":166,"icon":167},"OcrRunOptions","\u002Fid\u002Fapi-reference\u002Focr-run-options","id\u002F04.api-reference\u002F02.ocr-run-options","i-ph-faders",{"title":169,"path":170,"stem":171,"icon":172},"TextResult & Mode Keluaran","\u002Fid\u002Fapi-reference\u002Ftext-result-and-output","id\u002F04.api-reference\u002F03.text-result-and-output","i-ph-textbox",{"id":174,"title":51,"body":175,"description":3297,"extension":3298,"links":3299,"meta":3300,"navigation":3301,"path":52,"seo":3302,"stem":53,"__hash__":3304},"docs_id\u002Fid\u002F02.how-to\u002F03.use-ios-swift.md",{"type":176,"value":177,"toc":3277},"minimark",[178,191,194,198,210,215,220,257,264,267,559,568,570,574,581,689,692,708,710,717,723,805,807,811,815,821,914,918,921,1299,1301,1305,1311,1470,1472,1478,1481,1672,1674,1678,1682,1685,1950,1953,1956,2056,2058,2062,2074,3273],[179,180,181,182,186,187,190],"p",{},"RustO! menyediakan dukungan kelas satu untuk iOS dan macOS melalui XCFramework universal dan pembungkus Swift yang ramah pengembang. Mendukung arsitektur Apple Silicon (",[183,184,185],"code",{},"arm64","), Intel (",[183,188,189],{},"x86_64","), dan Simulator iOS tanpa memerlukan rantai alat kompilasi C++.",[192,193],"hr",{},[195,196,15],"h2",{"id":197},"instalasi",[179,199,200,201,205,206,209],{},"Anda dapat mengintegrasikan RustO! ke dalam proyek iOS Anda menggunakan ",[202,203,204],"strong",{},"Swift Package Manager (SPM)"," atau ",[202,207,208],{},"CocoaPods",".",[211,212,214],"h3",{"id":213},"metode-a-swift-package-manager-direkomendasikan","Metode A: Swift Package Manager (Direkomendasikan)",[216,217,219],"h4",{"id":218},"melalui-xcode","Melalui Xcode",[221,222,223,227,233,246],"ol",{},[224,225,226],"li",{},"Buka proyek Anda di Xcode.",[224,228,229,230],{},"Buka menu ",[202,231,232],{},"File > Add Package Dependencies...",[224,234,235,236],{},"Masukkan URL repositori:\n",[237,238,244],"pre",{"className":239,"code":241,"language":242,"meta":243},[240],"language-text","https:\u002F\u002Fgithub.com\u002Fbyrizki\u002Frusto-rs.git\n","text","",[183,245,241],{"__ignoreMap":243},[224,247,248,249,252,253,256],{},"Pilih produk pustaka ",[183,250,251],{},"RustO"," dan tentukan aturan versi paket yang diinginkan (misalnya ",[183,254,255],{},"0.3.2",").",[216,258,260,261],{"id":259},"melalui-packageswift","Melalui ",[183,262,263],{},"Package.swift",[179,265,266],{},"Jika Anda membuat paket modular atau pustaka Swift:",[237,268,272],{"className":269,"code":270,"language":271,"meta":243,"style":243},"language-swift shiki shiki-themes material-theme-lighter github-light github-dark monokai","\u002F\u002F swift-tools-version: 5.9\nimport PackageDescription\n\nlet package = Package(\n    name: \"MyScannerApp\",\n    platforms: [\n        .iOS(.v13),\n        .macOS(.v11)\n    ],\n    dependencies: [\n        .package(url: \"https:\u002F\u002Fgithub.com\u002Fbyrizki\u002Frusto-rs.git\", from: \"0.3.2\")\n    ],\n    targets: [\n        .target(\n            name: \"MyScannerApp\",\n            dependencies: [\n                .product(name: \"RustO\", package: \"rusto-rs\")\n            ]\n        )\n    ]\n)\n","swift",[183,273,274,283,294,301,323,347,358,378,394,400,410,448,453,463,473,489,499,536,542,548,554],{"__ignoreMap":243},[275,276,279],"span",{"class":277,"line":278},"line",1,[275,280,282],{"class":281},"ss7Ak","\u002F\u002F swift-tools-version: 5.9\n",[275,284,286,290],{"class":277,"line":285},2,[275,287,289],{"class":288},"sRxSC","import",[275,291,293],{"class":292},"sKvfc"," PackageDescription\n",[275,295,297],{"class":277,"line":296},3,[275,298,300],{"emptyLinePlaceholder":299},true,"\n",[275,302,304,308,311,315,319],{"class":277,"line":303},4,[275,305,307],{"class":306},"shWJe","let",[275,309,310],{"class":306}," package",[275,312,314],{"class":313},"sGXK2"," =",[275,316,318],{"class":317},"sMLJd"," Package",[275,320,322],{"class":321},"swvn1","(\n",[275,324,326,329,332,336,340,343],{"class":277,"line":325},5,[275,327,328],{"class":317},"    name",[275,330,331],{"class":321},":",[275,333,335],{"class":334},"siCPE"," \"",[275,337,339],{"class":338},"sLACW","MyScannerApp",[275,341,342],{"class":334},"\"",[275,344,346],{"class":345},"ss--_",",\n",[275,348,350,353,355],{"class":277,"line":349},6,[275,351,352],{"class":317},"    platforms",[275,354,331],{"class":321},[275,356,357],{"class":345}," [\n",[275,359,361,364,367,370,373,376],{"class":277,"line":360},7,[275,362,363],{"class":345},"        .",[275,365,366],{"class":317},"iOS",[275,368,369],{"class":321},"(",[275,371,372],{"class":345},".v13",[275,374,375],{"class":321},")",[275,377,346],{"class":345},[275,379,381,383,386,388,391],{"class":277,"line":380},8,[275,382,363],{"class":345},[275,384,385],{"class":317},"macOS",[275,387,369],{"class":321},[275,389,390],{"class":345},".v11",[275,392,393],{"class":321},")\n",[275,395,397],{"class":277,"line":396},9,[275,398,399],{"class":345},"    ],\n",[275,401,403,406,408],{"class":277,"line":402},10,[275,404,405],{"class":317},"    dependencies",[275,407,331],{"class":321},[275,409,357],{"class":345},[275,411,413,415,418,420,423,425,427,430,432,435,438,440,442,444,446],{"class":277,"line":412},11,[275,414,363],{"class":345},[275,416,417],{"class":317},"package",[275,419,369],{"class":321},[275,421,422],{"class":317},"url",[275,424,331],{"class":321},[275,426,335],{"class":334},[275,428,429],{"class":338},"https:\u002F\u002Fgithub.com\u002Fbyrizki\u002Frusto-rs.git",[275,431,342],{"class":334},[275,433,434],{"class":345},", ",[275,436,437],{"class":317},"from",[275,439,331],{"class":321},[275,441,335],{"class":334},[275,443,255],{"class":338},[275,445,342],{"class":334},[275,447,393],{"class":321},[275,449,451],{"class":277,"line":450},12,[275,452,399],{"class":345},[275,454,456,459,461],{"class":277,"line":455},13,[275,457,458],{"class":317},"    targets",[275,460,331],{"class":321},[275,462,357],{"class":345},[275,464,466,468,471],{"class":277,"line":465},14,[275,467,363],{"class":345},[275,469,470],{"class":317},"target",[275,472,322],{"class":321},[275,474,476,479,481,483,485,487],{"class":277,"line":475},15,[275,477,478],{"class":317},"            name",[275,480,331],{"class":321},[275,482,335],{"class":334},[275,484,339],{"class":338},[275,486,342],{"class":334},[275,488,346],{"class":345},[275,490,492,495,497],{"class":277,"line":491},16,[275,493,494],{"class":317},"            dependencies",[275,496,331],{"class":321},[275,498,357],{"class":345},[275,500,502,505,508,510,513,515,517,519,521,523,525,527,529,532,534],{"class":277,"line":501},17,[275,503,504],{"class":345},"                .",[275,506,507],{"class":317},"product",[275,509,369],{"class":321},[275,511,512],{"class":317},"name",[275,514,331],{"class":321},[275,516,335],{"class":334},[275,518,251],{"class":338},[275,520,342],{"class":334},[275,522,434],{"class":345},[275,524,417],{"class":317},[275,526,331],{"class":321},[275,528,335],{"class":334},[275,530,531],{"class":338},"rusto-rs",[275,533,342],{"class":334},[275,535,393],{"class":321},[275,537,539],{"class":277,"line":538},18,[275,540,541],{"class":345},"            ]\n",[275,543,545],{"class":277,"line":544},19,[275,546,547],{"class":321},"        )\n",[275,549,551],{"class":277,"line":550},20,[275,552,553],{"class":345},"    ]\n",[275,555,557],{"class":277,"line":556},21,[275,558,393],{"class":321},[179,560,561,562,565,566,256],{},"Paket ini secara otomatis menyediakan modul C FFI level rendah (",[183,563,564],{},"RustOFFI",") dan API Swift level tinggi (",[183,567,251],{},[192,569],{},[211,571,573],{"id":572},"metode-b-cocoapods","Metode B: CocoaPods",[179,575,576,577,580],{},"Pada file ",[183,578,579],{},"Podfile"," proyek Anda:",[237,582,586],{"className":583,"code":584,"language":585,"meta":243,"style":243},"language-ruby shiki shiki-themes material-theme-lighter github-light github-dark monokai","target 'YourApp' do\n  use_frameworks!\n\n  # XCFramework runtime mesin OCR inti\n  pod 'RustO', '~> 0.3.2'\n\n  # Paket bundel model bawaan (~6 MB total)\n  pod 'RustO-Models-PPOCRv6-Tiny', '~> 0.3.2'\n  # Atau varian tingkatan model yang lebih besar:\n  # pod 'RustO-Models-PPOCRv6-Small'\n  # pod 'RustO-Models-PPOCRv5-Mobile'\nend\n","ruby",[183,587,588,604,609,613,618,641,645,650,669,674,679,684],{"__ignoreMap":243},[275,589,590,593,596,599,601],{"class":277,"line":278},[275,591,592],{"class":345},"target ",[275,594,595],{"class":334},"'",[275,597,598],{"class":338},"YourApp",[275,600,595],{"class":334},[275,602,603],{"class":288}," do\n",[275,605,606],{"class":277,"line":285},[275,607,608],{"class":345},"  use_frameworks!\n",[275,610,611],{"class":277,"line":296},[275,612,300],{"emptyLinePlaceholder":299},[275,614,615],{"class":277,"line":303},[275,616,617],{"class":281},"  # XCFramework runtime mesin OCR inti\n",[275,619,620,623,625,627,629,632,635,638],{"class":277,"line":325},[275,621,622],{"class":345},"  pod ",[275,624,595],{"class":334},[275,626,251],{"class":338},[275,628,595],{"class":334},[275,630,631],{"class":321},",",[275,633,634],{"class":334}," '",[275,636,637],{"class":338},"~> 0.3.2",[275,639,640],{"class":334},"'\n",[275,642,643],{"class":277,"line":349},[275,644,300],{"emptyLinePlaceholder":299},[275,646,647],{"class":277,"line":360},[275,648,649],{"class":281},"  # Paket bundel model bawaan (~6 MB total)\n",[275,651,652,654,656,659,661,663,665,667],{"class":277,"line":380},[275,653,622],{"class":345},[275,655,595],{"class":334},[275,657,658],{"class":338},"RustO-Models-PPOCRv6-Tiny",[275,660,595],{"class":334},[275,662,631],{"class":321},[275,664,634],{"class":334},[275,666,637],{"class":338},[275,668,640],{"class":334},[275,670,671],{"class":277,"line":396},[275,672,673],{"class":281},"  # Atau varian tingkatan model yang lebih besar:\n",[275,675,676],{"class":277,"line":402},[275,677,678],{"class":281},"  # pod 'RustO-Models-PPOCRv6-Small'\n",[275,680,681],{"class":277,"line":412},[275,682,683],{"class":281},"  # pod 'RustO-Models-PPOCRv5-Mobile'\n",[275,685,686],{"class":277,"line":450},[275,687,688],{"class":288},"end\n",[179,690,691],{},"Kemudian jalankan:",[237,693,697],{"className":694,"code":695,"language":696,"meta":243,"style":243},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","pod install\n","bash",[183,698,699],{"__ignoreMap":243},[275,700,701,705],{"class":277,"line":278},[275,702,704],{"class":703},"sR7ES","pod",[275,706,707],{"class":338}," install\n",[192,709],{},[195,711,713,714,375],{"id":712},"_1-konfigurasi-izin-infoplist","1. Konfigurasi Izin (",[183,715,716],{},"Info.plist",[179,718,719,720,722],{},"Jika mengambil gambar dari kamera atau galeri foto, tambahkan deklarasi deskripsi izin pada file ",[183,721,716],{}," aplikasi Anda:",[237,724,728],{"className":725,"code":726,"language":727,"meta":243,"style":243},"language-xml shiki shiki-themes material-theme-lighter github-light github-dark monokai","\u003Ckey>NSCameraUsageDescription\u003C\u002Fkey>\n\u003Cstring>Izinkan akses kamera untuk memindai dokumen dan mengekstrak teks.\u003C\u002Fstring>\n\u003Ckey>NSPhotoLibraryUsageDescription\u003C\u002Fkey>\n\u003Cstring>Izinkan akses galeri foto untuk memilih gambar dokumen untuk dipindai.\u003C\u002Fstring>\n","xml",[183,729,730,753,771,788],{"__ignoreMap":243},[275,731,732,735,739,742,745,748,750],{"class":277,"line":278},[275,733,734],{"class":321},"\u003C",[275,736,738],{"class":737},"sHsBP","key",[275,740,741],{"class":321},">",[275,743,744],{"class":345},"NSCameraUsageDescription",[275,746,747],{"class":321},"\u003C\u002F",[275,749,738],{"class":737},[275,751,752],{"class":321},">\n",[275,754,755,757,760,762,765,767,769],{"class":277,"line":285},[275,756,734],{"class":321},[275,758,759],{"class":737},"string",[275,761,741],{"class":321},[275,763,764],{"class":345},"Izinkan akses kamera untuk memindai dokumen dan mengekstrak teks.",[275,766,747],{"class":321},[275,768,759],{"class":737},[275,770,752],{"class":321},[275,772,773,775,777,779,782,784,786],{"class":277,"line":296},[275,774,734],{"class":321},[275,776,738],{"class":737},[275,778,741],{"class":321},[275,780,781],{"class":345},"NSPhotoLibraryUsageDescription",[275,783,747],{"class":321},[275,785,738],{"class":737},[275,787,752],{"class":321},[275,789,790,792,794,796,799,801,803],{"class":277,"line":303},[275,791,734],{"class":321},[275,793,759],{"class":737},[275,795,741],{"class":321},[275,797,798],{"class":345},"Izinkan akses galeri foto untuk memilih gambar dokumen untuk dipindai.",[275,800,747],{"class":321},[275,802,759],{"class":737},[275,804,752],{"class":321},[192,806],{},[195,808,810],{"id":809},"_2-inisialisasi-mesin-resolusi-model","2. Inisialisasi Mesin & Resolusi Model",[211,812,814],{"id":813},"opsi-1-resolusi-model-bundel-otomatis","Opsi 1: Resolusi Model Bundel Otomatis",[179,816,817,818,820],{},"Jika menggunakan pod model resmi (seperti ",[183,819,658],{},"), RustO! secara otomatis menemukan berkas model di dalam bundel framework:",[237,822,824],{"className":269,"code":823,"language":271,"meta":243,"style":243},"import RustO\n\ndo {\n    \u002F\u002F Secara otomatis menemukan berkas det.rten, rec.rten, dan dict.txt bawaan PP-OCRv6\n    let ocr = try RustO.initialize()\n} catch {\n    print(\"Inisialisasi OCR gagal: \\(error)\")\n}\n",[183,825,826,833,837,845,850,873,883,909],{"__ignoreMap":243},[275,827,828,830],{"class":277,"line":278},[275,829,289],{"class":288},[275,831,832],{"class":292}," RustO\n",[275,834,835],{"class":277,"line":285},[275,836,300],{"emptyLinePlaceholder":299},[275,838,839,842],{"class":277,"line":296},[275,840,841],{"class":288},"do",[275,843,844],{"class":321}," {\n",[275,846,847],{"class":277,"line":303},[275,848,849],{"class":281},"    \u002F\u002F Secara otomatis menemukan berkas det.rten, rec.rten, dan dict.txt bawaan PP-OCRv6\n",[275,851,852,855,858,861,864,867,870],{"class":277,"line":325},[275,853,854],{"class":306},"    let",[275,856,857],{"class":345}," ocr ",[275,859,860],{"class":313},"=",[275,862,863],{"class":288}," try",[275,865,866],{"class":345}," RustO.",[275,868,869],{"class":317},"initialize",[275,871,872],{"class":321},"()\n",[275,874,875,878,881],{"class":277,"line":349},[275,876,877],{"class":321},"}",[275,879,880],{"class":288}," catch",[275,882,844],{"class":321},[275,884,885,888,890,892,895,899,903,905,907],{"class":277,"line":360},[275,886,887],{"class":317},"    print",[275,889,369],{"class":321},[275,891,342],{"class":334},[275,893,894],{"class":338},"Inisialisasi OCR gagal: ",[275,896,898],{"class":897},"slF1C","\\(",[275,900,902],{"class":901},"s-euU","error",[275,904,375],{"class":897},[275,906,342],{"class":334},[275,908,393],{"class":321},[275,910,911],{"class":277,"line":380},[275,912,913],{"class":321},"}\n",[211,915,917],{"id":916},"opsi-2-menggunakan-bundel-kustom-atau-jalur-file-sistem","Opsi 2: Menggunakan Bundel Kustom atau Jalur File Sistem",[179,919,920],{},"Jika Anda ingin menyertakan model kustom di dalam bundel utama aplikasi atau mengunduhnya ke folder penyimpanan lokal:",[237,922,924],{"className":269,"code":923,"language":271,"meta":243,"style":243},"import Foundation\nimport RustO\n\nfunc createCustomEngine() throws -> RustO {\n    guard let detPath = Bundle.main.path(forResource: \"custom_det\", ofType: \"rten\"),\n          let recPath = Bundle.main.path(forResource: \"custom_rec\", ofType: \"rten\"),\n          let dictPath = Bundle.main.path(forResource: \"custom_dict\", ofType: \"txt\") else {\n        throw NSError(domain: \"RustO\", code: -1, userInfo: [NSLocalizedDescriptionKey: \"Berkas model tidak ditemukan di bundel\"])\n    }\n\n    let config = InitializeConfig(\n        template: \"ppv6\",\n        detection: DetectionConfig(modelPath: detPath),\n        recognition: RecognitionConfig(\n            modelPath: recPath,\n            dictPath: dictPath\n        )\n    )\n\n    return try RustO.initialize(config: config)\n}\n",[183,925,926,933,939,943,969,1020,1063,1109,1164,1169,1173,1187,1203,1227,1239,1249,1259,1263,1268,1272,1295],{"__ignoreMap":243},[275,927,928,930],{"class":277,"line":278},[275,929,289],{"class":288},[275,931,932],{"class":292}," Foundation\n",[275,934,935,937],{"class":277,"line":285},[275,936,289],{"class":288},[275,938,832],{"class":292},[275,940,941],{"class":277,"line":296},[275,942,300],{"emptyLinePlaceholder":299},[275,944,945,949,953,956,960,963,966],{"class":277,"line":303},[275,946,948],{"class":947},"srJo8","func",[275,950,952],{"class":951},"sD0ED"," createCustomEngine",[275,954,955],{"class":321},"()",[275,957,959],{"class":958},"sTNss"," throws",[275,961,962],{"class":313}," ->",[275,964,965],{"class":345}," RustO ",[275,967,968],{"class":321},"{\n",[275,970,971,974,977,980,982,985,988,990,993,995,997,1000,1002,1004,1007,1009,1011,1014,1016,1018],{"class":277,"line":325},[275,972,973],{"class":288},"    guard",[275,975,976],{"class":306}," let",[275,978,979],{"class":345}," detPath ",[275,981,860],{"class":313},[275,983,984],{"class":345}," Bundle.main.",[275,986,987],{"class":317},"path",[275,989,369],{"class":321},[275,991,992],{"class":317},"forResource",[275,994,331],{"class":321},[275,996,335],{"class":334},[275,998,999],{"class":338},"custom_det",[275,1001,342],{"class":334},[275,1003,434],{"class":345},[275,1005,1006],{"class":317},"ofType",[275,1008,331],{"class":321},[275,1010,335],{"class":334},[275,1012,1013],{"class":338},"rten",[275,1015,342],{"class":334},[275,1017,375],{"class":321},[275,1019,346],{"class":345},[275,1021,1022,1025,1028,1030,1032,1034,1036,1038,1040,1042,1045,1047,1049,1051,1053,1055,1057,1059,1061],{"class":277,"line":349},[275,1023,1024],{"class":306},"          let",[275,1026,1027],{"class":345}," recPath ",[275,1029,860],{"class":313},[275,1031,984],{"class":345},[275,1033,987],{"class":317},[275,1035,369],{"class":321},[275,1037,992],{"class":317},[275,1039,331],{"class":321},[275,1041,335],{"class":334},[275,1043,1044],{"class":338},"custom_rec",[275,1046,342],{"class":334},[275,1048,434],{"class":345},[275,1050,1006],{"class":317},[275,1052,331],{"class":321},[275,1054,335],{"class":334},[275,1056,1013],{"class":338},[275,1058,342],{"class":334},[275,1060,375],{"class":321},[275,1062,346],{"class":345},[275,1064,1065,1067,1070,1072,1074,1076,1078,1080,1082,1084,1087,1089,1091,1093,1095,1097,1100,1102,1104,1107],{"class":277,"line":360},[275,1066,1024],{"class":306},[275,1068,1069],{"class":345}," dictPath ",[275,1071,860],{"class":313},[275,1073,984],{"class":345},[275,1075,987],{"class":317},[275,1077,369],{"class":321},[275,1079,992],{"class":317},[275,1081,331],{"class":321},[275,1083,335],{"class":334},[275,1085,1086],{"class":338},"custom_dict",[275,1088,342],{"class":334},[275,1090,434],{"class":345},[275,1092,1006],{"class":317},[275,1094,331],{"class":321},[275,1096,335],{"class":334},[275,1098,1099],{"class":338},"txt",[275,1101,342],{"class":334},[275,1103,375],{"class":321},[275,1105,1106],{"class":288}," else",[275,1108,844],{"class":321},[275,1110,1111,1114,1117,1119,1122,1124,1126,1128,1130,1132,1134,1136,1140,1142,1145,1147,1150,1152,1154,1157,1159,1162],{"class":277,"line":380},[275,1112,1113],{"class":288},"        throw",[275,1115,1116],{"class":317}," NSError",[275,1118,369],{"class":321},[275,1120,1121],{"class":317},"domain",[275,1123,331],{"class":321},[275,1125,335],{"class":334},[275,1127,251],{"class":338},[275,1129,342],{"class":334},[275,1131,434],{"class":345},[275,1133,183],{"class":317},[275,1135,331],{"class":321},[275,1137,1139],{"class":1138},"sYThS"," -1",[275,1141,434],{"class":345},[275,1143,1144],{"class":317},"userInfo",[275,1146,331],{"class":321},[275,1148,1149],{"class":345}," [NSLocalizedDescriptionKey",[275,1151,331],{"class":313},[275,1153,335],{"class":334},[275,1155,1156],{"class":338},"Berkas model tidak ditemukan di bundel",[275,1158,342],{"class":334},[275,1160,1161],{"class":345},"]",[275,1163,393],{"class":321},[275,1165,1166],{"class":277,"line":396},[275,1167,1168],{"class":321},"    }\n",[275,1170,1171],{"class":277,"line":402},[275,1172,300],{"emptyLinePlaceholder":299},[275,1174,1175,1177,1180,1182,1185],{"class":277,"line":412},[275,1176,854],{"class":306},[275,1178,1179],{"class":345}," config ",[275,1181,860],{"class":313},[275,1183,1184],{"class":317}," InitializeConfig",[275,1186,322],{"class":321},[275,1188,1189,1192,1194,1196,1199,1201],{"class":277,"line":450},[275,1190,1191],{"class":317},"        template",[275,1193,331],{"class":321},[275,1195,335],{"class":334},[275,1197,1198],{"class":338},"ppv6",[275,1200,342],{"class":334},[275,1202,346],{"class":345},[275,1204,1205,1208,1210,1213,1215,1218,1220,1223,1225],{"class":277,"line":455},[275,1206,1207],{"class":317},"        detection",[275,1209,331],{"class":321},[275,1211,1212],{"class":317}," DetectionConfig",[275,1214,369],{"class":321},[275,1216,1217],{"class":317},"modelPath",[275,1219,331],{"class":321},[275,1221,1222],{"class":345}," detPath",[275,1224,375],{"class":321},[275,1226,346],{"class":345},[275,1228,1229,1232,1234,1237],{"class":277,"line":465},[275,1230,1231],{"class":317},"        recognition",[275,1233,331],{"class":321},[275,1235,1236],{"class":317}," RecognitionConfig",[275,1238,322],{"class":321},[275,1240,1241,1244,1246],{"class":277,"line":475},[275,1242,1243],{"class":317},"            modelPath",[275,1245,331],{"class":321},[275,1247,1248],{"class":345}," recPath,\n",[275,1250,1251,1254,1256],{"class":277,"line":491},[275,1252,1253],{"class":317},"            dictPath",[275,1255,331],{"class":321},[275,1257,1258],{"class":345}," dictPath\n",[275,1260,1261],{"class":277,"line":501},[275,1262,547],{"class":321},[275,1264,1265],{"class":277,"line":538},[275,1266,1267],{"class":321},"    )\n",[275,1269,1270],{"class":277,"line":544},[275,1271,300],{"emptyLinePlaceholder":299},[275,1273,1274,1277,1279,1281,1283,1285,1288,1290,1293],{"class":277,"line":550},[275,1275,1276],{"class":288},"    return",[275,1278,863],{"class":288},[275,1280,866],{"class":345},[275,1282,869],{"class":317},[275,1284,369],{"class":321},[275,1286,1287],{"class":317},"config",[275,1289,331],{"class":321},[275,1291,1292],{"class":345}," config",[275,1294,393],{"class":321},[275,1296,1297],{"class":277,"line":556},[275,1298,913],{"class":321},[192,1300],{},[195,1302,1304],{"id":1303},"_3-sumber-masukan-gambar","3. Sumber Masukan Gambar",[179,1306,1307,1310],{},[183,1308,1309],{},"ImageSource"," mendukung jalur file lokal, URL, maupun buffer byte gambar di memori:",[237,1312,1314],{"className":269,"code":1313,"language":271,"meta":243,"style":243},"import UIKit\nimport RustO\n\n\u002F\u002F 1. Jalur berkas lokal atau file URL\nlet fileSource = ImageSource.uri(\"\u002Fpath\u002Fto\u002Finvoice.png\")\n\n\u002F\u002F 2. UIImage dikonversi menjadi data JPEG atau PNG\nguard let image = UIImage(named: \"receipt\"),\n      let imageData = image.jpegData(compressionQuality: 0.95) else { return }\n\nlet memorySource = ImageSource.bytes(imageData)\n",[183,1315,1316,1323,1329,1333,1338,1364,1368,1373,1406,1445,1449],{"__ignoreMap":243},[275,1317,1318,1320],{"class":277,"line":278},[275,1319,289],{"class":288},[275,1321,1322],{"class":292}," UIKit\n",[275,1324,1325,1327],{"class":277,"line":285},[275,1326,289],{"class":288},[275,1328,832],{"class":292},[275,1330,1331],{"class":277,"line":296},[275,1332,300],{"emptyLinePlaceholder":299},[275,1334,1335],{"class":277,"line":303},[275,1336,1337],{"class":281},"\u002F\u002F 1. Jalur berkas lokal atau file URL\n",[275,1339,1340,1342,1345,1347,1350,1353,1355,1357,1360,1362],{"class":277,"line":325},[275,1341,307],{"class":306},[275,1343,1344],{"class":345}," fileSource ",[275,1346,860],{"class":313},[275,1348,1349],{"class":345}," ImageSource.",[275,1351,1352],{"class":317},"uri",[275,1354,369],{"class":321},[275,1356,342],{"class":334},[275,1358,1359],{"class":338},"\u002Fpath\u002Fto\u002Finvoice.png",[275,1361,342],{"class":334},[275,1363,393],{"class":321},[275,1365,1366],{"class":277,"line":349},[275,1367,300],{"emptyLinePlaceholder":299},[275,1369,1370],{"class":277,"line":360},[275,1371,1372],{"class":281},"\u002F\u002F 2. UIImage dikonversi menjadi data JPEG atau PNG\n",[275,1374,1375,1378,1380,1383,1385,1388,1390,1393,1395,1397,1400,1402,1404],{"class":277,"line":380},[275,1376,1377],{"class":288},"guard",[275,1379,976],{"class":306},[275,1381,1382],{"class":345}," image ",[275,1384,860],{"class":313},[275,1386,1387],{"class":317}," UIImage",[275,1389,369],{"class":321},[275,1391,1392],{"class":317},"named",[275,1394,331],{"class":321},[275,1396,335],{"class":334},[275,1398,1399],{"class":338},"receipt",[275,1401,342],{"class":334},[275,1403,375],{"class":321},[275,1405,346],{"class":345},[275,1407,1408,1411,1414,1416,1419,1422,1424,1427,1429,1432,1434,1436,1439,1442],{"class":277,"line":396},[275,1409,1410],{"class":306},"      let",[275,1412,1413],{"class":345}," imageData ",[275,1415,860],{"class":313},[275,1417,1418],{"class":345}," image.",[275,1420,1421],{"class":317},"jpegData",[275,1423,369],{"class":321},[275,1425,1426],{"class":317},"compressionQuality",[275,1428,331],{"class":321},[275,1430,1431],{"class":1138}," 0.95",[275,1433,375],{"class":321},[275,1435,1106],{"class":288},[275,1437,1438],{"class":321}," {",[275,1440,1441],{"class":288}," return",[275,1443,1444],{"class":321}," }\n",[275,1446,1447],{"class":277,"line":402},[275,1448,300],{"emptyLinePlaceholder":299},[275,1450,1451,1453,1456,1458,1460,1463,1465,1468],{"class":277,"line":412},[275,1452,307],{"class":306},[275,1454,1455],{"class":345}," memorySource ",[275,1457,860],{"class":313},[275,1459,1349],{"class":345},[275,1461,1462],{"class":317},"bytes",[275,1464,369],{"class":321},[275,1466,1467],{"class":345},"imageData",[275,1469,393],{"class":321},[192,1471],{},[195,1473,1475,1476,375],{"id":1474},"_4-opsi-eksekusi-ocrrunoptions","4. Opsi Eksekusi (",[183,1477,164],{},[179,1479,1480],{},"Sesuaikan parameter deteksi per permintaan pemindaian:",[237,1482,1484],{"className":269,"code":1483,"language":271,"meta":243,"style":243},"let options = OcrRunOptions(\n    output: .lines,            \u002F\u002F .lines, .words, atau .spatial\n    lineYThreshold: 0.5,       \u002F\u002F Ambang pengelompokan baris (0.0 - 1.0)\n    wordXThreshold: 0.4,       \u002F\u002F Ambang pemisah kolom kata (0.0 - 1.0)\n    textScore: 0.50,           \u002F\u002F Batas minimum skor keyakinan\n    maxSideLen: 1600,          \u002F\u002F Batas resolusi sisi gambar terpanjang\n    detection: DetectionRunOptions(\n        limitSideLen: 960,\n        limitType: \"max\"\n    ),\n    postprocess: PostprocessRunOptions(\n        useDilation: true,     \u002F\u002F Dilasi morfologis untuk struk dengan cetakan tipis\n        unclipRatio: 1.8       \u002F\u002F Rasio ekspansi poligon batas teks\n    )\n)\n",[183,1485,1486,1500,1513,1529,1544,1560,1576,1588,1600,1615,1622,1634,1651,1664,1668],{"__ignoreMap":243},[275,1487,1488,1490,1493,1495,1498],{"class":277,"line":278},[275,1489,307],{"class":306},[275,1491,1492],{"class":345}," options ",[275,1494,860],{"class":313},[275,1496,1497],{"class":317}," OcrRunOptions",[275,1499,322],{"class":321},[275,1501,1502,1505,1507,1510],{"class":277,"line":285},[275,1503,1504],{"class":317},"    output",[275,1506,331],{"class":321},[275,1508,1509],{"class":345}," .lines,            ",[275,1511,1512],{"class":281},"\u002F\u002F .lines, .words, atau .spatial\n",[275,1514,1515,1518,1520,1523,1526],{"class":277,"line":296},[275,1516,1517],{"class":317},"    lineYThreshold",[275,1519,331],{"class":321},[275,1521,1522],{"class":1138}," 0.5",[275,1524,1525],{"class":345},",       ",[275,1527,1528],{"class":281},"\u002F\u002F Ambang pengelompokan baris (0.0 - 1.0)\n",[275,1530,1531,1534,1536,1539,1541],{"class":277,"line":303},[275,1532,1533],{"class":317},"    wordXThreshold",[275,1535,331],{"class":321},[275,1537,1538],{"class":1138}," 0.4",[275,1540,1525],{"class":345},[275,1542,1543],{"class":281},"\u002F\u002F Ambang pemisah kolom kata (0.0 - 1.0)\n",[275,1545,1546,1549,1551,1554,1557],{"class":277,"line":325},[275,1547,1548],{"class":317},"    textScore",[275,1550,331],{"class":321},[275,1552,1553],{"class":1138}," 0.50",[275,1555,1556],{"class":345},",           ",[275,1558,1559],{"class":281},"\u002F\u002F Batas minimum skor keyakinan\n",[275,1561,1562,1565,1567,1570,1573],{"class":277,"line":349},[275,1563,1564],{"class":317},"    maxSideLen",[275,1566,331],{"class":321},[275,1568,1569],{"class":1138}," 1600",[275,1571,1572],{"class":345},",          ",[275,1574,1575],{"class":281},"\u002F\u002F Batas resolusi sisi gambar terpanjang\n",[275,1577,1578,1581,1583,1586],{"class":277,"line":360},[275,1579,1580],{"class":317},"    detection",[275,1582,331],{"class":321},[275,1584,1585],{"class":317}," DetectionRunOptions",[275,1587,322],{"class":321},[275,1589,1590,1593,1595,1598],{"class":277,"line":380},[275,1591,1592],{"class":317},"        limitSideLen",[275,1594,331],{"class":321},[275,1596,1597],{"class":1138}," 960",[275,1599,346],{"class":345},[275,1601,1602,1605,1607,1609,1612],{"class":277,"line":396},[275,1603,1604],{"class":317},"        limitType",[275,1606,331],{"class":321},[275,1608,335],{"class":334},[275,1610,1611],{"class":338},"max",[275,1613,1614],{"class":334},"\"\n",[275,1616,1617,1620],{"class":277,"line":402},[275,1618,1619],{"class":321},"    )",[275,1621,346],{"class":345},[275,1623,1624,1627,1629,1632],{"class":277,"line":412},[275,1625,1626],{"class":317},"    postprocess",[275,1628,331],{"class":321},[275,1630,1631],{"class":317}," PostprocessRunOptions",[275,1633,322],{"class":321},[275,1635,1636,1639,1641,1645,1648],{"class":277,"line":450},[275,1637,1638],{"class":317},"        useDilation",[275,1640,331],{"class":321},[275,1642,1644],{"class":1643},"s8HiA"," true",[275,1646,1647],{"class":345},",     ",[275,1649,1650],{"class":281},"\u002F\u002F Dilasi morfologis untuk struk dengan cetakan tipis\n",[275,1652,1653,1656,1658,1661],{"class":277,"line":455},[275,1654,1655],{"class":317},"        unclipRatio",[275,1657,331],{"class":321},[275,1659,1660],{"class":1138}," 1.8",[275,1662,1663],{"class":281},"       \u002F\u002F Rasio ekspansi poligon batas teks\n",[275,1665,1666],{"class":277,"line":465},[275,1667,1267],{"class":321},[275,1669,1670],{"class":277,"line":475},[275,1671,393],{"class":321},[192,1673],{},[195,1675,1677],{"id":1676},"_5-deteksi-terstruktur-vs-rekonstruksi-spasial","5. Deteksi Terstruktur vs Rekonstruksi Spasial",[211,1679,1681],{"id":1680},"deteksi-baris-terstruktur","Deteksi Baris Terstruktur",[179,1683,1684],{},"Mengembalikan koordinat kotak pembatas, titik poligon, dan skor keyakinan:",[237,1686,1688],{"className":269,"code":1687,"language":271,"meta":243,"style":243},"let result = try ocr.detectText(memorySource, options: OcrRunOptions(output: .lines))\n\nif case .structured(let items) = result {\n    for line in items {\n        print(\"[\\(String(format: \"%.2f\", line.score))] \\(line.text)\")\n        print(\"  Frame: X=\\(line.frame.left), Y=\\(line.frame.top), W=\\(line.frame.width), H=\\(line.frame.height)\")\n        print(\"  Titik Poligon: \\(line.boxPoints)\")\n    }\n}\n",[183,1689,1690,1732,1736,1765,1781,1841,1918,1942,1946],{"__ignoreMap":243},[275,1691,1692,1694,1697,1699,1701,1704,1707,1709,1712,1715,1717,1719,1721,1724,1726,1729],{"class":277,"line":278},[275,1693,307],{"class":306},[275,1695,1696],{"class":345}," result ",[275,1698,860],{"class":313},[275,1700,863],{"class":288},[275,1702,1703],{"class":345}," ocr.",[275,1705,1706],{"class":317},"detectText",[275,1708,369],{"class":321},[275,1710,1711],{"class":345},"memorySource, ",[275,1713,1714],{"class":317},"options",[275,1716,331],{"class":321},[275,1718,1497],{"class":317},[275,1720,369],{"class":321},[275,1722,1723],{"class":317},"output",[275,1725,331],{"class":321},[275,1727,1728],{"class":345}," .lines",[275,1730,1731],{"class":321},"))\n",[275,1733,1734],{"class":277,"line":285},[275,1735,300],{"emptyLinePlaceholder":299},[275,1737,1738,1741,1744,1747,1750,1752,1754,1757,1759,1761,1763],{"class":277,"line":296},[275,1739,1740],{"class":288},"if",[275,1742,1743],{"class":288}," case",[275,1745,1746],{"class":345}," .",[275,1748,1749],{"class":317},"structured",[275,1751,369],{"class":321},[275,1753,307],{"class":306},[275,1755,1756],{"class":345}," items",[275,1758,375],{"class":321},[275,1760,314],{"class":313},[275,1762,1696],{"class":345},[275,1764,968],{"class":321},[275,1766,1767,1770,1773,1776,1779],{"class":277,"line":303},[275,1768,1769],{"class":288},"    for",[275,1771,1772],{"class":345}," line ",[275,1774,1775],{"class":288},"in",[275,1777,1778],{"class":345}," items ",[275,1780,968],{"class":321},[275,1782,1783,1786,1788,1790,1793,1795,1799,1802,1805,1807,1809,1812,1814,1817,1820,1822,1824,1827,1829,1832,1835,1837,1839],{"class":277,"line":325},[275,1784,1785],{"class":317},"        print",[275,1787,369],{"class":321},[275,1789,342],{"class":334},[275,1791,1792],{"class":338},"[",[275,1794,898],{"class":897},[275,1796,1798],{"class":1797},"s_MOj","String",[275,1800,369],{"class":1801},"s00De",[275,1803,1804],{"class":317},"format",[275,1806,331],{"class":1801},[275,1808,335],{"class":334},[275,1810,1811],{"class":338},"%.2f",[275,1813,342],{"class":334},[275,1815,1816],{"class":901},", line.",[275,1818,1819],{"class":345},"score",[275,1821,375],{"class":1801},[275,1823,375],{"class":897},[275,1825,1826],{"class":338},"] ",[275,1828,898],{"class":897},[275,1830,1831],{"class":901},"line.",[275,1833,242],{"class":1834},"s91G_",[275,1836,375],{"class":897},[275,1838,342],{"class":334},[275,1840,393],{"class":321},[275,1842,1843,1845,1847,1849,1852,1854,1856,1859,1861,1864,1866,1869,1871,1873,1875,1877,1880,1882,1885,1887,1889,1891,1893,1896,1898,1901,1903,1905,1907,1909,1912,1914,1916],{"class":277,"line":349},[275,1844,1785],{"class":317},[275,1846,369],{"class":321},[275,1848,342],{"class":334},[275,1850,1851],{"class":338},"  Frame: X=",[275,1853,898],{"class":897},[275,1855,1831],{"class":901},[275,1857,1858],{"class":345},"frame",[275,1860,209],{"class":901},[275,1862,1863],{"class":345},"left",[275,1865,375],{"class":897},[275,1867,1868],{"class":338},", Y=",[275,1870,898],{"class":897},[275,1872,1831],{"class":901},[275,1874,1858],{"class":345},[275,1876,209],{"class":901},[275,1878,1879],{"class":345},"top",[275,1881,375],{"class":897},[275,1883,1884],{"class":338},", W=",[275,1886,898],{"class":897},[275,1888,1831],{"class":901},[275,1890,1858],{"class":345},[275,1892,209],{"class":901},[275,1894,1895],{"class":345},"width",[275,1897,375],{"class":897},[275,1899,1900],{"class":338},", H=",[275,1902,898],{"class":897},[275,1904,1831],{"class":901},[275,1906,1858],{"class":345},[275,1908,209],{"class":901},[275,1910,1911],{"class":345},"height",[275,1913,375],{"class":897},[275,1915,342],{"class":334},[275,1917,393],{"class":321},[275,1919,1920,1922,1924,1926,1929,1931,1933,1936,1938,1940],{"class":277,"line":360},[275,1921,1785],{"class":317},[275,1923,369],{"class":321},[275,1925,342],{"class":334},[275,1927,1928],{"class":338},"  Titik Poligon: ",[275,1930,898],{"class":897},[275,1932,1831],{"class":901},[275,1934,1935],{"class":345},"boxPoints",[275,1937,375],{"class":897},[275,1939,342],{"class":334},[275,1941,393],{"class":321},[275,1943,1944],{"class":277,"line":380},[275,1945,1168],{"class":321},[275,1947,1948],{"class":277,"line":396},[275,1949,913],{"class":321},[211,1951,125],{"id":1952},"rekonstruksi-tata-letak-spasial",[179,1954,1955],{},"Menyusun ulang geometri teks multi-kolom dokumen menjadi teks rapi terformat:",[237,1957,1959],{"className":269,"code":1958,"language":271,"meta":243,"style":243},"let result = try ocr.detectText(memorySource, options: OcrRunOptions(output: .spatial))\n\nif case .spatial(let layoutText) = result {\n    print(\"--- Tata Letak Spasial ---\\n\\(layoutText)\")\n}\n",[183,1960,1961,1996,2000,2026,2052],{"__ignoreMap":243},[275,1962,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1994],{"class":277,"line":278},[275,1964,307],{"class":306},[275,1966,1696],{"class":345},[275,1968,860],{"class":313},[275,1970,863],{"class":288},[275,1972,1703],{"class":345},[275,1974,1706],{"class":317},[275,1976,369],{"class":321},[275,1978,1711],{"class":345},[275,1980,1714],{"class":317},[275,1982,331],{"class":321},[275,1984,1497],{"class":317},[275,1986,369],{"class":321},[275,1988,1723],{"class":317},[275,1990,331],{"class":321},[275,1992,1993],{"class":345}," .spatial",[275,1995,1731],{"class":321},[275,1997,1998],{"class":277,"line":285},[275,1999,300],{"emptyLinePlaceholder":299},[275,2001,2002,2004,2006,2008,2011,2013,2015,2018,2020,2022,2024],{"class":277,"line":296},[275,2003,1740],{"class":288},[275,2005,1743],{"class":288},[275,2007,1746],{"class":345},[275,2009,2010],{"class":317},"spatial",[275,2012,369],{"class":321},[275,2014,307],{"class":306},[275,2016,2017],{"class":345}," layoutText",[275,2019,375],{"class":321},[275,2021,314],{"class":313},[275,2023,1696],{"class":345},[275,2025,968],{"class":321},[275,2027,2028,2030,2032,2034,2037,2041,2043,2046,2048,2050],{"class":277,"line":303},[275,2029,887],{"class":317},[275,2031,369],{"class":321},[275,2033,342],{"class":334},[275,2035,2036],{"class":338},"--- Tata Letak Spasial ---",[275,2038,2040],{"class":2039},"sQeA1","\\n",[275,2042,898],{"class":897},[275,2044,2045],{"class":901},"layoutText",[275,2047,375],{"class":897},[275,2049,342],{"class":334},[275,2051,393],{"class":321},[275,2053,2054],{"class":277,"line":325},[275,2055,913],{"class":321},[192,2057],{},[195,2059,2061],{"id":2060},"_6-contoh-lengkap-pemindai-dokumen-di-swiftui","6. Contoh Lengkap Pemindai Dokumen di SwiftUI",[179,2063,2064,2065,2069,2070,2073],{},"Selalu jalankan inferensi OCR pada antrean latar belakang (",[2066,2067,2068],"em",{},"background thread",") atau Swift Concurrency (",[183,2071,2072],{},"Task.detached",") agar tidak mengunci antarmuka utama pengguna:",[237,2075,2077],{"className":269,"code":2076,"language":271,"meta":243,"style":243},"import SwiftUI\nimport PhotosUI\nimport RustO\n\nstruct DocumentScannerView: View {\n    @State private var selectedItem: PhotosPickerItem?\n    @State private var previewImage: UIImage?\n    @State private var recognizedText: String = \"\"\n    @State private var isProcessing: Bool = false\n    @State private var ocrEngine: RustO?\n\n    var body: some View {\n        NavigationStack {\n            VStack(spacing: 16) {\n                if let previewImage {\n                    Image(uiImage: previewImage)\n                        .resizable()\n                        .scaledToFit()\n                        .frame(maxHeight: 240)\n                        .cornerRadius(12)\n                }\n\n                PhotosPicker(selection: $selectedItem, matching: .images) {\n                    Label(\"Pilih Dokumen\", systemImage: \"doc.text.viewfinder\")\n                        .font(.headline)\n                        .frame(maxWidth: .infinity)\n                        .padding()\n                        .background(Color.orange)\n                        .foregroundColor(.white)\n                        .cornerRadius(10)\n                }\n                .onChange(of: selectedItem) { _, newItem in\n                    Task {\n                        guard let data = try? await newItem?.loadTransferable(type: Data.self),\n                              let uiImage = UIImage(data: data) else { return }\n                        previewImage = uiImage\n                        await runOcr(data: data)\n                    }\n                }\n\n                if isProcessing {\n                    ProgressView(\"Mengekstrak teks dengan RustO!...\")\n                        .padding()\n                }\n\n                ScrollView {\n                    Text(recognizedText.isEmpty ? \"Belum ada teks yang dipindai.\" : recognizedText)\n                        .font(.system(.body, design: .monospaced))\n                        .frame(maxWidth: .infinity, alignment: .leading)\n                        .padding()\n                        .background(Color(UIColor.secondarySystemBackground))\n                        .cornerRadius(8)\n                }\n            }\n            .padding()\n            .navigationTitle(\"Pemindai Dokumen RustO!\")\n            .task {\n                ocrEngine = try? RustO.initialize()\n            }\n        }\n    }\n\n    private func runOcr(data: Data) async {\n        guard let engine = ocrEngine else { return }\n        isProcessing = true\n        recognizedText = \"\"\n\n        let resultText: String = await Task.detached(priority: .userInitiated) {\n            do {\n                let options = OcrRunOptions(output: .spatial, lineYThreshold: 0.5, wordXThreshold: 0.4)\n                let result = try engine.detectText(.bytes(data), options: options)\n                if case .spatial(let text) = result {\n                    return text\n                }\n                return \"Tidak ada teks yang terdeteksi.\"\n            } catch {\n                return \"Kesalahan OCR: \\(error.localizedDescription)\"\n            }\n        }.value\n\n        recognizedText = resultText\n        isProcessing = false\n    }\n}\n",[183,2078,2079,2086,2093,2099,2103,2119,2139,2154,2174,2195,2210,2214,2229,2236,2255,2267,2284,2294,2303,2321,2335,2340,2345,2373,2404,2419,2440,2450,2465,2480,2494,2499,2530,2538,2586,2619,2630,2649,2655,2660,2665,2675,2692,2701,2706,2711,2719,2751,2780,2809,2818,2837,2851,2856,2862,2872,2891,2901,2919,2924,2930,2935,2940,2966,2991,3002,3012,3017,3052,3060,3099,3138,3164,3173,3178,3191,3201,3223,3228,3239,3244,3254,3263,3268],{"__ignoreMap":243},[275,2080,2081,2083],{"class":277,"line":278},[275,2082,289],{"class":288},[275,2084,2085],{"class":292}," SwiftUI\n",[275,2087,2088,2090],{"class":277,"line":285},[275,2089,289],{"class":288},[275,2091,2092],{"class":292}," PhotosUI\n",[275,2094,2095,2097],{"class":277,"line":296},[275,2096,289],{"class":288},[275,2098,832],{"class":292},[275,2100,2101],{"class":277,"line":303},[275,2102,300],{"emptyLinePlaceholder":299},[275,2104,2105,2108,2111,2113,2117],{"class":277,"line":325},[275,2106,2107],{"class":947},"struct",[275,2109,2110],{"class":292}," DocumentScannerView",[275,2112,331],{"class":321},[275,2114,2116],{"class":2115},"sW3Pz"," View ",[275,2118,968],{"class":321},[275,2120,2121,2124,2127,2130,2133,2136],{"class":277,"line":349},[275,2122,2123],{"class":313},"    @",[275,2125,2126],{"class":958},"State",[275,2128,2129],{"class":306}," private",[275,2131,2132],{"class":306}," var",[275,2134,2135],{"class":345}," selectedItem: PhotosPickerItem",[275,2137,2138],{"class":313},"?\n",[275,2140,2141,2143,2145,2147,2149,2152],{"class":277,"line":360},[275,2142,2123],{"class":313},[275,2144,2126],{"class":958},[275,2146,2129],{"class":306},[275,2148,2132],{"class":306},[275,2150,2151],{"class":345}," previewImage: UIImage",[275,2153,2138],{"class":313},[275,2155,2156,2158,2160,2162,2164,2167,2169,2171],{"class":277,"line":380},[275,2157,2123],{"class":313},[275,2159,2126],{"class":958},[275,2161,2129],{"class":306},[275,2163,2132],{"class":306},[275,2165,2166],{"class":345}," recognizedText: ",[275,2168,1798],{"class":1797},[275,2170,314],{"class":313},[275,2172,2173],{"class":334}," \"\"\n",[275,2175,2176,2178,2180,2182,2184,2187,2190,2192],{"class":277,"line":396},[275,2177,2123],{"class":313},[275,2179,2126],{"class":958},[275,2181,2129],{"class":306},[275,2183,2132],{"class":306},[275,2185,2186],{"class":345}," isProcessing: ",[275,2188,2189],{"class":1797},"Bool",[275,2191,314],{"class":313},[275,2193,2194],{"class":1643}," false\n",[275,2196,2197,2199,2201,2203,2205,2208],{"class":277,"line":402},[275,2198,2123],{"class":313},[275,2200,2126],{"class":958},[275,2202,2129],{"class":306},[275,2204,2132],{"class":306},[275,2206,2207],{"class":345}," ocrEngine: RustO",[275,2209,2138],{"class":313},[275,2211,2212],{"class":277,"line":412},[275,2213,300],{"emptyLinePlaceholder":299},[275,2215,2216,2219,2222,2225,2227],{"class":277,"line":450},[275,2217,2218],{"class":306},"    var",[275,2220,2221],{"class":345}," body: ",[275,2223,2224],{"class":306},"some",[275,2226,2116],{"class":345},[275,2228,968],{"class":321},[275,2230,2231,2234],{"class":277,"line":455},[275,2232,2233],{"class":317},"        NavigationStack",[275,2235,844],{"class":321},[275,2237,2238,2241,2243,2246,2248,2251,2253],{"class":277,"line":465},[275,2239,2240],{"class":317},"            VStack",[275,2242,369],{"class":321},[275,2244,2245],{"class":317},"spacing",[275,2247,331],{"class":321},[275,2249,2250],{"class":1138}," 16",[275,2252,375],{"class":321},[275,2254,844],{"class":321},[275,2256,2257,2260,2262,2265],{"class":277,"line":475},[275,2258,2259],{"class":288},"                if",[275,2261,976],{"class":306},[275,2263,2264],{"class":345}," previewImage ",[275,2266,968],{"class":321},[275,2268,2269,2272,2274,2277,2279,2282],{"class":277,"line":491},[275,2270,2271],{"class":317},"                    Image",[275,2273,369],{"class":321},[275,2275,2276],{"class":317},"uiImage",[275,2278,331],{"class":321},[275,2280,2281],{"class":345}," previewImage",[275,2283,393],{"class":321},[275,2285,2286,2289,2292],{"class":277,"line":501},[275,2287,2288],{"class":345},"                        .",[275,2290,2291],{"class":317},"resizable",[275,2293,872],{"class":321},[275,2295,2296,2298,2301],{"class":277,"line":538},[275,2297,2288],{"class":345},[275,2299,2300],{"class":317},"scaledToFit",[275,2302,872],{"class":321},[275,2304,2305,2307,2309,2311,2314,2316,2319],{"class":277,"line":544},[275,2306,2288],{"class":345},[275,2308,1858],{"class":317},[275,2310,369],{"class":321},[275,2312,2313],{"class":317},"maxHeight",[275,2315,331],{"class":321},[275,2317,2318],{"class":1138}," 240",[275,2320,393],{"class":321},[275,2322,2323,2325,2328,2330,2333],{"class":277,"line":550},[275,2324,2288],{"class":345},[275,2326,2327],{"class":317},"cornerRadius",[275,2329,369],{"class":321},[275,2331,2332],{"class":1138},"12",[275,2334,393],{"class":321},[275,2336,2337],{"class":277,"line":556},[275,2338,2339],{"class":321},"                }\n",[275,2341,2343],{"class":277,"line":2342},22,[275,2344,300],{"emptyLinePlaceholder":299},[275,2346,2348,2351,2353,2356,2358,2361,2364,2366,2369,2371],{"class":277,"line":2347},23,[275,2349,2350],{"class":317},"                PhotosPicker",[275,2352,369],{"class":321},[275,2354,2355],{"class":317},"selection",[275,2357,331],{"class":321},[275,2359,2360],{"class":345}," $selectedItem, ",[275,2362,2363],{"class":317},"matching",[275,2365,331],{"class":321},[275,2367,2368],{"class":345}," .images",[275,2370,375],{"class":321},[275,2372,844],{"class":321},[275,2374,2376,2379,2381,2383,2386,2388,2390,2393,2395,2397,2400,2402],{"class":277,"line":2375},24,[275,2377,2378],{"class":317},"                    Label",[275,2380,369],{"class":321},[275,2382,342],{"class":334},[275,2384,2385],{"class":338},"Pilih Dokumen",[275,2387,342],{"class":334},[275,2389,434],{"class":345},[275,2391,2392],{"class":317},"systemImage",[275,2394,331],{"class":321},[275,2396,335],{"class":334},[275,2398,2399],{"class":338},"doc.text.viewfinder",[275,2401,342],{"class":334},[275,2403,393],{"class":321},[275,2405,2407,2409,2412,2414,2417],{"class":277,"line":2406},25,[275,2408,2288],{"class":345},[275,2410,2411],{"class":317},"font",[275,2413,369],{"class":321},[275,2415,2416],{"class":345},".headline",[275,2418,393],{"class":321},[275,2420,2422,2424,2426,2428,2431,2433,2435,2438],{"class":277,"line":2421},26,[275,2423,2288],{"class":345},[275,2425,1858],{"class":317},[275,2427,369],{"class":321},[275,2429,2430],{"class":317},"maxWidth",[275,2432,331],{"class":321},[275,2434,1746],{"class":345},[275,2436,2437],{"class":1834},"infinity",[275,2439,393],{"class":321},[275,2441,2443,2445,2448],{"class":277,"line":2442},27,[275,2444,2288],{"class":345},[275,2446,2447],{"class":317},"padding",[275,2449,872],{"class":321},[275,2451,2453,2455,2458,2460,2463],{"class":277,"line":2452},28,[275,2454,2288],{"class":345},[275,2456,2457],{"class":317},"background",[275,2459,369],{"class":321},[275,2461,2462],{"class":345},"Color.orange",[275,2464,393],{"class":321},[275,2466,2468,2470,2473,2475,2478],{"class":277,"line":2467},29,[275,2469,2288],{"class":345},[275,2471,2472],{"class":317},"foregroundColor",[275,2474,369],{"class":321},[275,2476,2477],{"class":345},".white",[275,2479,393],{"class":321},[275,2481,2483,2485,2487,2489,2492],{"class":277,"line":2482},30,[275,2484,2288],{"class":345},[275,2486,2327],{"class":317},[275,2488,369],{"class":321},[275,2490,2491],{"class":1138},"10",[275,2493,393],{"class":321},[275,2495,2497],{"class":277,"line":2496},31,[275,2498,2339],{"class":321},[275,2500,2502,2504,2507,2509,2512,2514,2517,2519,2521,2524,2527],{"class":277,"line":2501},32,[275,2503,504],{"class":345},[275,2505,2506],{"class":317},"onChange",[275,2508,369],{"class":321},[275,2510,2511],{"class":317},"of",[275,2513,331],{"class":321},[275,2515,2516],{"class":345}," selectedItem",[275,2518,375],{"class":321},[275,2520,1438],{"class":321},[275,2522,2523],{"class":1834}," _",[275,2525,2526],{"class":345},", newItem ",[275,2528,2529],{"class":288},"in\n",[275,2531,2533,2536],{"class":277,"line":2532},33,[275,2534,2535],{"class":317},"                    Task",[275,2537,844],{"class":321},[275,2539,2541,2544,2546,2549,2551,2553,2556,2559,2562,2564,2566,2569,2571,2574,2576,2579,2582,2584],{"class":277,"line":2540},34,[275,2542,2543],{"class":288},"                        guard",[275,2545,976],{"class":306},[275,2547,2548],{"class":345}," data ",[275,2550,860],{"class":313},[275,2552,863],{"class":288},[275,2554,2555],{"class":313},"?",[275,2557,2558],{"class":288}," await",[275,2560,2561],{"class":345}," newItem",[275,2563,2555],{"class":313},[275,2565,209],{"class":345},[275,2567,2568],{"class":317},"loadTransferable",[275,2570,369],{"class":321},[275,2572,2573],{"class":317},"type",[275,2575,331],{"class":321},[275,2577,2578],{"class":345}," Data.",[275,2580,2581],{"class":306},"self",[275,2583,375],{"class":321},[275,2585,346],{"class":345},[275,2587,2589,2592,2595,2597,2599,2601,2604,2606,2609,2611,2613,2615,2617],{"class":277,"line":2588},35,[275,2590,2591],{"class":306},"                              let",[275,2593,2594],{"class":345}," uiImage ",[275,2596,860],{"class":313},[275,2598,1387],{"class":317},[275,2600,369],{"class":321},[275,2602,2603],{"class":317},"data",[275,2605,331],{"class":321},[275,2607,2608],{"class":345}," data",[275,2610,375],{"class":321},[275,2612,1106],{"class":288},[275,2614,1438],{"class":321},[275,2616,1441],{"class":288},[275,2618,1444],{"class":321},[275,2620,2622,2625,2627],{"class":277,"line":2621},36,[275,2623,2624],{"class":345},"                        previewImage ",[275,2626,860],{"class":313},[275,2628,2629],{"class":345}," uiImage\n",[275,2631,2633,2636,2639,2641,2643,2645,2647],{"class":277,"line":2632},37,[275,2634,2635],{"class":288},"                        await",[275,2637,2638],{"class":317}," runOcr",[275,2640,369],{"class":321},[275,2642,2603],{"class":317},[275,2644,331],{"class":321},[275,2646,2608],{"class":345},[275,2648,393],{"class":321},[275,2650,2652],{"class":277,"line":2651},38,[275,2653,2654],{"class":321},"                    }\n",[275,2656,2658],{"class":277,"line":2657},39,[275,2659,2339],{"class":321},[275,2661,2663],{"class":277,"line":2662},40,[275,2664,300],{"emptyLinePlaceholder":299},[275,2666,2668,2670,2673],{"class":277,"line":2667},41,[275,2669,2259],{"class":288},[275,2671,2672],{"class":345}," isProcessing ",[275,2674,968],{"class":321},[275,2676,2678,2681,2683,2685,2688,2690],{"class":277,"line":2677},42,[275,2679,2680],{"class":317},"                    ProgressView",[275,2682,369],{"class":321},[275,2684,342],{"class":334},[275,2686,2687],{"class":338},"Mengekstrak teks dengan RustO!...",[275,2689,342],{"class":334},[275,2691,393],{"class":321},[275,2693,2695,2697,2699],{"class":277,"line":2694},43,[275,2696,2288],{"class":345},[275,2698,2447],{"class":317},[275,2700,872],{"class":321},[275,2702,2704],{"class":277,"line":2703},44,[275,2705,2339],{"class":321},[275,2707,2709],{"class":277,"line":2708},45,[275,2710,300],{"emptyLinePlaceholder":299},[275,2712,2714,2717],{"class":277,"line":2713},46,[275,2715,2716],{"class":317},"                ScrollView",[275,2718,844],{"class":321},[275,2720,2722,2725,2727,2730,2733,2736,2738,2741,2743,2746,2749],{"class":277,"line":2721},47,[275,2723,2724],{"class":317},"                    Text",[275,2726,369],{"class":321},[275,2728,2729],{"class":345},"recognizedText.",[275,2731,2732],{"class":1834},"isEmpty",[275,2734,2735],{"class":313}," ?",[275,2737,335],{"class":334},[275,2739,2740],{"class":338},"Belum ada teks yang dipindai.",[275,2742,342],{"class":334},[275,2744,2745],{"class":313}," :",[275,2747,2748],{"class":345}," recognizedText",[275,2750,393],{"class":321},[275,2752,2754,2756,2758,2760,2762,2765,2767,2770,2773,2775,2778],{"class":277,"line":2753},48,[275,2755,2288],{"class":345},[275,2757,2411],{"class":317},[275,2759,369],{"class":321},[275,2761,209],{"class":345},[275,2763,2764],{"class":317},"system",[275,2766,369],{"class":321},[275,2768,2769],{"class":345},".body, ",[275,2771,2772],{"class":317},"design",[275,2774,331],{"class":321},[275,2776,2777],{"class":345}," .monospaced",[275,2779,1731],{"class":321},[275,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2802,2804,2807],{"class":277,"line":2782},49,[275,2784,2288],{"class":345},[275,2786,1858],{"class":317},[275,2788,369],{"class":321},[275,2790,2430],{"class":317},[275,2792,331],{"class":321},[275,2794,1746],{"class":345},[275,2796,2437],{"class":1834},[275,2798,434],{"class":345},[275,2800,2801],{"class":317},"alignment",[275,2803,331],{"class":321},[275,2805,2806],{"class":345}," .leading",[275,2808,393],{"class":321},[275,2810,2812,2814,2816],{"class":277,"line":2811},50,[275,2813,2288],{"class":345},[275,2815,2447],{"class":317},[275,2817,872],{"class":321},[275,2819,2821,2823,2825,2827,2830,2832,2835],{"class":277,"line":2820},51,[275,2822,2288],{"class":345},[275,2824,2457],{"class":317},[275,2826,369],{"class":321},[275,2828,2829],{"class":317},"Color",[275,2831,369],{"class":321},[275,2833,2834],{"class":345},"UIColor.secondarySystemBackground",[275,2836,1731],{"class":321},[275,2838,2840,2842,2844,2846,2849],{"class":277,"line":2839},52,[275,2841,2288],{"class":345},[275,2843,2327],{"class":317},[275,2845,369],{"class":321},[275,2847,2848],{"class":1138},"8",[275,2850,393],{"class":321},[275,2852,2854],{"class":277,"line":2853},53,[275,2855,2339],{"class":321},[275,2857,2859],{"class":277,"line":2858},54,[275,2860,2861],{"class":321},"            }\n",[275,2863,2865,2868,2870],{"class":277,"line":2864},55,[275,2866,2867],{"class":345},"            .",[275,2869,2447],{"class":317},[275,2871,872],{"class":321},[275,2873,2875,2877,2880,2882,2884,2887,2889],{"class":277,"line":2874},56,[275,2876,2867],{"class":345},[275,2878,2879],{"class":317},"navigationTitle",[275,2881,369],{"class":321},[275,2883,342],{"class":334},[275,2885,2886],{"class":338},"Pemindai Dokumen RustO!",[275,2888,342],{"class":334},[275,2890,393],{"class":321},[275,2892,2894,2896,2899],{"class":277,"line":2893},57,[275,2895,2867],{"class":345},[275,2897,2898],{"class":317},"task",[275,2900,844],{"class":321},[275,2902,2904,2907,2909,2911,2913,2915,2917],{"class":277,"line":2903},58,[275,2905,2906],{"class":345},"                ocrEngine ",[275,2908,860],{"class":313},[275,2910,863],{"class":288},[275,2912,2555],{"class":313},[275,2914,866],{"class":345},[275,2916,869],{"class":317},[275,2918,872],{"class":321},[275,2920,2922],{"class":277,"line":2921},59,[275,2923,2861],{"class":321},[275,2925,2927],{"class":277,"line":2926},60,[275,2928,2929],{"class":321},"        }\n",[275,2931,2933],{"class":277,"line":2932},61,[275,2934,1168],{"class":321},[275,2936,2938],{"class":277,"line":2937},62,[275,2939,300],{"emptyLinePlaceholder":299},[275,2941,2943,2946,2949,2951,2953,2956,2959,2961,2964],{"class":277,"line":2942},63,[275,2944,2945],{"class":306},"    private",[275,2947,2948],{"class":947}," func",[275,2950,2638],{"class":951},[275,2952,369],{"class":321},[275,2954,2603],{"class":2955},"srB0j",[275,2957,2958],{"class":345},": Data",[275,2960,375],{"class":321},[275,2962,2963],{"class":958}," async",[275,2965,844],{"class":321},[275,2967,2969,2972,2974,2977,2979,2982,2985,2987,2989],{"class":277,"line":2968},64,[275,2970,2971],{"class":288},"        guard",[275,2973,976],{"class":306},[275,2975,2976],{"class":345}," engine ",[275,2978,860],{"class":313},[275,2980,2981],{"class":345}," ocrEngine ",[275,2983,2984],{"class":288},"else",[275,2986,1438],{"class":321},[275,2988,1441],{"class":288},[275,2990,1444],{"class":321},[275,2992,2994,2997,2999],{"class":277,"line":2993},65,[275,2995,2996],{"class":345},"        isProcessing ",[275,2998,860],{"class":313},[275,3000,3001],{"class":1643}," true\n",[275,3003,3005,3008,3010],{"class":277,"line":3004},66,[275,3006,3007],{"class":345},"        recognizedText ",[275,3009,860],{"class":313},[275,3011,2173],{"class":334},[275,3013,3015],{"class":277,"line":3014},67,[275,3016,300],{"emptyLinePlaceholder":299},[275,3018,3020,3023,3026,3028,3030,3032,3035,3038,3040,3043,3045,3048,3050],{"class":277,"line":3019},68,[275,3021,3022],{"class":306},"        let",[275,3024,3025],{"class":345}," resultText: ",[275,3027,1798],{"class":1797},[275,3029,314],{"class":313},[275,3031,2558],{"class":288},[275,3033,3034],{"class":345}," Task.",[275,3036,3037],{"class":317},"detached",[275,3039,369],{"class":321},[275,3041,3042],{"class":317},"priority",[275,3044,331],{"class":321},[275,3046,3047],{"class":345}," .userInitiated",[275,3049,375],{"class":321},[275,3051,844],{"class":321},[275,3053,3055,3058],{"class":277,"line":3054},69,[275,3056,3057],{"class":288},"            do",[275,3059,844],{"class":321},[275,3061,3063,3066,3068,3070,3072,3074,3076,3078,3081,3084,3086,3088,3090,3093,3095,3097],{"class":277,"line":3062},70,[275,3064,3065],{"class":306},"                let",[275,3067,1492],{"class":345},[275,3069,860],{"class":313},[275,3071,1497],{"class":317},[275,3073,369],{"class":321},[275,3075,1723],{"class":317},[275,3077,331],{"class":321},[275,3079,3080],{"class":345}," .spatial, ",[275,3082,3083],{"class":317},"lineYThreshold",[275,3085,331],{"class":321},[275,3087,1522],{"class":1138},[275,3089,434],{"class":345},[275,3091,3092],{"class":317},"wordXThreshold",[275,3094,331],{"class":321},[275,3096,1538],{"class":1138},[275,3098,393],{"class":321},[275,3100,3102,3104,3106,3108,3110,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133,3136],{"class":277,"line":3101},71,[275,3103,3065],{"class":306},[275,3105,1696],{"class":345},[275,3107,860],{"class":313},[275,3109,863],{"class":288},[275,3111,3112],{"class":345}," engine.",[275,3114,1706],{"class":317},[275,3116,369],{"class":321},[275,3118,209],{"class":345},[275,3120,1462],{"class":317},[275,3122,369],{"class":321},[275,3124,2603],{"class":345},[275,3126,375],{"class":321},[275,3128,434],{"class":345},[275,3130,1714],{"class":317},[275,3132,331],{"class":321},[275,3134,3135],{"class":345}," options",[275,3137,393],{"class":321},[275,3139,3141,3143,3145,3147,3149,3151,3153,3156,3158,3160,3162],{"class":277,"line":3140},72,[275,3142,2259],{"class":288},[275,3144,1743],{"class":288},[275,3146,1746],{"class":345},[275,3148,2010],{"class":317},[275,3150,369],{"class":321},[275,3152,307],{"class":306},[275,3154,3155],{"class":345}," text",[275,3157,375],{"class":321},[275,3159,314],{"class":313},[275,3161,1696],{"class":345},[275,3163,968],{"class":321},[275,3165,3167,3170],{"class":277,"line":3166},73,[275,3168,3169],{"class":288},"                    return",[275,3171,3172],{"class":345}," text\n",[275,3174,3176],{"class":277,"line":3175},74,[275,3177,2339],{"class":321},[275,3179,3181,3184,3186,3189],{"class":277,"line":3180},75,[275,3182,3183],{"class":288},"                return",[275,3185,335],{"class":334},[275,3187,3188],{"class":338},"Tidak ada teks yang terdeteksi.",[275,3190,1614],{"class":334},[275,3192,3194,3197,3199],{"class":277,"line":3193},76,[275,3195,3196],{"class":321},"            }",[275,3198,880],{"class":288},[275,3200,844],{"class":321},[275,3202,3204,3206,3208,3211,3213,3216,3219,3221],{"class":277,"line":3203},77,[275,3205,3183],{"class":288},[275,3207,335],{"class":334},[275,3209,3210],{"class":338},"Kesalahan OCR: ",[275,3212,898],{"class":897},[275,3214,3215],{"class":901},"error.",[275,3217,3218],{"class":345},"localizedDescription",[275,3220,375],{"class":897},[275,3222,1614],{"class":334},[275,3224,3226],{"class":277,"line":3225},78,[275,3227,2861],{"class":321},[275,3229,3231,3234,3236],{"class":277,"line":3230},79,[275,3232,3233],{"class":321},"        }",[275,3235,209],{"class":345},[275,3237,3238],{"class":1834},"value\n",[275,3240,3242],{"class":277,"line":3241},80,[275,3243,300],{"emptyLinePlaceholder":299},[275,3245,3247,3249,3251],{"class":277,"line":3246},81,[275,3248,3007],{"class":345},[275,3250,860],{"class":313},[275,3252,3253],{"class":345}," resultText\n",[275,3255,3257,3259,3261],{"class":277,"line":3256},82,[275,3258,2996],{"class":345},[275,3260,860],{"class":313},[275,3262,2194],{"class":1643},[275,3264,3266],{"class":277,"line":3265},83,[275,3267,1168],{"class":321},[275,3269,3271],{"class":277,"line":3270},84,[275,3272,913],{"class":321},[3274,3275,3276],"style",{},"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 .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 .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 .shWJe, html code.shiki .shWJe{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}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 .sMLJd, html code.shiki .sMLJd{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}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 pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}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 .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sHsBP, html code.shiki .sHsBP{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D;--shiki-sepia:#F92672}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}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 .sD0ED, html code.shiki .sD0ED{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}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 .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 .s_MOj, html code.shiki .s_MOj{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .s00De, html code.shiki .s00De{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#F8F8F2}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 .sQeA1, html code.shiki .sQeA1{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sW3Pz, html code.shiki .sW3Pz{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-light-text-decoration:inherit;--shiki-default:#6F42C1;--shiki-default-font-style:inherit;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-font-style:italic;--shiki-sepia-text-decoration:underline}html pre.shiki code .srB0j, html code.shiki .srB0j{--shiki-light:#6182B8;--shiki-light-font-style:italic;--shiki-default:#6F42C1;--shiki-default-font-style:inherit;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-font-style:inherit}",{"title":243,"searchDepth":285,"depth":285,"links":3278},[3279,3283,3285,3289,3290,3292,3296],{"id":197,"depth":285,"text":15,"children":3280},[3281,3282],{"id":213,"depth":296,"text":214},{"id":572,"depth":296,"text":573},{"id":712,"depth":285,"text":3284},"1. Konfigurasi Izin (Info.plist)",{"id":809,"depth":285,"text":810,"children":3286},[3287,3288],{"id":813,"depth":296,"text":814},{"id":916,"depth":296,"text":917},{"id":1303,"depth":285,"text":1304},{"id":1474,"depth":285,"text":3291},"4. Opsi Eksekusi (OcrRunOptions)",{"id":1676,"depth":285,"text":1677,"children":3293},[3294,3295],{"id":1680,"depth":296,"text":1681},{"id":1952,"depth":296,"text":125},{"id":2060,"depth":285,"text":2061},"Integrasi RustO! pada aplikasi iOS Swift dan SwiftUI via Swift Package Manager (SPM) atau CocoaPods.","md",null,{},{"icon":54},{"title":3303,"description":3297},"Menggunakan iOS (Swift) - RustO!","q8bkSYd3FSt8pOqOlyqNV7bOjxTZZk6ylQ3x6YOMi_M",[3306,3308],{"title":46,"path":47,"stem":48,"description":3307,"icon":49,"children":-1},"Integrasi @rustors\u002Freact-native pada aplikasi React Native untuk iOS dan Android, mencakup New Architecture (TurboModules), CocoaPods, dan Expo.",{"title":56,"path":57,"stem":58,"description":3309,"icon":59,"children":-1},"Penggunaan RustO! pada aplikasi Android Kotlin dan Jetpack Compose via JitPack.",1792905890462]