This commit is contained in:
2026-04-13 23:40:58 +02:00
parent e08597fc72
commit 8cc0c130cd
+173 -2
View File
@@ -1,2 +1,173 @@
# django-test-tube-scanner
django channels redis test tube scanner # 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.
![status](https://img.shields.io/badge/statut-en%20développement-orange)
![platform](https://img.shields.io/badge/plateforme-Raspberry%20Pi%204-red)
![python](https://img.shields.io/badge/python-3.11%2B-blue)
![django](https://img.shields.io/badge/django-4.2%2B-green)
![license](https://img.shields.io/badge/licence-MIT-lightgrey)
---
## Licence
MIT — Projet opensource, développé pour le partage et la reproductibilité scientifique.