[mob][photos] Use canvas again for generating face thumbnail
This commit is contained in:
parent
aad1327705
commit
8b1545239c
3 changed files with 40 additions and 7 deletions
|
@ -5,8 +5,9 @@ import "package:photos/core/cache/lru_map.dart";
|
|||
import "package:photos/face/model/box.dart";
|
||||
import "package:photos/models/file/file.dart";
|
||||
import "package:photos/models/file/file_type.dart";
|
||||
import "package:photos/utils/face/face_util.dart";
|
||||
// import "package:photos/utils/face/face_util.dart";
|
||||
import "package:photos/utils/file_util.dart";
|
||||
import "package:photos/utils/image_ml_isolate.dart";
|
||||
import "package:photos/utils/thumbnail_util.dart";
|
||||
import "package:pool/pool.dart";
|
||||
|
||||
|
@ -37,8 +38,8 @@ Future<Map<String, Uint8List>?> getFaceCrops(
|
|||
faceBoxes.add(e.value);
|
||||
}
|
||||
final List<Uint8List> faceCrop =
|
||||
// await ImageMlIsolate.instance.generateFaceThumbnailsForImage(
|
||||
await generateJpgFaceThumbnails(
|
||||
await ImageMlIsolate.instance.generateFaceThumbnailsForImageUsingCanvas(
|
||||
// await generateJpgFaceThumbnails(
|
||||
imagePath,
|
||||
faceBoxes,
|
||||
);
|
||||
|
|
|
@ -22,6 +22,7 @@ enum ImageOperation {
|
|||
preprocessMobileFaceNet,
|
||||
preprocessMobileFaceNetOnnx,
|
||||
generateFaceThumbnails,
|
||||
generateFaceThumbnailsUsingCanvas,
|
||||
cropAndPadFace,
|
||||
}
|
||||
|
||||
|
@ -226,6 +227,19 @@ class ImageMlIsolate {
|
|||
faceBoxes,
|
||||
);
|
||||
sendPort.send(List.from(results));
|
||||
case ImageOperation.generateFaceThumbnailsUsingCanvas:
|
||||
final imagePath = args['imagePath'] as String;
|
||||
final Uint8List imageData = await File(imagePath).readAsBytes();
|
||||
final faceBoxesJson =
|
||||
args['faceBoxesList'] as List<Map<String, dynamic>>;
|
||||
final List<FaceBox> faceBoxes =
|
||||
faceBoxesJson.map((json) => FaceBox.fromJson(json)).toList();
|
||||
final List<Uint8List> results =
|
||||
await generateFaceThumbnailsUsingCanvas(
|
||||
imageData,
|
||||
faceBoxes,
|
||||
);
|
||||
sendPort.send(List.from(results));
|
||||
case ImageOperation.cropAndPadFace:
|
||||
final imageData = args['imageData'] as Uint8List;
|
||||
final faceBox = args['faceBox'] as List<double>;
|
||||
|
@ -366,7 +380,7 @@ class ImageMlIsolate {
|
|||
);
|
||||
final inputs = results['inputs'] as Float32List;
|
||||
final originalSize = Dimensions(
|
||||
width:results['originalWidth'] as int,
|
||||
width: results['originalWidth'] as int,
|
||||
height: results['originalHeight'] as int,
|
||||
);
|
||||
final newSize = Dimensions(
|
||||
|
@ -501,6 +515,26 @@ class ImageMlIsolate {
|
|||
).then((value) => value.cast<Uint8List>());
|
||||
}
|
||||
|
||||
/// Generates face thumbnails for all [faceBoxes] in [imageData].
|
||||
///
|
||||
/// Uses [generateFaceThumbnailsUsingCanvas] inside the isolate.
|
||||
Future<List<Uint8List>> generateFaceThumbnailsForImageUsingCanvas(
|
||||
String imagePath,
|
||||
List<FaceBox> faceBoxes,
|
||||
) async {
|
||||
final List<Map<String, dynamic>> faceBoxesJson =
|
||||
faceBoxes.map((box) => box.toJson()).toList();
|
||||
return await _runInIsolate(
|
||||
(
|
||||
ImageOperation.generateFaceThumbnailsUsingCanvas,
|
||||
{
|
||||
'imagePath': imagePath,
|
||||
'faceBoxesList': faceBoxesJson,
|
||||
},
|
||||
),
|
||||
).then((value) => value.cast<Uint8List>());
|
||||
}
|
||||
|
||||
@Deprecated('For second pass of BlazeFace, no longer used')
|
||||
|
||||
/// Generates cropped and padded image data from [imageData] and a [faceBox].
|
||||
|
|
|
@ -1272,12 +1272,10 @@ Future<List<Uint8List>> generateFaceThumbnails(
|
|||
}
|
||||
}
|
||||
|
||||
@Deprecated("Old method using canvas, replaced by `generateFaceThumbnails`")
|
||||
|
||||
/// Generates a face thumbnail from [imageData] and a [faceDetection].
|
||||
///
|
||||
/// Returns a [Uint8List] image, in png format.
|
||||
Future<List<Uint8List>> generateFaceThumbnailsFromDataAndDetections(
|
||||
Future<List<Uint8List>> generateFaceThumbnailsUsingCanvas(
|
||||
Uint8List imageData,
|
||||
List<FaceBox> faceBoxes,
|
||||
) async {
|
||||
|
|
Loading…
Add table
Reference in a new issue