39 lines
1.1 KiB
Dart
39 lines
1.1 KiB
Dart
import 'dart:typed_data';
|
|
import 'package:opencv_dart/opencv_dart.dart' as cv;
|
|
import '../../domain/entities/quality_status.dart';
|
|
import 'quality_checker.dart';
|
|
|
|
class ImageAnalysisService {
|
|
static QualityStatus analyze({
|
|
required Uint8List bytes,
|
|
required int width,
|
|
required int height,
|
|
}) {
|
|
final mat = cv.Mat.fromList(
|
|
height,
|
|
width,
|
|
cv.MatType.CV_8UC1,
|
|
bytes,
|
|
);
|
|
|
|
final result = QualityChecker.analyze(mat);
|
|
mat.dispose();
|
|
|
|
// Re-calculate flags locally or trust QualityChecker.
|
|
// QualityChecker returns QualityResult which has scores.
|
|
// Logic for flags matches QualityChecker.analyze:
|
|
final bool isSharp = result.blurScore > 100.0;
|
|
final bool isLit = result.brightness > 40.0 && result.brightness < 220.0;
|
|
final bool isPositionValid = result.isPositionValid;
|
|
|
|
return QualityStatus(
|
|
blurScore: result.blurScore,
|
|
brightness: result.brightness,
|
|
isCentered: result.isPositionValid,
|
|
canCapture: result.passed,
|
|
isFocusGood: isSharp,
|
|
isLightingGood: isLit,
|
|
isPositionGood: isPositionValid,
|
|
);
|
|
}
|
|
} |