- docs/ocr_cni_adresse.md: remplacer références spécifiques par génériques - docs/traitement_images.md: généraliser la description des cas cibles - tests/ocr_cni_adresse.md: tests génériques pour identités - test-web-interface.cjs: interface générique pour détection d\identités
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 des identités 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('• Noms et prénoms extraits du document')
|
||
|
||
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 extraire les identités:')
|
||
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(' • Noms et prénoms avec corrections OCR automatiques')
|
||
console.log(' • Numéros CNI au format 2 lettres + 6 chiffres')
|
||
console.log(' • Type de document CNI')
|
||
console.log(' • Adresses et autres entités')
|
||
} 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)
|
||
})
|