to flask
This commit is contained in:
parent
bc1b1019f3
commit
5b8f276437
|
|
@ -12,6 +12,7 @@
|
||||||
use App\Jobs\RetrainAllModels;
|
use App\Jobs\RetrainAllModels;
|
||||||
use App\Jobs\MigrateExistingEmbeddings;
|
use App\Jobs\MigrateExistingEmbeddings;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class FaceApprovalController extends Controller
|
class FaceApprovalController extends Controller
|
||||||
|
|
@ -45,18 +46,14 @@ public function index(Request $request)
|
||||||
$users = $query->get();
|
$users = $query->get();
|
||||||
|
|
||||||
$users->each(function ($user) {
|
$users->each(function ($user) {
|
||||||
$datasetPath = "face_datasets/{$user->id}";
|
$dw = $user->dataWajah;
|
||||||
$frameList = [];
|
$frameList = [];
|
||||||
|
|
||||||
if (Storage::disk('local')->exists($datasetPath)) {
|
if ($dw && $dw->jumlah_frame > 0) {
|
||||||
$files = Storage::disk('local')->files($datasetPath);
|
for ($i = 0; $i < $dw->jumlah_frame; $i++) {
|
||||||
foreach ($files as $file) {
|
$frameList[] = sprintf("face_datasets/%d/frame_%03d.jpg", $user->id, $i);
|
||||||
if (preg_match('/\/frame_\d+\.jpg$/', $file)) {
|
|
||||||
$frameList[] = $file;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sort($frameList);
|
|
||||||
}
|
|
||||||
|
|
||||||
$user->face_frames = $frameList;
|
$user->face_frames = $frameList;
|
||||||
$user->face_frame_count = count($frameList);
|
$user->face_frame_count = count($frameList);
|
||||||
|
|
@ -80,9 +77,9 @@ public function approve($id)
|
||||||
return redirect()->back()->with('error', 'Data wajah belum tersedia.');
|
return redirect()->back()->with('error', 'Data wajah belum tersedia.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$datasetPath = Storage::disk('local')->path("face_datasets/{$user->id}");
|
$jumlahFrame = $user->dataWajah->jumlah_frame ?? 0;
|
||||||
if (!file_exists($datasetPath) || count(glob("$datasetPath/frame_*.jpg")) < 50) {
|
if ($jumlahFrame < 50) {
|
||||||
return redirect()->back()->with('error', 'Dataset wajah belum cukup (minimal 50 frame). Pastikan proses extract frames sudah selesai.');
|
return redirect()->back()->with('error', "Dataset wajah belum cukup ({$jumlahFrame} frame, minimal 50). Pastikan proses extract frames sudah selesai.");
|
||||||
}
|
}
|
||||||
|
|
||||||
$user->dataWajah->update(['is_verified' => StatusVerifikasiWajah::APPROVED]);
|
$user->dataWajah->update(['is_verified' => StatusVerifikasiWajah::APPROVED]);
|
||||||
|
|
@ -159,6 +156,22 @@ public function reset($id)
|
||||||
|
|
||||||
public function showFrame($userId, $frameIndex)
|
public function showFrame($userId, $frameIndex)
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
|
$response = Http::timeout(15)
|
||||||
|
->withHeaders([
|
||||||
|
'X-API-Key' => config('services.flask.api_key'),
|
||||||
|
])
|
||||||
|
->get(config('services.flask.url') . "/get-frame/{$userId}/{$frameIndex}");
|
||||||
|
|
||||||
|
if ($response->successful()) {
|
||||||
|
return response($response->body(), 200)
|
||||||
|
->header('Content-Type', 'image/jpeg')
|
||||||
|
->header('Cache-Control', 'public, max-age=86400');
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// Fallback ke storage lokal
|
||||||
|
}
|
||||||
|
|
||||||
$rawFilePath = "face_datasets/{$userId}/raw_frame_{$frameIndex}.jpg";
|
$rawFilePath = "face_datasets/{$userId}/raw_frame_{$frameIndex}.jpg";
|
||||||
$filePath = "face_datasets/{$userId}/frame_{$frameIndex}.jpg";
|
$filePath = "face_datasets/{$userId}/frame_{$frameIndex}.jpg";
|
||||||
|
|
||||||
|
|
@ -186,6 +199,16 @@ public function showPhoto($userId, $pose)
|
||||||
|
|
||||||
private function cleanupUserFaceData($userId)
|
private function cleanupUserFaceData($userId)
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
|
Http::timeout(15)
|
||||||
|
->withHeaders([
|
||||||
|
'X-API-Key' => config('services.flask.api_key'),
|
||||||
|
])
|
||||||
|
->delete(config('services.flask.url') . "/delete-frames/{$userId}");
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
\Illuminate\Support\Facades\Log::warning("Gagal hapus frame di Flask untuk user {$userId}: " . $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
$paths = [
|
$paths = [
|
||||||
"face_datasets/{$userId}",
|
"face_datasets/{$userId}",
|
||||||
"face_videos/{$userId}",
|
"face_videos/{$userId}",
|
||||||
|
|
|
||||||
|
|
@ -50,12 +50,7 @@ public function handle(): void
|
||||||
$userId = $data->id_user;
|
$userId = $data->id_user;
|
||||||
$current++;
|
$current++;
|
||||||
|
|
||||||
$frameDir = Storage::disk('local')->path("face_datasets/{$userId}");
|
$existingFrames = $data->jumlah_frame ?? 0;
|
||||||
$existingFrames = 0;
|
|
||||||
|
|
||||||
if (is_dir($frameDir)) {
|
|
||||||
$existingFrames = count(glob($frameDir . '/frame_*.jpg'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($existingFrames >= 50) {
|
if ($existingFrames >= 50) {
|
||||||
Log::info("User {$userId}: sudah punya {$existingFrames} frame. Skip extract.");
|
Log::info("User {$userId}: sudah punya {$existingFrames} frame. Skip extract.");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue