business_card_scanner 1.0.2 copy "business_card_scanner: ^1.0.2" to clipboard
business_card_scanner: ^1.0.2 copied to clipboard

A Flutter package for scanning and extracting information from business cards offline using ML Kit.

Business Card Scanner #

A Flutter package for scanning and extracting information from business cards and general text recognition offline using ML Kit.

Features #

  • Business Card Scanning: Extract structured data from business cards
  • General OCR: Extract text from any image with metadata
  • Smart Parsing: Automatically extract emails, phone numbers, and URLs
  • Offline Processing: Uses Google ML Kit for on-device text recognition
  • Extensible Architecture: Ready for future AI integration
  • Platform-agnostic: Works on iOS, Android, and other Flutter platforms

Installation #

Add this to your pubspec.yaml:

dependencies:
  business_card_scanner: ^1.0.0

Usage #

Business Card Scanning #

For structured business card data extraction:

import 'package:business_card_scanner/business_card_scanner.dart';

// Initialize scanner
final scanner = BusinessCardScanner();

// Scan from image bytes
final result = await scanner.scan(imageBytes);

// Access extracted data
print('Email: ${result.email}');
print('Phone: ${result.phone}');
print('URL: ${result.url}');
print('Raw text: ${result.rawText}');

// Don't forget to dispose
scanner.dispose();

General OCR (Text Recognition) #

For general text extraction from any image:

import 'package:business_card_scanner/business_card_scanner.dart';

// Initialize OCR service
final ocrService = GeneralOcrService();

// Simple text extraction
final text = await ocrService.extractText(imageBytes);
print('Extracted text: $text');

// Text extraction with metadata
final result = await ocrService.extractTextWithMetadata(imageBytes);
print('Text: ${result.text}');
print('Processing time: ${result.processingTimeMs}ms');
print('Word count: ${result.wordCount}');
print('Character count: ${result.characterCount}');
print('Line count: ${result.lineCount}');

// Check if text was found
if (result.hasText) {
  print('Normalized text: ${result.normalizedText}');
  print('Lines: ${result.lines}');
  print('Words: ${result.words}');
}

// Don't forget to dispose
ocrService.dispose();

API Reference #

BusinessCardScanner #

Method Description Returns
scan(Uint8List imageBytes) Scans business card and extracts structured data Future<BusinessCardData>
dispose() Releases resources void

GeneralOcrService #

Method Description Returns
extractText(Uint8List imageBytes) Extracts raw text from image Future<String>
extractTextWithMetadata(Uint8List imageBytes) Extracts text with processing metadata Future<OcrResult>
dispose() Releases resources void

BusinessCardData #

Property Type Description
email String? First email found in the text
phone String? First phone number found
url String? First URL found
rawText String Complete extracted text

OcrResult #

Property Type Description
text String Extracted text
processingTimeMs int Processing time in milliseconds
characterCount int Number of characters
wordCount int Number of words
lineCount int Number of lines
hasText bool Whether any text was found
normalizedText String Text with normalized whitespace
lines List<String> Text split into lines
words List<String> Text split into words

Complete Example #

Here's a practical example showing both business card scanning and general OCR:

import 'dart:typed_data';
import 'package:business_card_scanner/business_card_scanner.dart';
import 'package:image_picker/image_picker.dart';

class DocumentScanner {
  final BusinessCardScanner _businessCardScanner = BusinessCardScanner();
  final GeneralOcrService _ocrService = GeneralOcrService();

  Future<void> scanBusinessCard() async {
    // Pick image from gallery or camera
    final ImagePicker picker = ImagePicker();
    final XFile? image = await picker.pickImage(source: ImageSource.camera);
    
    if (image != null) {
      final Uint8List imageBytes = await image.readAsBytes();
      
      // Scan business card for structured data
      final businessCardData = await _businessCardScanner.scan(imageBytes);
      
      print('📧 Email: ${businessCardData.email ?? 'Not found'}');
      print('📞 Phone: ${businessCardData.phone ?? 'Not found'}');
      print('🌐 Website: ${businessCardData.url ?? 'Not found'}');
      print('📄 Full text: ${businessCardData.rawText}');
    }
  }

  Future<void> scanDocument() async {
    // Pick image from gallery or camera
    final ImagePicker picker = ImagePicker();
    final XFile? image = await picker.pickImage(source: ImageSource.gallery);
    
    if (image != null) {
      final Uint8List imageBytes = await image.readAsBytes();
      
      // Extract text with metadata
      final ocrResult = await _ocrService.extractTextWithMetadata(imageBytes);
      
      print('📝 Text found: ${ocrResult.hasText}');
      print('⏱️ Processing time: ${ocrResult.processingTimeMs}ms');
      print('📊 Statistics:');
      print('   - Characters: ${ocrResult.characterCount}');
      print('   - Words: ${ocrResult.wordCount}');
      print('   - Lines: ${ocrResult.lineCount}');
      print('📄 Content: ${ocrResult.normalizedText}');
    }
  }

  void dispose() {
    _businessCardScanner.dispose();
    _ocrService.dispose();
  }
}

Platform Setup #

Android #

Add the following to your android/app/build.gradle:

android {
    compileSdkVersion 34
    
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 34
    }
}

iOS #

Add camera and photo library permissions to your ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>This app needs camera access to scan business cards</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app needs photo library access to select images for scanning</string>

Example Apps #

The package includes two complete example apps:

  • Business Card Scanner (example/lib/main.dart): Demonstrates structured business card scanning with camera integration
  • General OCR Demo (example/lib/general_ocr_demo.dart): Shows general text recognition capabilities with performance metrics

Run the examples:

cd example
flutter run

Performance Tips #

  • Image Quality: Higher resolution images generally produce better OCR results
  • Lighting: Ensure good lighting conditions when capturing images
  • Text Orientation: The package works best with horizontally oriented text
  • Memory Management: Always call dispose() to free up resources
  • Processing Time: OCR processing time varies based on image size and complexity

Troubleshooting #

Common Issues #

No text detected:

  • Ensure good lighting and image quality
  • Check that the image contains readable text
  • Verify that ML Kit is properly initialized (may require app restart)

Poor extraction accuracy:

  • Use higher resolution images
  • Ensure text is horizontally oriented
  • Avoid blurry or low-contrast images

Performance issues:

  • Resize large images before processing
  • Process images on a background isolate for better UI performance
  • Always dispose of services when done

Error Handling #

try {
  final result = await scanner.scan(imageBytes);
  // Handle successful scan
} catch (e) {
  print('Scan failed: $e');
  // Handle error (show user-friendly message)
}

Roadmap #

v1.0 (Current) #

  • ✅ Offline text recognition using ML Kit
  • ✅ Business card structured data extraction
  • ✅ General OCR with metadata
  • ✅ Email, phone, and URL parsing
  • ✅ Complete example applications
  • ✅ Comprehensive documentation

v1.1 (Next) #

  • ❌ Improved regex patterns for better extraction
  • ❌ Support for more phone number formats
  • ❌ Text confidence scores
  • ❌ Batch processing capabilities

v2.0 (Future) #

  • ❌ AI-based field extraction (name, title, company)
  • ❌ Multi-language support
  • ❌ Custom field extraction rules
  • ❌ Integration with contact management systems
  • ❌ Advanced image preprocessing

Contributing #

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

License #

MIT License - see the LICENSE file for details.

Support #

2
likes
140
points
76
downloads

Documentation

API reference

Publisher

verified publisherconalyz.com

Weekly Downloads

A Flutter package for scanning and extracting information from business cards offline using ML Kit.

Homepage
Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, google_mlkit_text_recognition, image, image_picker, logger, path, path_provider

More

Packages that depend on business_card_scanner