[{"data":1,"prerenderedAt":495},["ShallowReactive",2],{"navigation_docs_id":3,"-id-how-to-use-flutter":173,"-id-how-to-use-flutter-surround":490},[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":100,"body":175,"description":482,"extension":483,"links":484,"meta":485,"navigation":486,"path":101,"seo":487,"stem":102,"__hash__":489},"docs_id\u002Fid\u002F02.how-to\u002F13.use-flutter.md",{"type":176,"value":177,"toc":469},"minimark",[178,191,195,200,228,232,249,252,256,259,324,326,330,334,386,390,414,416,420,440,442,446,465],[179,180,181,182,186,187,190],"p",{},"RustO! menyediakan binding FFI untuk Dart murni (",[183,184,185],"code",{},"rusto",") serta plugin Flutter (",[183,188,189],{},"rusto_flutter",") dengan integrasi platform bawaan untuk Android dan iOS.",[192,193,15],"h2",{"id":194},"instalasi",[196,197,199],"h3",{"id":198},"untuk-proyek-flutter","Untuk Proyek Flutter",[201,202,207],"pre",{"className":203,"code":204,"language":205,"meta":206,"style":206},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","flutter pub add rusto_flutter\n","bash","",[183,208,209],{"__ignoreMap":206},[210,211,214,218,222,225],"span",{"class":212,"line":213},"line",1,[210,215,217],{"class":216},"sR7ES","flutter",[210,219,221],{"class":220},"sLACW"," pub",[210,223,224],{"class":220}," add",[210,226,227],{"class":220}," rusto_flutter\n",[196,229,231],{"id":230},"untuk-proyek-dart-murni-server","Untuk Proyek Dart Murni \u002F Server",[201,233,235],{"className":203,"code":234,"language":205,"meta":206,"style":206},"dart pub add rusto\n",[183,236,237],{"__ignoreMap":206},[210,238,239,242,244,246],{"class":212,"line":213},[210,240,241],{"class":216},"dart",[210,243,221],{"class":220},[210,245,224],{"class":220},[210,247,248],{"class":220}," rusto\n",[250,251],"hr",{},[192,253,255],{"id":254},"_1-inisialisasi-engine","1. Inisialisasi Engine",[179,257,258],{},"Inisialisasi engine dengan memberikan konfigurasi jalur model dan kamus:",[201,260,263],{"className":261,"code":262,"language":241,"meta":206,"style":206},"language-dart shiki shiki-themes material-theme-lighter github-light github-dark monokai","import 'package:rusto\u002Frusto.dart';\n\nfinal config = '''\n{\n  \"detection\": { \"model_path\": \"assets\u002Fmodels\u002FPPOCR_v6\u002Fdet.rten\" },\n  \"recognition\": { \"model_path\": \"assets\u002Fmodels\u002FPPOCR_v6\u002Frec.rten\", \"dict_path\": \"assets\u002Fmodels\u002FPPOCR_v6\u002Fdict.txt\" }\n}\n''';\n\nfinal engine = RustO.initialize(config);\n",[183,264,265,270,277,283,289,295,301,307,313,318],{"__ignoreMap":206},[210,266,267],{"class":212,"line":213},[210,268,269],{},"import 'package:rusto\u002Frusto.dart';\n",[210,271,273],{"class":212,"line":272},2,[210,274,276],{"emptyLinePlaceholder":275},true,"\n",[210,278,280],{"class":212,"line":279},3,[210,281,282],{},"final config = '''\n",[210,284,286],{"class":212,"line":285},4,[210,287,288],{},"{\n",[210,290,292],{"class":212,"line":291},5,[210,293,294],{},"  \"detection\": { \"model_path\": \"assets\u002Fmodels\u002FPPOCR_v6\u002Fdet.rten\" },\n",[210,296,298],{"class":212,"line":297},6,[210,299,300],{},"  \"recognition\": { \"model_path\": \"assets\u002Fmodels\u002FPPOCR_v6\u002Frec.rten\", \"dict_path\": \"assets\u002Fmodels\u002FPPOCR_v6\u002Fdict.txt\" }\n",[210,302,304],{"class":212,"line":303},7,[210,305,306],{},"}\n",[210,308,310],{"class":212,"line":309},8,[210,311,312],{},"''';\n",[210,314,316],{"class":212,"line":315},9,[210,317,276],{"emptyLinePlaceholder":275},[210,319,321],{"class":212,"line":320},10,[210,322,323],{},"final engine = RustO.initialize(config);\n",[250,325],{},[192,327,329],{"id":328},"_2-pengenalan-teks","2. Pengenalan Teks",[196,331,333],{"id":332},"pengenalan-terstruktur","Pengenalan Terstruktur",[201,335,337],{"className":261,"code":336,"language":241,"meta":206,"style":206},"\u002F\u002F Jalankan pengenalan pada file gambar lokal\nfinal results = engine.detectTextFile('receipt.jpg');\n\nfor (final line in results) {\n  print('[${line.score.toStringAsFixed(2)}] ${line.text}');\n  print('  Frame: left=${line.frame.left}, top=${line.frame.top}, w=${line.frame.width}, h=${line.frame.height}');\n}\n\n\u002F\u002F Lepaskan sumber daya native setelah selesai\nengine.close();\n",[183,338,339,344,349,353,358,363,368,372,376,381],{"__ignoreMap":206},[210,340,341],{"class":212,"line":213},[210,342,343],{},"\u002F\u002F Jalankan pengenalan pada file gambar lokal\n",[210,345,346],{"class":212,"line":272},[210,347,348],{},"final results = engine.detectTextFile('receipt.jpg');\n",[210,350,351],{"class":212,"line":279},[210,352,276],{"emptyLinePlaceholder":275},[210,354,355],{"class":212,"line":285},[210,356,357],{},"for (final line in results) {\n",[210,359,360],{"class":212,"line":291},[210,361,362],{},"  print('[${line.score.toStringAsFixed(2)}] ${line.text}');\n",[210,364,365],{"class":212,"line":297},[210,366,367],{},"  print('  Frame: left=${line.frame.left}, top=${line.frame.top}, w=${line.frame.width}, h=${line.frame.height}');\n",[210,369,370],{"class":212,"line":303},[210,371,306],{},[210,373,374],{"class":212,"line":309},[210,375,276],{"emptyLinePlaceholder":275},[210,377,378],{"class":212,"line":315},[210,379,380],{},"\u002F\u002F Lepaskan sumber daya native setelah selesai\n",[210,382,383],{"class":212,"line":320},[210,384,385],{},"engine.close();\n",[196,387,389],{"id":388},"dari-byte-gambar-uint8list","Dari Byte Gambar Uint8List",[201,391,393],{"className":261,"code":392,"language":241,"meta":206,"style":206},"import 'dart:io';\n\nfinal bytes = File('document.png').readAsBytesSync();\nfinal results = engine.detectTextData(bytes);\n",[183,394,395,400,404,409],{"__ignoreMap":206},[210,396,397],{"class":212,"line":213},[210,398,399],{},"import 'dart:io';\n",[210,401,402],{"class":212,"line":272},[210,403,276],{"emptyLinePlaceholder":275},[210,405,406],{"class":212,"line":279},[210,407,408],{},"final bytes = File('document.png').readAsBytesSync();\n",[210,410,411],{"class":212,"line":285},[210,412,413],{},"final results = engine.detectTextData(bytes);\n",[250,415],{},[192,417,419],{"id":418},"_3-rekonstruksi-tata-letak-spasial","3. Rekonstruksi Tata Letak Spasial",[201,421,423],{"className":261,"code":422,"language":241,"meta":206,"style":206},"final spatialText = engine.detectTextFileSpatial('invoice.png');\nprint('--- Tata Letak Dokumen Spasial ---');\nprint(spatialText);\n",[183,424,425,430,435],{"__ignoreMap":206},[210,426,427],{"class":212,"line":213},[210,428,429],{},"final spatialText = engine.detectTextFileSpatial('invoice.png');\n",[210,431,432],{"class":212,"line":272},[210,433,434],{},"print('--- Tata Letak Dokumen Spasial ---');\n",[210,436,437],{"class":212,"line":279},[210,438,439],{},"print(spatialText);\n",[250,441],{},[192,443,445],{"id":444},"_4-praktik-terbaik-pengujian-di-flutter","4. Praktik Terbaik Pengujian di Flutter",[179,447,448,449,452,453,456,457,460,461,464],{},"Saat menulis ",[183,450,451],{},"testWidgets"," yang berinteraksi dengan loop FFI native, selalu muat file pengujian menggunakan operasi berkas sinkron (",[183,454,455],{},"File(path).readAsBytesSync()",") dan hindari pembacaan asinkron ",[183,458,459],{},"await File(path).readAsBytes()",". Hal ini mencegah kemacetan penjadwalan antrean event pada zona pengujian ",[183,462,463],{},"FakeAsync"," milik Flutter.",[466,467,468],"style",{},"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 .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);}",{"title":206,"searchDepth":272,"depth":272,"links":470},[471,475,476,480,481],{"id":194,"depth":272,"text":15,"children":472},[473,474],{"id":198,"depth":279,"text":199},{"id":230,"depth":279,"text":231},{"id":254,"depth":272,"text":255},{"id":328,"depth":272,"text":329,"children":477},[478,479],{"id":332,"depth":279,"text":333},{"id":388,"depth":279,"text":389},{"id":418,"depth":272,"text":419},{"id":444,"depth":272,"text":445},"Panduan penggunaan mesin OCR RustO! di aplikasi mobile, desktop Flutter, dan Dart murni via FFI.","md",null,{},{"icon":103},{"title":488,"description":482},"Menggunakan Flutter & Dart - RustO!","JTlWL6o-7E9yGJEEdrh3feUthK2poPymALSiAlBl9xY",[491,493],{"title":95,"path":96,"stem":97,"description":492,"icon":98,"children":-1},"Menggunakan engine RustO! OCR native pada aplikasi Java, Kotlin, dan Scala via JNA.",{"title":105,"path":106,"stem":107,"description":494,"icon":108,"children":-1},"Panduan OCR langsung dari buffer piksel RGB8 terinterleave tanpa kompresi di Rust, C FFI, dan berbagai binding bahasa.",1792905891415]