new CURLFile($imagePath), 'priority' => $priority ? 'true' : 'false' ]; curl_setopt_array($curl, [ CURLOPT_URL => $api_url . '/upload', CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postFields, CURLOPT_HTTPHEADER => [ 'X-API-Key: ' . $api_key ] ]); // Exécuter la requête $response = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); // Vérifier la réponse if ($status != 202) { throw new Exception("Erreur lors de l'upload: " . $response); } // Décoder la réponse JSON $result = json_decode($response, true); if (!isset($result['job_id'])) { throw new Exception("Réponse invalide de l'API: " . $response); } return $result['job_id']; } /** * Vérifie l'état de traitement d'une tâche * * @param string $jobId Identifiant de la tâche * @return array Informations sur l'état de la tâche * @throws Exception En cas d'erreur */ function checkJobStatus($jobId) { global $api_url, $api_key; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $api_url . '/status/' . $jobId, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'X-API-Key: ' . $api_key ] ]); $response = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); if ($status != 200) { throw new Exception("Erreur lors de la vérification du statut: " . $response); } return json_decode($response, true); } /** * Récupère les résultats d'une tâche terminée * * @param string $jobId Identifiant de la tâche * @return array Résultats de l'extraction * @throws Exception En cas d'erreur */ function getJobResult($jobId) { global $api_url, $api_key; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $api_url . '/result/' . $jobId, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'X-API-Key: ' . $api_key ] ]); $response = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); if ($status != 200) { throw new Exception("Erreur lors de la récupération des résultats: " . $response); } return json_decode($response, true); } /** * Attend que le traitement d'une tâche soit terminé * * @param string $jobId Identifiant de la tâche * @param int $maxWaitTime Temps d'attente maximum en secondes * @param int $pollInterval Intervalle de vérification en secondes * @return array État final de la tâche * @throws Exception Si le temps d'attente est dépassé ou en cas d'erreur */ function waitForJobCompletion($jobId, $maxWaitTime = 300, $pollInterval = 2) { $startTime = time(); $status = ['status' => 'pending']; while (($status['status'] == 'pending' || $status['status'] == 'processing') && (time() - $startTime < $maxWaitTime)) { // Attendre avant de vérifier à nouveau sleep($pollInterval); // Vérifier l'état $status = checkJobStatus($jobId); // Afficher la progression if (isset($status['progress'])) { echo "Progression: " . $status['progress'] . "% - " . $status['message'] . "\n"; } else { echo "État: " . $status['status'] . " - " . $status['message'] . "\n"; } } if ($status['status'] != 'completed' && $status['status'] != 'failed') { throw new Exception("Délai d'attente dépassé pour la tâche " . $jobId); } return $status; } // Exemple d'utilisation try { // Chemin de l'image à traiter $imagePath = '/home/alex/Téléchargements/pymupdf/test_qheque-PXL_2025.jpg'; echo "=== EXTRACTION D'INFORMATIONS DE CHÈQUE ===\n"; // 1. Envoyer l'image echo "Envoi de l'image: " . $imagePath . "\n"; $jobId = uploadChequeImage($imagePath, true); // true pour un traitement prioritaire echo "Image envoyée, ID de la tâche: " . $jobId . "\n\n"; // 2. Attendre la fin du traitement echo "Attente du traitement...\n"; $finalStatus = waitForJobCompletion($jobId); // 3. Si le traitement est terminé avec succès, récupérer les résultats if ($finalStatus['status'] == 'completed') { echo "\nTraitement terminé avec succès!\n"; // Récupérer les résultats détaillés $results = getJobResult($jobId); echo "\n=== RÉSULTATS DE L'EXTRACTION ===\n"; if (isset($results['result'])) { echo "Montant: " . ($results['result']['montant'] ?? 'Non détecté') . "\n"; echo "Date: " . ($results['result']['date'] ?? 'Non détectée') . "\n"; echo "Bénéficiaire: " . ($results['result']['beneficiaire'] ?? 'Non détecté') . "\n"; echo "Numéro de chèque: " . ($results['result']['numero_cheque'] ?? 'Non détecté') . "\n"; echo "Qualité de l'extraction: " . ($results['result']['qualite_extraction'] ?? 'Inconnue') . "\n"; if (isset($results['result']['image_zones'])) { echo "Image avec zones identifiées: " . $results['result']['image_zones'] . "\n"; } } echo "\nMéthode utilisée: " . $results['methode'] . "\n"; if (isset($results['texte_brut']) && !empty($results['texte_brut'])) { echo "\n=== TEXTE BRUT EXTRAIT ===\n"; echo $results['texte_brut'] . "\n"; } } else { echo "\nÉchec du traitement: " . ($results['erreur'] ?? 'Erreur inconnue') . "\n"; } } catch (Exception $e) { echo "ERREUR: " . $e->getMessage() . "\n"; }