From 8ce5d972f4df5f937700a069cd57f5f26d95618c Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Fri, 27 Oct 2023 18:46:51 +0300 Subject: [PATCH] 10/27/1 --- assets/images/cardid.jpg | Bin 0 -> 37245 bytes .../functions/camer_controller.dart | 173 +++++++++++++++++ lib/controller/functions/ocr_controller.dart | 1 - .../payment/payment_controller.dart | 16 +- lib/main.dart | 5 +- lib/views/home/Captin/camer_widget.dart | 182 ++++++++++++++++++ lib/views/home/Captin/home_captin.dart | 46 +++++ pubspec.lock | 42 +++- pubspec.yaml | 1 + 9 files changed, 460 insertions(+), 6 deletions(-) create mode 100644 assets/images/cardid.jpg create mode 100644 lib/controller/functions/camer_controller.dart create mode 100644 lib/views/home/Captin/camer_widget.dart diff --git a/assets/images/cardid.jpg b/assets/images/cardid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..608f2d1088d990076494c2fab412aeec3fce7a84 GIT binary patch literal 37245 zcmc$FbyyqS_h$mZ-66QUClK7--6;?}K=D$fMT)z-Yl2g}(Bc#=5WKWSiWXX+lmfM- z@B7>R{{Gl!pJ$(EpJ(r6=AJqCbM86!oOACanVCQ9f3^Xn+Ui>B03Z+uaJb(9f6f5U z4Ba0FJ`8Yw=*uE5Bm#gbYw3YNfWO6!0fPtNq^_)|Dk3T(BI4)>6%oI$Mc`thQh#eH zN%6mY5f_-a*gxmu;*h_!gcIZ+zAGH|_f!N1fl2nmPs@($s01QGexOV^s zDFEQ@6X(a)bx?Dj6E;{@cg@?s&cWuLiW>-@g8Li2nl* z-`OPqe&7D{ez%AF`Ul<{Y2sRES|J%sgwH$#k8CQBX5=#kwS!Z#EvvArm~$>UW7dh}T2&!0bU z0V)7|92{I6YFDsjfk|;z< zMqXZ?Q%F@yMOIT%PG073CqR4x0%9U!22xT686Gwsng8qZX9z%s3tYk�VdFvx(I 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%0AVol!eX~A_kt)Gn07#0P_mR2bVO1 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 literal 0 HcmV?d00001 diff --git a/lib/controller/functions/camer_controller.dart b/lib/controller/functions/camer_controller.dart new file mode 100644 index 0000000..b8490a8 --- /dev/null +++ b/lib/controller/functions/camer_controller.dart @@ -0,0 +1,173 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:camera/camera.dart'; +import 'package:flutter_tesseract_ocr/flutter_tesseract_ocr.dart'; +import 'package:get/get.dart'; +import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart'; +import 'package:ride/constant/box_name.dart'; +import 'package:ride/views/widgets/elevated_btn.dart'; +import 'package:path_provider/path_provider.dart' as path_provider; +import 'package:path/path.dart' as path; + +import '../../main.dart'; + +class CameraClassController extends GetxController { + late CameraController cameraController; + late List cameras; + bool isCameraInitialized = false; + final TextRecognizer _textRecognizer = TextRecognizer(); + String? scannedText; + bool isloading = false; + + @override + void onInit() { + super.onInit(); + initializeCamera(); + } + + Future initializeCamera() async { + try { + cameras = await availableCameras(); + update(); + cameraController = CameraController( + cameras[0], + ResolutionPreset.max, + enableAudio: false, + ); + await cameraController.initialize(); + isCameraInitialized = true; + update(); + } catch (e) { + if (e is CameraException) { + switch (e.code) { + case 'CameraAccessDenied': + Get.defaultDialog( + title: 'Camera Access Denied.'.tr, + middleText: '', + confirm: + MyElevatedButton(title: 'Open Settings', onPressed: () {}), + ); + break; + default: + // Handle other errors here. + break; + } + } + } + } + + Future takePictureAndMLGoogleScan() async { + try { + // Construct the path for the image file + final directory = await path_provider.getTemporaryDirectory(); + final imagePath = + path.join(directory.path, '${box.read(BoxName.driverID)}.png'); + + // Capture the image and save it to the specified path + final XFile capturedImage = await cameraController.takePicture(); + + // Move the captured image to the desired path + await capturedImage.saveTo(imagePath); + + // Recognize the text in the image + final InputImage inputImage = + InputImage.fromFile(File(capturedImage.path)); + final RecognizedText recognizedText = + await _textRecognizer.processImage(inputImage); + scannedText = recognizedText.text; + + // Extract the scanned text line by line + final List> lines = []; + for (var i = 0; i < recognizedText.blocks.length; i++) { + lines.add({ + 'line_number': i, + 'text': recognizedText.blocks[i].text, + }); + } + + // Convert the list of lines to a JSON string + final String jsonOutput = jsonEncode(lines); + + update(); + + // Print the JSON output + print(jsonOutput); + + // Get.back(); + } catch (e) { + print('Error capturing image: $e'); + } + } + + String getTextAsJSON(String text) { + final lines = text.split('\n'); + final jsonList = lines.map((line) { + return { + 'line_text': line, + 'num_words': line.trim().split(' ').length, + }; + }).toList(); + + final json = { + 'lines': jsonList, + 'num_lines': lines.length, + }; + + return jsonEncode(json); + } + + List getTextBlocks(String text) { + return text.split('\n'); + } + + Future takePictureAndTesseractScan() async { + try { + // Construct the path for the image file + final directory = await path_provider.getTemporaryDirectory(); + final imagePath = + path.join(directory.path, '${box.read(BoxName.driverID)}.png'); + + // Capture the image and save it to the specified path + final XFile capturedImage = await cameraController.takePicture(); + + // Move the captured image to the desired path + await capturedImage.saveTo(imagePath); + + // Recognize the text in the image + final languages = [ + 'eng', + 'ara' + ]; // Specify the languages you want to use for text extraction + + final text = await FlutterTesseractOcr.extractText(imagePath, + language: languages.join('+'), // Combine multiple languages with '+' + args: { + "psm": "4", + "preserve_interword_spaces": "1", + // "rectangle": const Rect.fromLTWH(100, 100, 200, 200), + } // Additional options if needed + ); + isloading = false; + final jsonText = getTextAsJSON(text); + final textBlocks = getTextBlocks(text); + update(); + scannedText = + textBlocks.toString(); // Convert the extracted text to JSON. + +// Print the JSON to the console. + print(jsonText); + update(); + // print(text); + } catch (e) { + print('Error during text extraction: $e'); + scannedText = ''; + } + } + + @override + void onClose() { + cameraController.dispose(); + super.onClose(); + } +} diff --git a/lib/controller/functions/ocr_controller.dart b/lib/controller/functions/ocr_controller.dart index 67aca39..c24d212 100644 --- a/lib/controller/functions/ocr_controller.dart +++ b/lib/controller/functions/ocr_controller.dart @@ -1,6 +1,5 @@ import 'dart:convert'; import 'dart:io'; -import 'dart:ui'; import 'package:flutter_tesseract_ocr/flutter_tesseract_ocr.dart'; import 'package:get/get.dart'; diff --git a/lib/controller/payment/payment_controller.dart b/lib/controller/payment/payment_controller.dart index 9dacb20..2ef2ed3 100644 --- a/lib/controller/payment/payment_controller.dart +++ b/lib/controller/payment/payment_controller.dart @@ -97,9 +97,19 @@ class PaymentController extends GetxController { Future initializePaymentSheet(String clientSecret) async { await Stripe.instance.initPaymentSheet( paymentSheetParameters: SetupPaymentSheetParameters( - paymentIntentClientSecret: clientSecret, - merchantDisplayName: 'Sefer', - ), + paymentIntentClientSecret: clientSecret, + merchantDisplayName: 'Sefer', + billingDetails: BillingDetails( + name: box.read(BoxName.nameDriver).toString(), + email: box.read(BoxName.emailDriver).toString(), + phone: box.read(BoxName.phoneDriver).toString(), + ), + billingDetailsCollectionConfiguration: + const BillingDetailsCollectionConfiguration( + name: CollectionMode.always, + phone: CollectionMode.always, + email: CollectionMode.always, + )), ); } diff --git a/lib/main.dart b/lib/main.dart index 2b85b4d..83a11d8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,6 @@ import 'dart:io'; +import 'package:camera/camera.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; @@ -30,6 +31,7 @@ Future backgroundMessageHandler(RemoteMessage message) async { if (message.notification!.title == 'Sefer') {} } +// late List cameras; void main() async { WidgetsFlutterBinding.ensureInitialized(); await GetStorage.init(); @@ -46,10 +48,11 @@ void main() async { List initializationTasks = [ FirebaseMessagesController().getNotificationSettings(), FirebaseMessagesController().getToken(), + // availableCameras(), // FirebaseMessagesController().getTokens(), // Add more initialization tasks here ]; - + // cameras = await availableCameras(); await Future.wait(initializationTasks); } diff --git a/lib/views/home/Captin/camer_widget.dart b/lib/views/home/Captin/camer_widget.dart new file mode 100644 index 0000000..1d15cf7 --- /dev/null +++ b/lib/views/home/Captin/camer_widget.dart @@ -0,0 +1,182 @@ +import 'package:camera/camera.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:ride/constant/colors.dart'; +import 'package:ride/constant/style.dart'; +import 'package:ride/controller/functions/camer_controller.dart'; +import 'package:ride/views/widgets/elevated_btn.dart'; + +class CameraWidgetCardId extends StatelessWidget { + final CameraClassController cameraClassController = + Get.put(CameraClassController()); + + CameraWidgetCardId({super.key}); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12), + child: GetBuilder( + builder: (cameraClassController) => cameraClassController + .isCameraInitialized + ? Stack( + children: [ + Container( + decoration: AppStyle.boxDecoration, + height: Get.height * .3, + width: Get.width, + child: + // Image.asset( + // 'assets/images/cardid.jpg', + // fit: BoxFit.cover, + // ) + CameraPreview( + cameraClassController.cameraController, + // child: IconButton( + // onPressed: () { + // cameraClassController.takePicture(); + // }, + // icon: const Icon(Icons.camera), + // ), + ), + ), + Positioned( + top: 50, + child: Container( + width: 230, + height: 25, + decoration: BoxDecoration( + // color: AppColor.blueColor, + border: Border.all( + color: AppColor.yellowColor, width: 2), + ), + ), + ), + Positioned( + top: 38, + right: 5, + child: Container( + width: 230, + height: 25, + decoration: BoxDecoration( + // color: AppColor.blueColor, + border: + Border.all(color: AppColor.blueColor, width: 2), + ), + ), + ), + Positioned( + top: 130, + right: 5, + child: Container( + width: 140, + height: 20, + decoration: BoxDecoration( + // color: AppColor.blueColor, + border: + Border.all(color: AppColor.blueColor, width: 2), + ), + ), + ), + Positioned( + top: 148, + right: 5, + child: Container( + width: 140, + height: 15, + decoration: BoxDecoration( + // color: AppColor.blueColor, + border: + Border.all(color: AppColor.blueColor, width: 2), + ), + ), + ), + Positioned( + top: 165, + right: 5, + child: Container( + width: 140, + height: 15, + decoration: BoxDecoration( + // color: AppColor.blueColor, + border: + Border.all(color: AppColor.blueColor, width: 2), + ), + ), + ), + Positioned( + top: 182, + right: 5, + child: Container( + width: 140, + height: 15, + decoration: BoxDecoration( + // color: AppColor.blueColor, + border: + Border.all(color: AppColor.blueColor, width: 2), + ), + ), + ), + Positioned( + top: 198, + right: 5, + child: Container( + width: 140, + height: 15, + decoration: BoxDecoration( + // color: AppColor.blueColor, + border: + Border.all(color: AppColor.blueColor, width: 2), + ), + ), + ), + Positioned( + top: 80, + left: 35, + child: Container( + width: 120, + height: 110, + decoration: BoxDecoration( + // color: AppColor.blueColor, + border: + Border.all(color: AppColor.blueColor, width: 2), + ), + ), + ), + ], + ) + : Container( + decoration: AppStyle.boxDecoration, + height: Get.height * .3, + width: Get.width, + child: Center( + child: Text( + 'Camera not initilaized yet', + style: AppStyle.title, + ), + ), + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + MyElevatedButton( + title: 'Scan ID MklGoogle'.tr, + onPressed: () => + cameraClassController.takePictureAndMLGoogleScan()), + MyElevatedButton( + title: 'Scan ID Tesseract'.tr, + onPressed: () => + cameraClassController.takePictureAndTesseractScan()), + ], + ), + GetBuilder( + builder: (cameraClassController) => Expanded( + child: Text(cameraClassController.scannedText.toString()))) + ], + ); + } +} diff --git a/lib/views/home/Captin/home_captin.dart b/lib/views/home/Captin/home_captin.dart index 4ec2f98..98f143e 100644 --- a/lib/views/home/Captin/home_captin.dart +++ b/lib/views/home/Captin/home_captin.dart @@ -1,3 +1,4 @@ +import 'package:camera/camera.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:ride/constant/colors.dart'; @@ -8,6 +9,7 @@ import 'package:ride/controller/home/captin/order_request_controller.dart'; import 'package:ride/controller/payment/payment_controller.dart'; import 'package:ride/main.dart'; import 'package:ride/views/Rate/ride_calculate_driver.dart'; +import 'package:ride/views/home/Captin/camer_widget.dart'; import 'package:ride/views/home/Captin/text_scanner.dart'; import 'package:ride/views/widgets/circle_container.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; @@ -193,6 +195,17 @@ class HomeCaptain extends StatelessWidget { "Text FlutterMLGoogle", ), ), + TextButton( + onPressed: () { + Get.to(() => Scaffold( + appBar: AppBar(), + body: CameraWidgetCardId(), + )); + }, + child: const Text( + "Text IdCamera", + ), + ), TextButton( onPressed: () { PaymentController().makePayment( @@ -213,3 +226,36 @@ class HomeCaptain extends StatelessWidget { ); } } + +// class CameraContainer extends StatelessWidget { +// TextMLGoogleRecognizerController controller = +// Get.put(TextMLGoogleRecognizerController()); + +// CameraContainer({super.key}); +// @override +// Widget build(BuildContext context) { +// return Stack( +// children: [ +// // The camera preview +// SizedBox( +// height: Get.height * 0.3, +// width: Get.width * 0.9, +// child: CameraPreview(controller.imagePicker as CameraController), +// ), + +// // The lines on the side of the name and national number +// const Positioned( +// bottom: 0, +// left: 0, +// right: 0, +// child: Column( +// children: [ +// Text('Name'), +// Text('National Number'), +// ], +// ), +// ), +// ], +// ); +// } +// } diff --git a/pubspec.lock b/pubspec.lock index 8aa943a..47384bd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -49,6 +49,46 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + camera: + dependency: "direct main" + description: + name: camera + sha256: "1f9010f0689774380fbcd7d6b7820a5157e8e97685fa66d619e1d1f58b3fdf93" + url: "https://pub.dev" + source: hosted + version: "0.10.5+5" + camera_android: + dependency: transitive + description: + name: camera_android + sha256: "58463140f1b39591b8e2155861b436abad4ceb48160058be8374164ff0309ef3" + url: "https://pub.dev" + source: hosted + version: "0.10.8+13" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "9495e633cda700717bbe299b0979e6c4a08cee45f298945973dc9cf3e4c1cba5" + url: "https://pub.dev" + source: hosted + version: "0.9.13+6" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: "86fd4fc597c6e455265ddb5884feb352d0171ad14b9cdf3aba30da59b25738c4" + url: "https://pub.dev" + source: hosted + version: "2.6.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: d4c2c571c7af04f8b10702ca16bb9ed2a26e64534171e8f75c9349b2c004d8f1 + url: "https://pub.dev" + source: hosted + version: "0.3.2+3" characters: dependency: transitive description: @@ -1223,4 +1263,4 @@ packages: version: "3.1.2" sdks: dart: ">=3.1.0 <4.0.0" - flutter: ">=3.10.0" + flutter: ">=3.13.0" diff --git a/pubspec.yaml b/pubspec.yaml index 6317842..423c709 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -43,6 +43,7 @@ dependencies: flutter_tesseract_ocr: ^0.4.24 google_mlkit_text_recognition: ^0.10.0 flutter_stripe: ^9.5.0+1 + camera: ^0.10.5+5