diff --git a/scripts/build_model.py b/scripts/build_model.py new file mode 100644 index 0000000..9031ccc --- /dev/null +++ b/scripts/build_model.py @@ -0,0 +1,7 @@ +from deepface import DeepFace; + +DeepFace.build_model( + model_name = "{{model_name}}", +); + +print("true") diff --git a/src/Data/VerifyResult.php b/src/Data/VerifyResult.php index e43d1f2..5517709 100644 --- a/src/Data/VerifyResult.php +++ b/src/Data/VerifyResult.php @@ -4,7 +4,7 @@ use Astrotomic\DeepFace\Enums\Detector; use Astrotomic\DeepFace\Enums\DistanceMetric; -use Astrotomic\DeepFace\Enums\Model; +use Astrotomic\DeepFace\Enums\FaceRecognitionModel; class VerifyResult { @@ -12,7 +12,7 @@ public function __construct( public readonly bool $verified, public readonly float $distance, public readonly float $threshold, - public readonly Model $model, + public readonly FaceRecognitionModel $model, public readonly Detector $detector_backend, public readonly DistanceMetric $similarity_metric, public readonly string $img1_path, diff --git a/src/DeepFace.php b/src/DeepFace.php index 5fef902..9fe40b5 100644 --- a/src/DeepFace.php +++ b/src/DeepFace.php @@ -10,8 +10,9 @@ use Astrotomic\DeepFace\Enums\Detector; use Astrotomic\DeepFace\Enums\DistanceMetric; use Astrotomic\DeepFace\Enums\Emotion; +use Astrotomic\DeepFace\Enums\FaceRecognitionModel; +use Astrotomic\DeepFace\Enums\FacialAttributeModel; use Astrotomic\DeepFace\Enums\Gender; -use Astrotomic\DeepFace\Enums\Model; use Astrotomic\DeepFace\Enums\Normalization; use Astrotomic\DeepFace\Enums\Race; use BadMethodCallException; @@ -32,10 +33,20 @@ public function __construct(string $python = null) ); } + public function buildModel(FaceRecognitionModel|FacialAttributeModel $model_name): bool + { + return $this->run( + filepath: __DIR__.'/../scripts/build_model.py', + data: [ + '{{model_name}}' => $model_name->value, + ], + ); + } + public function verify( string $img1_path, string $img2_path, - Model $model_name = Model::VGGFACE, + FaceRecognitionModel $model_name = FaceRecognitionModel::VGGFACE, Detector $detector_backend = Detector::OPENCV, DistanceMetric $distance_metric = DistanceMetric::COSINE, bool $enforce_detection = true, @@ -70,7 +81,7 @@ public function verify( verified: $output['verified'] === 'True', distance: $output['distance'], threshold: $output['threshold'], - model: Model::from($output['model']), + model: FaceRecognitionModel::from($output['model']), detector_backend: Detector::from($output['detector_backend']), similarity_metric: DistanceMetric::from($output['similarity_metric']), img1_path: $img1->getRealPath(), @@ -172,7 +183,7 @@ public function extractFaces( ); } - protected function run(string $filepath, array $data): array + protected function run(string $filepath, array $data): array|bool { $script = $this->script($filepath, $data); $process = $this->process($script); diff --git a/src/Enums/Model.php b/src/Enums/FaceRecognitionModel.php similarity index 90% rename from src/Enums/Model.php rename to src/Enums/FaceRecognitionModel.php index c56cb98..10025c6 100644 --- a/src/Enums/Model.php +++ b/src/Enums/FaceRecognitionModel.php @@ -2,7 +2,7 @@ namespace Astrotomic\DeepFace\Enums; -enum Model: string +enum FaceRecognitionModel: string { case VGGFACE = 'VGG-Face'; case FACENET = 'Facenet'; diff --git a/src/Enums/FacialAttributeModel.php b/src/Enums/FacialAttributeModel.php new file mode 100644 index 0000000..ef1bc93 --- /dev/null +++ b/src/Enums/FacialAttributeModel.php @@ -0,0 +1,11 @@ +