174 lines
5.2 KiB
Markdown
174 lines
5.2 KiB
Markdown
|
||
#  PlanarianScanner
|
||
|
||
> Système d'imagerie automatisé pour le suivi comportemental de planaires —
|
||
> Laboratoire de Biologie, Université Champollion, Albi
|
||
|
||
---
|
||
|
||
## Présentation
|
||
|
||
**PlanarianScanner** est une application web développée pour le suivi de l'activité
|
||
et des mouvements de **planaires** (*Platyhelminthes*) dans le cadre de leur étude
|
||
en laboratoire.
|
||
|
||
Le système pilote un scanner multi-puits motorisé composé d'un bras CNC (GRBL) et
|
||
d'une caméra haute définition ArduCam montée sur Raspberry Pi 4. Il permet
|
||
l'acquisition automatisée d'images sur une grille de **6×4 puits × 4 plaques**,
|
||
le stockage haute performance des captures, et leur export vers des machines
|
||
d'analyse distantes.
|
||
|
||
---
|
||
|
||
## Matériel
|
||
|
||
| Composant | Détail |
|
||
|---|---|
|
||
| Carte | Raspberry Pi 4 |
|
||
| Caméra | ArduCam haute définition |
|
||
| Motorisation | Bras CNC piloté en GRBL |
|
||
| Grille de puits | 6×4 × 4 plaques multi-puits |
|
||
| Réseau | LAN local — export Samba/rsync |
|
||
|
||
---
|
||
|
||
## Stack technique
|
||
|
||
| Couche | Technologie |
|
||
|---|---|
|
||
| Backend | Django + Django Channels |
|
||
| Temps réel | Redis (broker + channel layer) |
|
||
| Acquisition | OpenCV + Picamera2 |
|
||
| Stockage | ReductStore (time series haute performance) |
|
||
| Tâches asynchrones | Celery + django-celery-beat |
|
||
| Export | Samba (CIFS), rsync/SSH |
|
||
| Plateforme | Raspberry Pi 4 — Debian Linux |
|
||
|
||
---
|
||
|
||
## Fonctionnalités
|
||
|
||
- Pilotage du bras CNC en GRBL — déplacement automatique puits par puits
|
||
- Acquisition image haute définition via ArduCam (OpenCV + Picamera2)
|
||
- Stockage des frames en base time série ReductStore
|
||
- Sessions de scan paramétrables (grille complète ou sélection de puits)
|
||
- Export asynchrone (Celery) :
|
||
- Archive ZIP d'images JPEG par session
|
||
- Vidéo MP4 générée depuis les frames capturées
|
||
- Transfert automatique des exports vers machines distantes (Linux / Windows)
|
||
- Planification nocturne des exports via django-celery-beat
|
||
- Interface web temps réel (Django Channels / WebSocket)
|
||
- Suivi de progression des tâches longues par polling
|
||
|
||
---
|
||
|
||
## Architecture
|
||
|
||
```
|
||
Raspberry Pi 4
|
||
├── Django (interface web + API)
|
||
│ ├── Django Channels ←→ Redis (WebSocket temps réel)
|
||
│ └── Celery workers
|
||
│ ├── scanning(session_id) — parcours des puits
|
||
│ ├── export_images_zip() — génération ZIP JPEG
|
||
│ ├── export_video_mp4() — génération MP4 (OpenCV)
|
||
│ └── transfer → /mnt/exports — partage Samba
|
||
│
|
||
├── ArduCam ← Picamera2 / OpenCV — capture HD
|
||
├── CNC GRBL ← Serial — déplacement XY
|
||
└── ReductStore — stockage time série frames
|
||
```
|
||
|
||
---
|
||
|
||
## Installation
|
||
|
||
> Documentation complète à venir.
|
||
|
||
```bash
|
||
git clone https://github.com/votre-repo/planarianscanner.git
|
||
cd planarianscanner
|
||
|
||
python -m venv .venv
|
||
source .venv/bin/activate
|
||
pip install -r requirements.txt
|
||
|
||
cp .env.example .env
|
||
# Éditer .env : SECRET_KEY, REDIS_URL, REDUCTSTORE_URL, ...
|
||
|
||
python manage.py migrate
|
||
python manage.py createsuperuser
|
||
```
|
||
|
||
Démarrage des services :
|
||
|
||
```bash
|
||
# Django + Channels
|
||
python manage.py runserver
|
||
|
||
# Worker Celery
|
||
celery -A planarianscanner worker -l info
|
||
|
||
# Scheduler (exports nocturnes)
|
||
celery -A planarianscanner beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
|
||
|
||
# Redis (si non géré par systemd)
|
||
redis-server
|
||
```
|
||
|
||
---
|
||
|
||
## Organisation du dépôt
|
||
|
||
```
|
||
planarianscanner/
|
||
├── cameras/ # App principale
|
||
│ ├── models.py # ExportSession, ScanningStatus
|
||
│ ├── tasks/
|
||
│ │ ├── export_tasks.py # export_images_zip, export_video_mp4
|
||
│ │ ├── scanning_tasks.py # scanning, on_scanning_done
|
||
│ │ └── transfer_tasks.py # copy vers Samba
|
||
│ ├── consumers.py # WebSocket Channels
|
||
│ └── views.py
|
||
├── cnc/ # Pilotage GRBL
|
||
├── logs/ # Logs Celery (rotation auto)
|
||
├── media/exports/ # Fichiers exportés temporaires
|
||
└── requirements.txt
|
||
```
|
||
|
||
---
|
||
|
||
## Contexte scientifique
|
||
|
||
Les **planaires** sont des vers plats dotés de remarquables capacités de
|
||
régénération et d'un système nerveux primitif faisant l'objet de nombreuses
|
||
recherches en neurobiologie et biologie du développement.
|
||
|
||
Ce système d'imagerie automatisé permet d'observer et d'enregistrer leur
|
||
comportement (déplacements, réponses à des stimuli) sur de longues périodes,
|
||
pour un grand nombre d'individus en parallèle, sans intervention humaine.
|
||
|
||
---
|
||
|
||
## Laboratoire
|
||
|
||
Développé pour le **Laboratoire de Biologie de l'Université Champollion**, Albi.
|
||
|
||
---
|
||
|
||
## Statut
|
||
|
||
> Documentation détaillée et guides d'installation complets à venir prochainement.
|
||
|
||

|
||

|
||

|
||

|
||

|
||
|
||
---
|
||
|
||
## Licence
|
||
|
||
MIT — Projet opensource, développé pour le partage et la reproductibilité scientifique.
|