Compare commits
1 Commits
V.0.0.5
...
avec-mlkit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b2172e3ec |
@@ -37,6 +37,10 @@
|
||||
<meta-data
|
||||
android:name="flutterEmbedding"
|
||||
android:value="2" />
|
||||
<!-- ML Kit Document Scanner : télécharge le module de scan de la cible -->
|
||||
<meta-data
|
||||
android:name="com.google.mlkit.vision.DEPENDENCIES"
|
||||
android:value="docscanner" />
|
||||
</application>
|
||||
<!-- Required to query activities that can process text, see:
|
||||
https://developer.android.com/training/package-visibility and
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
54
lib/services/document_scanner_service.dart
Normal file
54
lib/services/document_scanner_service.dart
Normal file
@@ -0,0 +1,54 @@
|
||||
import 'package:google_mlkit_document_scanner/google_mlkit_document_scanner.dart';
|
||||
|
||||
/// Résultat du scan de document.
|
||||
class DocumentScanResult {
|
||||
/// Chemin de l'image redressée (de face), ou null si l'utilisateur a annulé.
|
||||
final String? imagePath;
|
||||
|
||||
/// true si un scan a bien été produit.
|
||||
bool get success => imagePath != null;
|
||||
|
||||
const DocumentScanResult(this.imagePath);
|
||||
}
|
||||
|
||||
/// Service qui lance le scanner de documents Google ML Kit.
|
||||
///
|
||||
/// Le scanner ouvre une UI plein écran fournie par Google Play Services :
|
||||
/// caméra, détection des bords de la feuille en direct, recadrage manuel des
|
||||
/// 4 coins, puis renvoie l'image REDRESSÉE de face. Idéal pour une cible de
|
||||
/// tir, qui est imprimée sur un carton/feuille rectangulaire.
|
||||
///
|
||||
/// NOTE : disponible uniquement sur Android (fonctionnalité ML Kit en bêta).
|
||||
class DocumentScannerService {
|
||||
/// Lance le scanner et renvoie le chemin de l'image redressée.
|
||||
///
|
||||
/// [pageLimit] est fixé à 1 (une seule cible par scan).
|
||||
/// On désactive l'import galerie ici car la galerie est gérée séparément.
|
||||
///
|
||||
/// IMPORTANT : on utilise [ScannerMode.base] et NON [ScannerMode.full].
|
||||
/// - `full`/`filter` appliquent des filtres "document" (noir & blanc,
|
||||
/// rehaussement type photocopie) → détruit les couleurs de la cible.
|
||||
/// - `base` ne fait QUE le recadrage + le redressement de perspective
|
||||
/// (mise de face), en conservant l'image en couleurs réelles. C'est
|
||||
/// indispensable pour pouvoir détecter ensuite les impacts.
|
||||
Future<DocumentScanResult> scanTarget() async {
|
||||
final options = DocumentScannerOptions(
|
||||
mode: ScannerMode.base, // redressement seul, sans filtre couleur
|
||||
pageLimit: 1,
|
||||
isGalleryImport: false,
|
||||
);
|
||||
|
||||
final scanner = DocumentScanner(options: options);
|
||||
try {
|
||||
final DocumentScanningResult result = await scanner.scanDocument();
|
||||
final images = result.images;
|
||||
if (images.isEmpty) {
|
||||
return const DocumentScanResult(null);
|
||||
}
|
||||
return DocumentScanResult(images.first);
|
||||
} finally {
|
||||
// Libère les ressources natives du scanner.
|
||||
await scanner.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user