Compare commits
1 Commits
sans-mlkit
...
avec-mlkit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b2172e3ec |
@@ -37,6 +37,10 @@
|
|||||||
<meta-data
|
<meta-data
|
||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2" />
|
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>
|
</application>
|
||||||
<!-- Required to query activities that can process text, see:
|
<!-- Required to query activities that can process text, see:
|
||||||
https://developer.android.com/training/package-visibility and
|
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