Skip to content

Commit d70191e

Browse files
committed
initialize commit
1 parent 8603e24 commit d70191e

File tree

2,761 files changed

+56764
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,761 files changed

+56764
-0
lines changed

camera_triangulation/Cargo.lock

Lines changed: 1859 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

camera_triangulation/Cargo.toml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
[package]
2+
name = "camera_triangulation"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# Définir les binaires
7+
[[bin]]
8+
name = "console"
9+
path = "src/main.rs"
10+
11+
[[bin]]
12+
name = "gui"
13+
path = "src/main_gui.rs"
14+
15+
[dependencies]
16+
# Pour les calculs mathématiques
17+
nalgebra = "0.32"
18+
# Pour les calculs géométriques
19+
cgmath = "0.18"
20+
# Pour la sérialisation des données
21+
serde = { version = "1.0", features = ["derive"] }
22+
serde_json = "1.0"
23+
# Pour les logs et debugging
24+
log = "0.4"
25+
env_logger = "0.11"
26+
# Interface graphique et caméra
27+
macroquad = "0.4"
28+
# Accès caméra (optionnel)
29+
nokhwa = { version = "0.10", features = ["input-native"] }
30+
31+
# OpenCV est optionnel - commenté pour éviter les problèmes d'installation
32+
# opencv = { version = "0.91", optional = true }
33+
34+
[features]
35+
default = []
36+
opencv_support = ["opencv"]
37+
38+
# Dépendance OpenCV optionnelle
39+
[dependencies.opencv]
40+
version = "0.91"
41+
optional = true

camera_triangulation/README.md

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# 🎯 Système de Triangulation par Caméra en Rust
2+
3+
Ce projet utilise la vision par ordinateur pour détecter des objets via votre caméra et calculer leur position 3D dans l'espace en utilisant des techniques de triangulation.
4+
5+
## 🚀 Fonctionnalités
6+
7+
- **Détection d'objets en temps réel** via votre webcam
8+
- **Calcul de triangulation** pour estimer la position 3D des objets
9+
- **Estimation de distance** basée sur la taille apparente des objets
10+
- **Interface visuelle** avec OpenCV
11+
- **Calculs géométriques** avec nalgebra
12+
13+
## 📋 Prérequis
14+
15+
### Windows
16+
```powershell
17+
# Installer OpenCV
18+
# Télécharger depuis: https://opencv.org/releases/
19+
# Ou utiliser vcpkg:
20+
vcpkg install opencv4[contrib,nonfree]
21+
22+
# Variables d'environnement à définir:
23+
# OPENCV_LINK_LIBS=opencv_world4xx
24+
# OPENCV_LINK_PATHS=C:\path\to\opencv\build\x64\vc16\lib
25+
# OPENCV_INCLUDE_PATHS=C:\path\to\opencv\build\include
26+
```
27+
28+
### Linux (Ubuntu/Debian)
29+
```bash
30+
sudo apt update
31+
sudo apt install libopencv-dev clang libclang-dev
32+
```
33+
34+
### macOS
35+
```bash
36+
brew install opencv
37+
```
38+
39+
## 🔧 Installation
40+
41+
1. **Cloner et compiler:**
42+
```bash
43+
cd camera_triangulation
44+
cargo build --release
45+
```
46+
47+
2. **Télécharger les fichiers de classification Haar (optionnel):**
48+
```bash
49+
# Pour la détection de visages
50+
wget https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_alt.xml
51+
```
52+
53+
## 🎮 Utilisation
54+
55+
```bash
56+
cargo run
57+
```
58+
59+
### Contrôles:
60+
- **'q'** : Quitter l'application
61+
- **'c'** : Calibrer la caméra (à implémenter)
62+
63+
## 🧮 Comment fonctionne la triangulation ?
64+
65+
### 1. **Détection d'objets:**
66+
- Utilise les cascades Haar pour détecter les visages
67+
- Détecte les contours pour d'autres objets
68+
- Calcule le centre et la taille de chaque objet
69+
70+
### 2. **Conversion pixel → monde:**
71+
```rust
72+
// Coordonnées normalisées
73+
let x_norm = (u - cx) / focal_length;
74+
let y_norm = (v - cy) / focal_length;
75+
76+
// Position 3D
77+
let x_world = x_norm * distance;
78+
let y_world = y_norm * distance;
79+
let z_world = distance;
80+
```
81+
82+
### 3. **Estimation de distance:**
83+
```rust
84+
// Basée sur la taille apparente vs taille réelle
85+
let distance = (taille_reelle * focal_length) / taille_pixels;
86+
```
87+
88+
## ⚙️ Configuration de la caméra
89+
90+
Modifiez les paramètres dans `CameraParameters`:
91+
92+
```rust
93+
let camera_params = CameraParameters {
94+
focal_length: 500.0, // À calibrer pour votre caméra
95+
principal_point: (320.0, 240.0), // Centre de l'image
96+
camera_height: 1.5, // Hauteur de montage (mètres)
97+
tilt_angle: 0.0, // Inclinaison (radians)
98+
// ...
99+
};
100+
```
101+
102+
## 🎯 Calibrage de caméra
103+
104+
Pour une précision optimale, calibrez votre caméra:
105+
106+
1. **Utilisez un échiquier de calibrage**
107+
2. **Calculez la matrice intrinsèque**
108+
3. **Mesurez la hauteur de montage**
109+
4. **Ajustez les paramètres dans le code**
110+
111+
## 📊 Sortie
112+
113+
Le système affiche:
114+
- **Position 3D** de chaque objet (x, y, z en mètres)
115+
- **Distance** de la caméra
116+
- **Taille estimée** de l'objet
117+
- **Visualisation temps réel** avec rectangles de détection
118+
119+
## 🔍 Exemples de résultats
120+
121+
```
122+
📊 Résultats de triangulation (Frame 30):
123+
Objet 0: Position 3D = (0.15, -0.20, 2.50)m, Distance = 2.50m
124+
Objet 1: Position 3D = (-0.30, 0.10, 1.80)m, Distance = 1.80m
125+
```
126+
127+
## 🚨 Dépannage
128+
129+
### Erreur "Impossible d'ouvrir la caméra"
130+
- Vérifiez qu'une caméra est connectée
131+
- Fermez les autres applications utilisant la caméra
132+
- Essayez de changer l'index de caméra (0, 1, 2...)
133+
134+
### Erreur de compilation OpenCV
135+
- Vérifiez l'installation d'OpenCV
136+
- Définissez les variables d'environnement
137+
- Utilisez `pkg-config --libs opencv4` sur Linux
138+
139+
### Détection imprécise
140+
- Calibrez votre caméra
141+
- Ajustez les paramètres de détection
142+
- Améliorez l'éclairage
143+
- Modifiez les seuils de détection
144+
145+
## 🔄 Améliorations possibles
146+
147+
- [ ] Calibrage automatique de caméra
148+
- [ ] Détection d'objets par deep learning (YOLO)
149+
- [ ] Tracking d'objets entre frames
150+
- [ ] Filtrage Kalman pour lisser les positions
151+
- [ ] Sauvegarde des données de triangulation
152+
- [ ] Interface graphique avancée
153+
- [ ] Support multi-caméras (stéréovision)
154+
- [ ] Détection de profondeur par stéréovision
155+
156+
## 📚 Ressources
157+
158+
- [Documentation OpenCV-Rust](https://docs.rs/opencv/)
159+
- [Tutoriel calibrage caméra](https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html)
160+
- [Triangulation en vision par ordinateur](https://en.wikipedia.org/wiki/Triangulation_(computer_vision))
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# 🎯 Simulateur de Triangulation par Caméra
2+
3+
**Version simplifiée sans OpenCV - Prêt à l'emploi sur Windows !**
4+
5+
## ✅ Ce qui fonctionne maintenant
6+
7+
-**Compilation réussie** sans dépendances complexes
8+
-**Simulation de détection d'objets** avec données réalistes
9+
-**Calculs de triangulation** mathématiquement corrects
10+
-**Affichage interactif** en console avec tableaux formatés
11+
-**Mouvement simulé** des objets détectés
12+
13+
## 🚀 Comment utiliser
14+
15+
```powershell
16+
# Dans le dossier camera_triangulation
17+
cargo run
18+
```
19+
20+
### Interface utilisateur :
21+
- **Enter** : Frame suivante
22+
- **q + Enter** : Quitter le programme
23+
24+
## 📊 Exemple de sortie
25+
26+
```
27+
📊 Résultats de triangulation (Frame 1):
28+
┌─────────┬──────────────────────────────┬────────────┬─────────────────────────┐
29+
│ Objet │ Position 3D (x, y, z) │ Distance │ Qualité │
30+
├─────────┼──────────────────────────────┼────────────┼─────────────────────────┤
31+
│ 0 │ (-0.75, -1.93, 1.56)m │ 1.56m │ 68.2% ( Bon) │
32+
│ 1 │ ( 1.04, -1.81, 1.87)m │ 1.87m │ 59.4% ( Bon) │
33+
│ 2 │ ( 0.00, -0.71, 0.63)m │ 0.63m │ 91.3% (Excellent) │
34+
└─────────┴──────────────────────────────┴────────────┴─────────────────────────┘
35+
36+
🎯 Objets détectés:
37+
Visage - Position: (200, 180)px, Taille: 80x100px, Confiance: 85.0%
38+
Visage - Position: (450, 200)px, Taille: 60x80px, Confiance: 75.0%
39+
Objet - Position: (320, 350)px, Taille: 120x40px, Confiance: 60.0%
40+
```
41+
42+
## 🧮 Fonctionnalités techniques
43+
44+
### Détection simulée
45+
- 3 objets avec mouvement réaliste
46+
- Variation de taille et position
47+
- Types d'objets : Visages et objets génériques
48+
49+
### Calculs de triangulation
50+
- **Distance par taille apparente** : `distance = (taille_réelle × focale) / taille_pixels`
51+
- **Position 3D** : Conversion pixel → rayon 3D → coordonnées monde
52+
- **Qualité de triangulation** : Score basé sur taille, position et distance
53+
54+
### Mathématiques avancées
55+
- Matrice de caméra intrinsèque
56+
- Correction de hauteur et inclinaison
57+
- Estimation de taille 3D des objets
58+
59+
## 🎯 Concepts démontrés
60+
61+
1. **Vision par ordinateur** sans OpenCV
62+
2. **Géométrie 3D** avec nalgebra
63+
3. **Triangulation monoculaire** par taille apparente
64+
4. **Interface utilisateur** interactive en console
65+
5. **Simulation réaliste** de données de caméra
66+
67+
## ⚙️ Configuration
68+
69+
Modifiez les paramètres dans `main.rs` :
70+
71+
```rust
72+
let camera_params = CameraParameters {
73+
focal_length: 500.0, // Distance focale (pixels)
74+
principal_point: (320.0, 240.0), // Centre image
75+
camera_height: 1.5, // Hauteur caméra (mètres)
76+
tilt_angle: 0.0, // Inclinaison (radians)
77+
// ...
78+
};
79+
```
80+
81+
## 🔄 Extensions possibles
82+
83+
Pour transformer ce simulateur en système réel :
84+
85+
1. **Ajouter OpenCV** pour vraie détection de caméra
86+
2. **Intégrer YOLO** pour détection d'objets avancée
87+
3. **Stéréovision** avec deux caméras
88+
4. **Interface graphique** avec egui ou tauri
89+
5. **Sauvegarde des données** en JSON
90+
6. **Calibrage automatique** de caméra
91+
92+
## 🚨 Dépannage
93+
94+
### Le programme ne compile pas
95+
```powershell
96+
cargo clean
97+
cargo build
98+
```
99+
100+
### Les calculs semblent incorrects
101+
- Vérifiez les paramètres de caméra
102+
- Ajustez les tailles réelles des objets
103+
- Modifiez la distance focale
104+
105+
## 📚 Apprentissage
106+
107+
Ce projet démontre :
108+
- **Ownership Rust** avec structures complexes
109+
- **Mathématiques 3D** appliquées
110+
- **Modules et organisation** du code
111+
- **Gestion d'erreurs** avec `Result<T, E>`
112+
- **Simulation vs réalité** en vision par ordinateur
113+
114+
**Félicitations ! Vous avez un système de triangulation fonctionnel ! 🎉**

0 commit comments

Comments
 (0)