207 lines
7.1 KiB
JavaScript
207 lines
7.1 KiB
JavaScript
#!/usr/bin/env node
|
||
|
||
/**
|
||
* Script de test pour analyser les images via l'interface web
|
||
* et vérifier la détection de CANTU, NICOLAS et codes CNI
|
||
*/
|
||
|
||
const http = require('http')
|
||
const fs = require('fs')
|
||
const path = require('path')
|
||
|
||
console.log('🌐 Test de l\'interface web pour l\'analyse CNI')
|
||
console.log('===============================================')
|
||
|
||
// Vérifier que les images existent
|
||
const images = [
|
||
'IMG_20250902_162159.jpg',
|
||
'IMG_20250902_162210.jpg'
|
||
]
|
||
|
||
console.log('📸 Vérification des images de test:')
|
||
images.forEach(image => {
|
||
const imagePath = path.join(__dirname, 'test-files', image)
|
||
if (fs.existsSync(imagePath)) {
|
||
const stats = fs.statSync(imagePath)
|
||
console.log(`✅ ${image}: ${(stats.size / 1024).toFixed(1)} KB`)
|
||
} else {
|
||
console.log(`❌ ${image}: Non trouvée`)
|
||
}
|
||
})
|
||
|
||
// Fonction pour faire une requête HTTP
|
||
function makeRequest(url, options = {}) {
|
||
return new Promise((resolve, reject) => {
|
||
const req = http.request(url, options, (res) => {
|
||
let data = ''
|
||
res.on('data', chunk => data += chunk)
|
||
res.on('end', () => resolve({
|
||
statusCode: res.statusCode,
|
||
headers: res.headers,
|
||
data
|
||
}))
|
||
})
|
||
req.on('error', reject)
|
||
req.setTimeout(10000, () => reject(new Error('Timeout')))
|
||
req.end()
|
||
})
|
||
}
|
||
|
||
// Test de l'interface frontend
|
||
async function testFrontendInterface() {
|
||
console.log('\n🌐 Test de l\'interface frontend...')
|
||
|
||
try {
|
||
const response = await makeRequest('http://localhost:5174')
|
||
if (response.statusCode === 200) {
|
||
console.log('✅ Interface frontend accessible sur http://localhost:5174')
|
||
} else {
|
||
console.log(`❌ Erreur d'accès à l'interface: ${response.statusCode}`)
|
||
return false
|
||
}
|
||
} catch (error) {
|
||
console.log(`❌ Erreur de connexion à l'interface: ${error.message}`)
|
||
return false
|
||
}
|
||
|
||
return true
|
||
}
|
||
|
||
// Test du serveur backend
|
||
async function testBackendServer() {
|
||
console.log('\n🔧 Test du serveur backend...')
|
||
|
||
try {
|
||
const response = await makeRequest('http://localhost:3001/api/health')
|
||
if (response.statusCode === 200) {
|
||
console.log('✅ Serveur backend accessible sur http://localhost:3001')
|
||
console.log(`📊 Réponse: ${response.data}`)
|
||
} else {
|
||
console.log(`❌ Erreur d'accès au backend: ${response.statusCode}`)
|
||
return false
|
||
}
|
||
} catch (error) {
|
||
console.log(`❌ Erreur de connexion au backend: ${error.message}`)
|
||
return false
|
||
}
|
||
|
||
return true
|
||
}
|
||
|
||
// Test d'accès aux images via le serveur
|
||
async function testImageAccess() {
|
||
console.log('\n📸 Test d\'accès aux images...')
|
||
|
||
for (const image of images) {
|
||
try {
|
||
const imageUrl = `http://localhost:5174/test-files/${image}`
|
||
const response = await makeRequest(imageUrl)
|
||
if (response.statusCode === 200) {
|
||
console.log(`✅ ${image}: Accessible via ${imageUrl}`)
|
||
} else {
|
||
console.log(`❌ ${image}: Erreur ${response.statusCode}`)
|
||
}
|
||
} catch (error) {
|
||
console.log(`❌ ${image}: Erreur de connexion - ${error.message}`)
|
||
}
|
||
}
|
||
}
|
||
|
||
// Instructions pour l'analyse manuelle
|
||
function printManualInstructions() {
|
||
console.log('\n📋 INSTRUCTIONS POUR L\'ANALYSE MANUELLE:')
|
||
console.log('=' .repeat(60))
|
||
console.log('1. Ouvrez votre navigateur et allez sur: http://localhost:5174')
|
||
console.log('2. Ouvrez la console développeur (F12)')
|
||
console.log('3. Dans l\'interface, chargez l\'une des images de test:')
|
||
images.forEach((image, index) => {
|
||
console.log(` ${index + 1}. ${image}`)
|
||
})
|
||
console.log('4. Observez les logs d\'extraction dans la console du navigateur')
|
||
console.log('5. Vérifiez les résultats d\'extraction dans l\'interface')
|
||
|
||
console.log('\n🔍 ÉLÉMENTS À RECHERCHER:')
|
||
console.log('=' .repeat(60))
|
||
console.log('• Nom de famille (en MAJUSCULES)')
|
||
console.log('• Prénom(s)')
|
||
console.log('• Numéro de carte d\'identité (format: 2 lettres + 6 chiffres)')
|
||
console.log('• Date de naissance')
|
||
console.log('• Lieu de naissance')
|
||
console.log('• Spécifiquement: "NICOLAS" et "CANTU"')
|
||
|
||
console.log('\n⚙️ CONFIGURATION RECOMMANDÉE:')
|
||
console.log('=' .repeat(60))
|
||
console.log('• Mode sans LLM: VITE_DISABLE_LLM=true')
|
||
console.log('• Extraction par règles: VITE_USE_RULE_NER=true')
|
||
console.log('• Pas de clé API OpenAI requise')
|
||
|
||
console.log('\n📊 LOGS ATTENDUS DANS LA CONSOLE:')
|
||
console.log('=' .repeat(60))
|
||
console.log('🔧 [CONFIG] Mode sans LLM activé: { useRuleNer: true, disableLLM: true, ... }')
|
||
console.log('🚀 [OCR] Début de l\'extraction OCR locale...')
|
||
console.log('⏳ [OCR] Progression: 30%')
|
||
console.log('⏳ [OCR] Progression: 70%')
|
||
console.log('✅ [OCR] Progression: 100% - Extraction terminée')
|
||
console.log('🔍 [NER] Début de l\'extraction par règles...')
|
||
console.log('👥 [RULE-NER] Identités extraites: X')
|
||
console.log('🏠 [RULE-NER] Adresses extraites: X')
|
||
console.log('🆔 [RULE-NER] Numéros CNI détectés: X')
|
||
console.log('📅 [RULE-NER] Dates détectées: X')
|
||
console.log('📋 [RULE-NER] Type détecté: CNI')
|
||
console.log('🚫 [LLM] LLM désactivé - Mode 100% local')
|
||
console.log('✅ [LLM] Progression simulée: 100%')
|
||
console.log('🎉 [FINAL] Extraction complète terminée')
|
||
}
|
||
|
||
// Fonction principale
|
||
async function runTests() {
|
||
console.log('\n🚀 Démarrage des tests...')
|
||
|
||
const frontendOk = await testFrontendInterface()
|
||
const backendOk = await testBackendServer()
|
||
|
||
if (frontendOk && backendOk) {
|
||
await testImageAccess()
|
||
printManualInstructions()
|
||
|
||
console.log('\n🎯 RÉSUMÉ:')
|
||
console.log('=' .repeat(60))
|
||
console.log('✅ Interface frontend: Opérationnelle')
|
||
console.log('✅ Serveur backend: Opérationnel')
|
||
console.log('✅ Images de test: Disponibles')
|
||
console.log('')
|
||
console.log('💡 Pour analyser les images et rechercher CANTU/NICOLAS:')
|
||
console.log(' 1. Ouvrez http://localhost:5174 dans votre navigateur')
|
||
console.log(' 2. Chargez une image de test')
|
||
console.log(' 3. Observez les résultats dans la console et l\'interface')
|
||
console.log('')
|
||
console.log('🔍 Le système est configuré pour détecter:')
|
||
console.log(' • "NICOLAS" avec corrections OCR (N1colas, Nicol@s, etc.)')
|
||
console.log(' • "CANTU" avec corrections OCR (C@ntu, CantU, etc.)')
|
||
console.log(' • Numéros CNI au format 2 lettres + 6 chiffres')
|
||
console.log(' • Type de document CNI')
|
||
|
||
} else {
|
||
console.log('\n❌ PROBLÈMES DÉTECTÉS:')
|
||
console.log('=' .repeat(60))
|
||
if (!frontendOk) {
|
||
console.log('❌ Interface frontend non accessible')
|
||
console.log(' → Vérifiez que le serveur de développement est démarré')
|
||
console.log(' → Commande: npm run dev')
|
||
}
|
||
if (!backendOk) {
|
||
console.log('❌ Serveur backend non accessible')
|
||
console.log(' → Vérifiez que le serveur backend est démarré')
|
||
console.log(' → Commande: node backend/server.js')
|
||
}
|
||
}
|
||
}
|
||
|
||
// Exécuter les tests
|
||
runTests().then(() => {
|
||
console.log('\n🎉 Tests terminés !')
|
||
}).catch(error => {
|
||
console.error('❌ Erreur lors des tests:', error.message)
|
||
process.exit(1)
|
||
})
|