43 lines
1.4 KiB
Dart
43 lines
1.4 KiB
Dart
/// Receipt parsing entry point: spatial OCR pipeline with text fallback.
|
|
library;
|
|
|
|
import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart';
|
|
|
|
import '../models/line_item.dart';
|
|
import '../models/ocr_element.dart';
|
|
import 'receipt_ocr.dart';
|
|
import 'receipt_parse_config.dart';
|
|
export 'receipt_parse_config.dart' show loadReceiptParseConfig;
|
|
export 'receipt_text_parser.dart' show ReceiptParseResult;
|
|
import 'receipt_spatial_parser.dart';
|
|
import 'receipt_text_parser.dart';
|
|
|
|
class ReceiptParser {
|
|
ReceiptParser._();
|
|
|
|
static Future<void> loadConfig() => loadReceiptParseConfig();
|
|
|
|
static List<LineItem> parse(String rawText) => parseReceipt(rawText).items;
|
|
|
|
/// Fallback when only flattened OCR text is available (tests, re-parse).
|
|
static ReceiptParseResult parseReceipt(String rawText) =>
|
|
ReceiptTextParser.parseReceipt(rawText);
|
|
|
|
/// Primary path: positioned ML Kit elements → row clustering → lookahead.
|
|
static ReceiptParseResult parseReceiptFromOcr(OcrDocument document) =>
|
|
ReceiptSpatialParser.parse(document);
|
|
|
|
static ReceiptParseResult parseRecognizedText(
|
|
RecognizedText recognized, {
|
|
required double imageWidth,
|
|
required double imageHeight,
|
|
}) {
|
|
final document = ReceiptOcr.fromRecognizedText(
|
|
recognized,
|
|
imageWidth: imageWidth,
|
|
imageHeight: imageHeight,
|
|
);
|
|
return parseReceiptFromOcr(document);
|
|
}
|
|
}
|