annotate transformations/pipeline.py @ 108:a7cd8dd3221c

pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
author boulanni <nicolas_boulanger@hotmail.com>
date Mon, 15 Feb 2010 16:17:48 -0500
parents 95c491bb5662
children 9c45e0071b52
rev   line source
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
1 #!/usr/bin/python
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
2 # coding: utf-8
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
3
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
4 from __future__ import with_statement
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
5
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
6 # This is intended to be run as a GIMP script
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
7 #from gimpfu import *
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
8
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
9 import sys, os, getopt
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
10 import numpy
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
11 import filetensor as ft
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
12 import random
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
13
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
14 # To debug locally, also call with -s 100 (to stop after ~100)
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
15 # (otherwise we allocate all needed memory, might be loonnng and/or crash
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
16 # if, lucky like me, you have an age-old laptop creaking from everywhere)
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
17 DEBUG = False
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
18 DEBUG_X = False
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
19 if DEBUG:
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
20 DEBUG_X = False # Debug under X (pylab.show())
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
21
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
22 DEBUG_IMAGES_PATH = None
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
23 if DEBUG:
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
24 # UNTESTED YET
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
25 # To avoid loading NIST if you don't have it handy
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
26 # (use with debug_images_iterator(), see main())
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
27 # To use NIST, leave as = None
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
28 DEBUG_IMAGES_PATH = None#'/home/francois/Desktop/debug_images'
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
29
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
30 # Directory where to dump images to visualize results
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
31 # (create it, otherwise it'll crash)
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
32 DEBUG_OUTPUT_DIR = 'debug_out'
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
33
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
34 DEFAULT_NIST_PATH = '/data/lisa/data/ift6266h10/train_data.ft'
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
35 DEFAULT_LABEL_PATH = '/data/lisa/data/ift6266h10/train_labels.ft'
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
36 DEFAULT_OCR_PATH = '/data/lisa/data/ocr_breuel/filetensor/unlv-corrected-2010-02-01-shuffled.ft'
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
37 DEFAULT_OCRLABEL_PATH = '/data/lisa/data/ocr_breuel/filetensor/unlv-corrected-2010-02-01-labels-shuffled.ft'
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
38 ARGS_FILE = os.environ['PIPELINE_ARGS_TMPFILE']
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
39
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
40 if DEBUG_X:
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
41 import pylab
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
42 pylab.ion()
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
43
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
44 from PoivreSel import PoivreSel
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
45 from thick import Thick
81
95c491bb5662 add all transformation to pipeline
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 67
diff changeset
46 from BruitGauss import BruitGauss
108
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
47 from DistorsionGauss import DistorsionGauss
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
48 from PermutPixel import PermutPixel
81
95c491bb5662 add all transformation to pipeline
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 67
diff changeset
49 from gimp_script import GIMP1
95c491bb5662 add all transformation to pipeline
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 67
diff changeset
50 from Rature import Rature
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
51 from contrast import Contrast
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
52 from local_elastic_distortions import LocalElasticDistorter
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
53 from slant import Slant
108
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
54 from Occlusion import Occlusion
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
55 from add_background_image import AddBackground
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
56 from affine_transform import AffineTransformation
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
57
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
58 if DEBUG:
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
59 from visualizer import Visualizer
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
60 # Either put the visualizer as in the MODULES_INSTANCES list
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
61 # after each module you want to visualize, or in the
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
62 # AFTER_EACH_MODULE_HOOK list (but not both, it's redundant)
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
63 VISUALIZER = Visualizer(to_dir=DEBUG_OUTPUT_DIR, on_screen=False)
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
64
108
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
65 ###---------------------order of transformation module
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
66 MODULE_INSTANCES = [Slant(),Thick(),AffineTransformation(),LocalElasticDistorter(),GIMP1(),Rature(),Occlusion(), PermutPixel(),DistorsionGauss(),AddBackground(), PoivreSel(), BruitGauss(), Contrast()]
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
67
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
68 # These should have a "after_transform_callback(self, image)" method
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
69 # (called after each call to transform_image in a module)
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
70 AFTER_EACH_MODULE_HOOK = []
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
71 if DEBUG:
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
72 AFTER_EACH_MODULE_HOOK = [VISUALIZER]
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
73
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
74 # These should have a "end_transform_callback(self, final_image" method
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
75 # (called after all modules have been called)
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
76 END_TRANSFORM_HOOK = []
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
77 if DEBUG:
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
78 END_TRANSFORM_HOOK = [VISUALIZER]
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
79
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
80 class Pipeline():
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
81 def __init__(self, modules, num_img, image_size=(32,32)):
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
82 self.modules = modules
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
83 self.num_img = num_img
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
84 self.num_params_stored = 0
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
85 self.image_size = image_size
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
86
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
87 self.init_memory()
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
88
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
89 def init_num_params_stored(self):
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
90 # just a dummy call to regenerate_parameters() to get the
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
91 # real number of params (only those which are stored)
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
92 self.num_params_stored = 0
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
93 for m in self.modules:
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
94 self.num_params_stored += len(m.regenerate_parameters(0.0))
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
95
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
96 def init_memory(self):
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
97 self.init_num_params_stored()
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
98
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
99 total = self.num_img
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
100 num_px = self.image_size[0] * self.image_size[1]
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
101
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
102 self.res_data = numpy.empty((total, num_px), dtype=numpy.uint8)
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
103 # +1 to store complexity
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
104 self.params = numpy.empty((total, self.num_params_stored+1))
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
105 self.res_labels = numpy.empty(total, dtype=numpy.int32)
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
106
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
107 def run(self, img_iterator, complexity_iterator):
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
108 img_size = self.image_size
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
109
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
110 should_hook_after_each = len(AFTER_EACH_MODULE_HOOK) != 0
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
111 should_hook_at_the_end = len(END_TRANSFORM_HOOK) != 0
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
112
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
113 for img_no, (img, label) in enumerate(img_iterator):
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
114 sys.stdout.flush()
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
115 complexity = complexity_iterator.next()
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
116
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
117 global_idx = img_no
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
118
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
119 img = img.reshape(img_size)
15
f6b6c74bb82f Fix the datatypes.
Arnaud Bergeron <abergeron@gmail.com>
parents: 10
diff changeset
120
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
121 param_idx = 1
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
122 # store complexity along with other params
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
123 self.params[global_idx, 0] = complexity
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
124 for mod in self.modules:
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
125 # This used to be done _per batch_,
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
126 # ie. out of the "for img" loop
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
127 p = mod.regenerate_parameters(complexity)
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
128 self.params[global_idx, param_idx:param_idx+len(p)] = p
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
129 param_idx += len(p)
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
130
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
131 img = mod.transform_image(img)
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
132
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
133 if should_hook_after_each:
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
134 for hook in AFTER_EACH_MODULE_HOOK:
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
135 hook.after_transform_callback(img)
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
136
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
137 self.res_data[global_idx] = \
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
138 img.reshape((img_size[0] * img_size[1],))*255
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
139 self.res_labels[global_idx] = label
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
140
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
141 if should_hook_at_the_end:
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
142 for hook in END_TRANSFORM_HOOK:
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
143 hook.end_transform_callback(img)
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
144
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
145 def write_output(self, output_file_path, params_output_file_path, labels_output_file_path):
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
146 with open(output_file_path, 'wb') as f:
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
147 ft.write(f, self.res_data)
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
148
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
149 numpy.save(params_output_file_path, self.params)
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
150
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
151 with open(labels_output_file_path, 'wb') as f:
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
152 ft.write(f, self.res_labels)
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
153
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
154
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
155 ##############################################################################
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
156 # COMPLEXITY ITERATORS
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
157 # They're called once every img, to get the complexity to use for that img
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
158 # they must be infinite (should never throw StopIteration when calling next())
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
159
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
160 # probability of generating 0 complexity, otherwise
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
161 # uniform over 0.0-max_complexity
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
162 def range_complexity_iterator(probability_zero, max_complexity):
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
163 assert max_complexity <= 1.0
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
164 n = numpy.random.uniform(0.0, 1.0)
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
165 while True:
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
166 if n < probability_zero:
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
167 yield 0.0
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
168 else:
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
169 yield numpy.random.uniform(0.0, max_complexity)
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
170
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
171 ##############################################################################
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
172 # DATA ITERATORS
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
173 # They can be used to interleave different data sources etc.
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
174
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
175 '''
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
176 # Following code (DebugImages and iterator) is untested
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
177
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
178 def load_image(filepath):
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
179 _RGB_TO_GRAYSCALE = [0.3, 0.59, 0.11, 0.0]
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
180 img = Image.open(filepath)
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
181 img = numpy.asarray(img)
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
182 if len(img.shape) > 2:
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
183 img = (img * _RGB_TO_GRAYSCALE).sum(axis=2)
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
184 return (img / 255.0).astype('float')
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
185
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
186 class DebugImages():
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
187 def __init__(self, images_dir_path):
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
188 import glob, os.path
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
189 self.filelist = glob.glob(os.path.join(images_dir_path, "*.png"))
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
190
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
191 def debug_images_iterator(debug_images):
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
192 for path in debug_images.filelist:
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
193 yield load_image(path)
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
194 '''
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
195
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
196 class NistData():
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
197 def __init__(self, nist_path, label_path, ocr_path, ocrlabel_path):
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
198 self.train_data = open(nist_path, 'rb')
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
199 self.train_labels = open(label_path, 'rb')
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
200 self.dim = tuple(ft._read_header(self.train_data)[3])
64
1afa95285b9c fixed small bug related to loading the data - should seek back to the beginning of the file
Dumitru Erhan <dumitru.erhan@gmail.com>
parents: 61
diff changeset
201 # in order to seek to the beginning of the file
1afa95285b9c fixed small bug related to loading the data - should seek back to the beginning of the file
Dumitru Erhan <dumitru.erhan@gmail.com>
parents: 61
diff changeset
202 self.train_data.close()
1afa95285b9c fixed small bug related to loading the data - should seek back to the beginning of the file
Dumitru Erhan <dumitru.erhan@gmail.com>
parents: 61
diff changeset
203 self.train_data = open(nist_path, 'rb')
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
204 self.ocr_data = open(ocr_path, 'rb')
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
205 self.ocr_labels = open(ocrlabel_path, 'rb')
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
206
108
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
207 # cet iterator load tout en ram
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
208 def nist_supp_iterator(nist, prob_font, prob_captcha, prob_ocr, num_img):
108
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
209 img = ft.read(nist.train_data)
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
210 labels = ft.read(nist.train_labels)
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
211 if prob_ocr:
108
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
212 ocr_img = ft.read(nist.ocr_data)
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
213 ocr_labels = ft.read(nist.ocr_labels)
64
1afa95285b9c fixed small bug related to loading the data - should seek back to the beginning of the file
Dumitru Erhan <dumitru.erhan@gmail.com>
parents: 61
diff changeset
214
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
215 for i in xrange(num_img):
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
216 r = numpy.random.rand()
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
217 if r <= prob_font:
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
218 pass #get font
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
219 elif r <= prob_font + prob_captcha:
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
220 pass #get captcha
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
221 elif r <= prob_font + prob_captcha + prob_ocr:
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
222 j = numpy.random.randint(len(ocr_labels))
108
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
223 yield ocr_img[j].astype(numpy.float32)/255, ocr_labels[j]
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
224 else:
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
225 j = numpy.random.randint(len(labels))
108
a7cd8dd3221c pipeline.py: placé les modules dans le bon ordre + store NIST en bytes plutôt qu'en float32 dans la RAM
boulanni <nicolas_boulanger@hotmail.com>
parents: 81
diff changeset
226 yield img[j].astype(numpy.float32)/255, labels[j]
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
227
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
228
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
229 # Mostly for debugging, for the moment, just to see if we can
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
230 # reload the images and parameters.
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
231 def reload(output_file_path, params_output_file_path):
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
232 images_ft = open(output_file_path, 'rb')
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
233 images_ft_dim = tuple(ft._read_header(images_ft)[3])
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
234
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
235 print "Images dimensions: ", images_ft_dim
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
236
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
237 params = numpy.load(params_output_file_path)
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
238
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
239 print "Params dimensions: ", params.shape
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
240 print params
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
241
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
242
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
243 ##############################################################################
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
244 # MAIN
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
245
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
246 def usage():
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
247 print '''
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
248 Usage: run_pipeline.sh [-m ...] [-z ...] [-o ...] [-p ...]
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
249 -m, --max-complexity: max complexity to generate for an image
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
250 -z, --probability-zero: probability of using complexity=0 for an image
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
251 -o, --output-file: full path to file to use for output of images
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
252 -p, --params-output-file: path to file to output params to
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
253 -x, --labels-output-file: path to file to output labels to
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
254 -f, --data-file: path to filetensor (.ft) data file (NIST)
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
255 -l, --label-file: path to filetensor (.ft) labels file (NIST labels)
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
256 -c, --ocr-file: path to filetensor (.ft) data file (OCR)
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
257 -d, --ocrlabel-file: path to filetensor (.ft) labels file (OCR labels)
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
258 -a, --prob-font: probability of using a raw font image
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
259 -b, --prob-captcha: probability of using a captcha image
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
260 -e, --prob-ocr: probability of using an ocr image
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
261 '''
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
262
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
263 # See run_pipeline.py
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
264 def get_argv():
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
265 with open(ARGS_FILE) as f:
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
266 args = [l.rstrip() for l in f.readlines()]
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
267 return args
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
268
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
269 # Might be called locally or through dbidispatch. In all cases it should be
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
270 # passed to the GIMP executable to be able to use GIMP filters.
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
271 # Ex:
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
272 def _main():
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
273 #global DEFAULT_NIST_PATH, DEFAULT_LABEL_PATH, DEFAULT_OCR_PATH, DEFAULT_OCRLABEL_PATH
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
274 #global getopt, get_argv
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
275
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
276 max_complexity = 0.5 # default
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
277 probability_zero = 0.1 # default
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
278 output_file_path = None
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
279 params_output_file_path = None
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
280 labels_output_file_path = None
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
281 nist_path = DEFAULT_NIST_PATH
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
282 label_path = DEFAULT_LABEL_PATH
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
283 ocr_path = DEFAULT_OCR_PATH
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
284 ocrlabel_path = DEFAULT_OCRLABEL_PATH
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
285 prob_font = 0.0
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
286 prob_captcha = 0.0
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
287 prob_ocr = 0.0
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
288 stop_after = None
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
289 reload_mode = False
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
290
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
291 try:
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
292 opts, args = getopt.getopt(get_argv(), "rm:z:o:p:x:s:f:l:c:d:a:b:e:", ["reload","max-complexity=", "probability-zero=", "output-file=", "params-output-file=", "labels-output-file=", "stop-after=", "data-file=", "label-file=", "ocr-file=", "ocrlabel-file=", "prob-font=", "prob-captcha=", "prob-ocr="])
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
293 except getopt.GetoptError, err:
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
294 # print help information and exit:
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
295 print str(err) # will print something like "option -a not recognized"
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
296 usage()
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
297 pdb.gimp_quit(0)
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
298 sys.exit(2)
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
299
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
300 for o, a in opts:
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
301 if o in ('-m', '--max-complexity'):
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
302 max_complexity = float(a)
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
303 assert max_complexity >= 0.0 and max_complexity <= 1.0
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
304 elif o in ('-r', '--reload'):
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
305 reload_mode = True
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
306 elif o in ("-z", "--probability-zero"):
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
307 probability_zero = float(a)
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
308 assert probability_zero >= 0.0 and probability_zero <= 1.0
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
309 elif o in ("-o", "--output-file"):
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
310 output_file_path = a
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
311 elif o in ('-p', "--params-output-file"):
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
312 params_output_file_path = a
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
313 elif o in ('-x', "--labels-output-file"):
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
314 labels_output_file_path = a
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
315 elif o in ('-s', "--stop-after"):
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
316 stop_after = int(a)
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
317 elif o in ('-f', "--data-file"):
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
318 nist_path = a
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
319 elif o in ('-l', "--label-file"):
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
320 label_path = a
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
321 elif o in ('-c', "--ocr-file"):
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
322 ocr_path = a
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
323 elif o in ('-d', "--ocrlabel-file"):
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
324 ocrlabel_path = a
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
325 elif o in ('-a', "--prob-font"):
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
326 prob_font = float(a)
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
327 elif o in ('-b', "--prob-captcha"):
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
328 prob_captcha = float(a)
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
329 elif o in ('-e', "--prob-ocr"):
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
330 prob_ocr = float(a)
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
331 else:
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
332 assert False, "unhandled option"
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
333
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
334 if output_file_path == None or params_output_file_path == None or labels_output_file_path == None:
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
335 print "Must specify the three output files."
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
336 usage()
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
337 pdb.gimp_quit(0)
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
338 sys.exit(2)
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
339
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
340 if reload_mode:
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
341 reload(output_file_path, params_output_file_path)
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
342 else:
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
343 if DEBUG_IMAGES_PATH:
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
344 '''
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
345 # This code is yet untested
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
346 debug_images = DebugImages(DEBUG_IMAGES_PATH)
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
347 num_img = len(debug_images.filelist)
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
348 pl = Pipeline(modules=MODULE_INSTANCES, num_img=num_img, image_size=(32,32))
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
349 img_it = debug_images_iterator(debug_images)
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
350 '''
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
351 else:
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
352 nist = NistData(nist_path, label_path, ocr_path, ocrlabel_path)
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
353 num_img = 819200 # 800 Mb file
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
354 if stop_after:
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
355 num_img = stop_after
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
356 pl = Pipeline(modules=MODULE_INSTANCES, num_img=num_img, image_size=(32,32))
67
5e448ea129b3 Ajouté la source (optionnelle) de données OCR Autriche avec une probabilité passée en argument
boulanni <nicolas_boulanger@hotmail.com>
parents: 64
diff changeset
357 img_it = nist_supp_iterator(nist, prob_font, prob_captcha, prob_ocr, num_img)
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
358
50
ff59670cd1f9 Ajouté l'enregistrement de la complexité, et un strict minimum pour reloader les fichiers d'images et de paramètres
fsavard
parents: 48
diff changeset
359 cpx_it = range_complexity_iterator(probability_zero, max_complexity)
61
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
360 pl.run(img_it, cpx_it)
cc4be6b25b8e Data iterator alternating between NIST/font/captcha, removed the use of batches, keep track of labels (Not fully done yet)
boulanni <nicolas_boulanger@hotmail.com>
parents: 52
diff changeset
361 pl.write_output(output_file_path, params_output_file_path, labels_output_file_path)
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
362
48
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
363 _main()
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
364
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
365 if DEBUG_X:
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
366 pylab.ioff()
fabf910467b2 Ajouté des hooks pour visualisation à différentes étapes. On peut dumper la grille d'images pour chaque image transformée ou visualiser live avec pylab.imshow() (pas encore essayé cette façon... j'ai un problème avec GIMP+python sur mon laptop).
fsavard
parents: 41
diff changeset
367 pylab.show()
41
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
368
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
369 pdb.gimp_quit(0)
fdb0e0870fb4 Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP.
fsavard
parents: 15
diff changeset
370