Aller au contenu
Table des matières

RawAnalyser : Des valeurs brutes aux graphiques de diagnostic

RawAnalyser est une ancienne expérience Python pour analyser écrêtage, canaux, gamma et vignettage. Le code expose ses hypothèses d’entrée, dont une taille de trame fixe et des régions choisies dans un fichier JSON.

Application et outils
  • Mis à jour
  • Python · 100%
Composants documentés
2Explorer les modules
Documents source
1Lire les instructions
Langages du dépôtPython 100%1

Parts calculées à partir des octets GitHub Linguist.

Python100%
100%101 536 octets
Langage%Octets
Python100%101 536

1. Aperçu

1.1. Pourquoi il existe

Outil d'analyse de capteur photographique calculant histogrammes d'écrêtage et plage dynamique sur fichiers RAW.

1.2. Cas d’usage

Évaluation de capteurs et calibration d'exposition en photographie computationnelle.

2. Cas d’utilisation

Scripts Python 2 pour l’ajustement de caméras : vérifier écrêtage, gamma et vignettage dans des images brutes Bayer.

Diagramme de cas d’utilisation de RawAnalyser : Marquer ROI et gris neutres; Analyser chaque capture brute; Détecter l’écrêtage; Mesurer gamma et vignettage; Inspecter un pixel; Convertir le brut en TIFFRawAnalyserMarquer ROI et gris neutresAnalyser chaque capture bruteDétecter l’écrêtageMesurer gamma et vignettageInspecter un pixelConvertir le brut en TIFFIngé. qualité d’image«système»Dossier de captures
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
Marquer ROI et gris neutres
Ingé. qualité d’image

GUI.py (PyQt5) ouvre un fichier .raw ou .tiff, convertit le brut en TIFF pour l’affichage et enregistre la zone d’intérêt et les coins des gris cliqués dans json/points.json.

Analyser chaque capture brute
Ingé. qualité d’imageDossier de captures

RawAnalyser.py surveille le dossier donné avec watchdog ; chaque nouveau fichier brut 1928 x 1088 sur 16 bits est séparé en canaux Bayer, enregistré en TIFF puis analysé.

Détecter l’écrêtage
Ingé. qualité d’image

clipping() affiche les niveaux minimum et maximum sur 10 bits par canal et signale en couleur l’écrêtage du noir ou du blanc quand les valeurs atteignent les limites du capteur.

Mesurer gamma et vignettage
Ingé. qualité d’image

gamma() échantillonne les gris de points.json ; vignette() retire le niveau de noir (--bl, 1024 par défaut), divise par une carte .npy de vignettage et écrit un TIFF corrigé.

Inspecter un pixel
Ingé. qualité d’image

RawPixel.py affiche la valeur et la couleur Bayer du pixel x, y selon la largeur, la hauteur et la profondeur données, et vide les canaux dans array/*.txt.

Convertir le brut en TIFF
Ingé. qualité d’imageDossier de captures

Raw2Tiff.py écrit un TIFF à partir d’un fichier brut ; 20MPto5MP.py regroupe les images 20 Mpx de l’OV20880 en additionnant des blocs 2 x 2 de même couleur pour obtenir 5 Mpx.

2.1. Scénario : Vérifier une capture de mire OV2740

  1. Installer Python 2.7 et les paquets de requirements.txt, ainsi que tifffile.
  2. Lancer python GUI.py, ouvrir une capture de raw/ et cliquer la zone d’intérêt et les gris pour mettre à jour json/points.json.
  3. Démarrer python RawAnalyser.py raw json/points.json --func basic --bl 1024 pour surveiller le dossier.
  4. Copier une nouvelle capture .raw dans raw/ ; le script affiche les alertes d’écrêtage et le gamma et écrit un TIFF sous tiff/.
  5. Vérifier un point suspect avec python RawPixel.py <fichier> x y --width 1928 --height 1088.

Fichiers consultésREADME.mdrequirements.txtRawAnalyser.pyGUI.pyRawPixel.pyRaw2Tiff.py20MPto5MP.pyjson/points.json

3. Démarrage

Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.

README.md · Usage
python RawAnalyser.py <pathfolder> <pointfile> --func <clipping,gamma,vignette,histogram,noHist,basic, default all> --bl <black level, default 1024> --vignette <pathvignette>
README.md · Usage
python GUI.py
README.md · Usage
python RawPixel.pt input<file> x y  --bitdepth <8,10,16,default 16>

4. Références du dépôt

Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.

Prérequis et premier essai

4.1. Prerequisites

README.md

You need to have Python 2.7 installed and the following libraries:

  • json
  • time
  • numpy
  • scipy
  • pyqt5
  • argparse
  • argcomplete
  • watchdog
  • logging
  • colorama
  • plotly
  • matplotlib
Lire les instructions complètes ↗
Configuration et utilisation

4.2. Usage

README.md

  1. Run the RawAnalyser script:
  2. Start the GUI:
  3. Check the value of the pixel and the color with the bayer pattern:
Lire les instructions complètes ↗
Documentation source

1 documents lus parmi 1 candidats.

5. Fonctions et composants 2

Surveillance et disposition brute
NewAnalyse réagit à la création d’un fichier, charge les coordonnées et lit des uint16. Le tableau devient une image de 1088 par 1928 pixels, ensuite écrite en TIFF. Ces dimensions sont imposées par le code, pas déduites du fichier.
Régions et canaux
L’analyse construit les matrices de recadrage et de référence grise avant de séparer les canaux par des indices fixes. Les graphiques et statistiques dépendent donc des régions et de la disposition supposée du capteur.

6. Architecture

Ouvrez un composant pour suivre ses connexions, ou explorez le diagramme complet.

Composants du système Contexte
Mermaid Diagramme interactif

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de RawAnalyser
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
flowchart LR
  n0["Trame brute et régions JSON"]
  n1["Événement Watchdog"]
  n2["Tableau uint16 redimensionné"]
  n3["Extraction des régions et canaux"]
  n4["TIFF et graphiques"]
  n0 --> n1
  n1 --> n2
  n2 --> n3
  n3 --> n4
Version texte du diagramme
  • Trame brute et régions JSON → Événement Watchdog
  • Événement Watchdog → Tableau uint16 redimensionné
  • Tableau uint16 redimensionné → Extraction des régions et canaux
  • Extraction des régions et canaux → TIFF et graphiques
Suivre un parcours dans le code

Suivez np.fromfile puis reshape et comparez les limites de recadrage aux boucles de canaux. Un graphique plausible peut rester faux si les dimensions ou la disposition Bayer diffèrent des hypothèses fixes.

7. Dossier technique

Établi à partir du code au commit ff74580 (8 fichiers). Chaque élément vient d’une correspondance de motif dans le code: ouvrez le fichier lié avant de vous y fier.

7.1. Couches et modules

Les dossiers sont classés par couche selon leur nom, de l’interface utilisateur jusqu’à l’accès aux données. Comme le classement repose sur les noms seulement, le diagramme ne dit rien des appels entre couches.

Mermaid Vue en couches
flowchart TB
  subgraph L_core["Source principale"]
    direction TB
    core_0["(root)<br/>6 fichiers"]
  end
Modules et couche principale
ModuleCoucheFichiersTypesExtensions
(root)Source principale63.py

7.2. Modèle C4

Du contexte du système aux déclarations du code. Chaque niveau conserve les limites des sources disponibles.

UML 1 · Contexte du système
1 · Contexte du système

La vue C4 la plus large : qui utilise le projet et sur quels systèmes et stockages externes il s’appuie. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
Person(P_cli, "Utilisateur CLI")
System(SYS, "RawAnalyser", "RawAnalyser est une ancienne expérience Python pour analyser écrêtage…")
Rel(P_cli, SYS, "Utilise")
@enduml
UML 2 · Conteneurs
2 · Conteneurs

Un niveau plus près : les parties qui s’exécutent séparément dans le projet, leur langage principal et le chemin des appels entre elles. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Container>
LAYOUT_LEFT_RIGHT()
Person(P_cli, "Utilisateur CLI")
System_Boundary(SYS, "RawAnalyser") {
  Container(APP, "RawAnalyser", "Python")
}
Rel(P_cli, APP, "Utilise")
@enduml
UML 3 · Composants et couches
3 · Composants et couches

Modules regroupés par couche du code. Les limites indiquent l’organisation, sans affirmer une isolation à l’exécution ni des appels. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "RawAnalyser") {
Boundary(L0, "Source principale", "layer") {
Component(M0_0, "(root)", "Python", "6 fichiers")
}
}
@enduml
UML 4 · Code
4 · Code

Déclarations, champs et méthodes sélectionnés, regroupés par fichier source. Aucun héritage ni appel n’est déduit. Rendu avec uml-mcp.

Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
top to bottom direction
hide empty members
package "RawAnalyser" {
package "GUI.py" as F0 {
class "FormWidget" as T0_0 {
  UI()
  eventFilter()
  getPos()
}
class "MenuFile" as T0_1 {
  Menu()
  showDialog()
}
}
}
@enduml

7.3. Interface publique

Du code extérieur peut utiliser tout ce qui est listé ici. Le projet déclare aussi 3 types publics.

Ligne de commande 12

7.4. Interface privée

Ces noms sont internes selon les conventions du langage: tiret bas initial, private, static ou pub(crate).

Assistant préfixé _
6

7.5. Logique métier

Une fois écartés le code d’interface et les services et entités ci-dessus, ces classes ont le plus de méthodes.

FormWidget Source principale, 3 méthodes
UI, eventFilter, getPos
MenuFile Source principale, 2 méthodes
Menu, showDialog

7.6. Base de données et persistance

7.7. Stack et dépendances

Python requirements.txt 10 à l’exécution

Ouvrir le manifeste

Dépendances externes

10 paquets déclarés (10 à l’exécution, 0 pour le développement) dans requirements.txt.

Tableau des paquets 10
Dépendances externes
PaquetVersionUsageRôleRegistre
numpy—exécutionAnalyse de donnéespypi.org
scipy—exécutionAnalyse de donnéespypi.org
pyqt5—exécutionPython bindings for the Qt cross platform application toolkitpypi.org
argparse—exécutionPython command-line parsing librarypypi.org
argcomplete—exécutionBash tab completion for argparsepypi.org
watchdog—exécutionFilesystem events monitoringpypi.org
logging—exécutionJournalisation et observabilitépypi.org
colorama—exécutionLigne de commandepypi.org
plotly—exécutionGraphiquespypi.org
matplotlib—exécutionGraphiquespypi.org

7.8. Pipeline CI/CD

Aucun pipeline CI/CD dans le dépôt. Le code se construit et se lance à la main, comme décrit plus haut.

7.9. Déploiement

Mermaid Schéma de déploiement
flowchart LR
  repo[("Dépôt GitHub")]
  local["Poste local<br/>Python"]
  repo -->|"cloner et lancer"| local

Le dépôt ne contient ni Dockerfile, ni fichier Compose, ni configuration d’hébergement : le code s’exécute sur le poste qui le clone.

7.10. Supervision

Ce que le code consigne, mesure et expose pour savoir s’il fonctionne.

Rien trouvé pour: Services, Entités, Intégrations externes, Sécurité, Tests automatisés.

8. Types et structure des fichiers

3 types déclarés, dont 3 dans l’aperçu des relations de base.

Diagramme des types
classDiagram
direction TB
class t67aaaf89d49b["MenuFile"] {
  __init__()
  Menu()
  showDialog()
}
class t2831ebc76ef2["FormWidget"] {
  __init__()
  UI()
  eventFilter()
  getPos()
}
class tbf7f85dbbc2d["NewAnalyse"] {
  on_created()
}
class bc56111853d56["QMainWindow"] {
  <<unresolved_base>>
}
bc56111853d56 <|-- t67aaaf89d49b
class b8e0cc8fba905["QWidget"] {
  <<unresolved_base>>
}
b8e0cc8fba905 <|-- t2831ebc76ef2
class b5c54f16f78bf["FileSystemEventHandler"] {
  <<unresolved_base>>
}
b5c54f16f78bf <|-- tbf7f85dbbc2d

Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.

9. Référence

8 / 8 fichiers admissibles lus (65 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.

Ce que couvre l’analyse

Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.

Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.

11. Fichiers à lire 3

12. Glossaire

Dépôt

Les fichiers source, la configuration et l’historique versionné d’un projet.

README

Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.

Dépendance

Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.

Compilation

Les étapes qui transforment les sources et dépendances en programme exécutable ou en livrable distribuable.

13. Références

  1. antoinebou12. (2026, 5 novembre). RawAnalyser. [Software repository] github.com.
  2. antoinebou12. (2026, 5 novembre). RawAnalyser: README. [Repository documentation] github.com.
  3. antoinebou12. (2026, 5 novembre). RawAnalyser.py. [Source file] github.com.
  4. antoinebou12. (2026, 5 novembre). GUI.py. [Source file] github.com.
  5. antoinebou12. (2026, 5 novembre). RawPixel.py. [Source file] github.com.
  6. Boucher, A. (2021, 6 septembre). RawAnalyser. [Project article] antoineboucher.info.
  7. Boucher, A. (2026, 23 octobre). RawAnalyser : Des valeurs brutes aux graphiques de diagnostic. [Project article] antoineboucher.info.

Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.