annotate data_generation/pipeline/pipeline.py @ 509:860c755ddcff

argh, sorry about that
author Dumitru Erhan <dumitru.erhan@gmail.com>
date Tue, 01 Jun 2010 10:58:15 -0700
parents 6d16a2bf142b
children
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
183
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
11 import ift6266.data_generation.transformations.filetensor as ft
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
12 import random
254
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
13 import copy
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
14
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
15 # 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
16 # (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
17 # 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
18 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
19 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
20 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
21 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
22
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
23 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
24 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
25 # 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
26 # 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
27 # (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
28 # 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
29 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
30
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 # 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
32 # (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
33 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
34
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
35 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
36 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
37 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
38 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
39 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
40
156
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
41 # PARSE COMMAND LINE ARGUMENTS
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
42 def get_argv():
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
43 with open(ARGS_FILE) as f:
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
44 args = [l.rstrip() for l in f.readlines()]
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
45 return args
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
46
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
47 def usage():
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
48 print '''
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
49 Usage: run_pipeline.sh [-m ...] [-z ...] [-o ...] [-p ...]
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
50 -m, --max-complexity: max complexity to generate for an image
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
51 -z, --probability-zero: probability of using complexity=0 for an image
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
52 -o, --output-file: full path to file to use for output of images
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
53 -p, --params-output-file: path to file to output params to
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
54 -x, --labels-output-file: path to file to output labels to
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
55 -f, --data-file: path to filetensor (.ft) data file (NIST)
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
56 -l, --label-file: path to filetensor (.ft) labels file (NIST labels)
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
57 -c, --ocr-file: path to filetensor (.ft) data file (OCR)
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
58 -d, --ocrlabel-file: path to filetensor (.ft) labels file (OCR labels)
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
59 -a, --prob-font: probability of using a raw font image
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
60 -b, --prob-captcha: probability of using a captcha image
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
61 -g, --prob-ocr: probability of using an ocr image
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
62 -y, --seed: the job seed
254
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
63 -t, --type: [default: 0:full transformations], 1:Nist-friendly transformations
156
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
64 '''
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
65
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
66 try:
261
6d16a2bf142b important bug fix in pipeline corresponding to an iterator always giving 0 complexity, need to redo 10% of the P07 dataset
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 254
diff changeset
67 opts, args = getopt.getopt(get_argv(), "r:m:z:o:p:x:s:f:l:c:d:a:b:g:y:t:", ["reload","max-complexity=", "probability-zero=", "output-file=", "params-output-file=", "labels-output-file=",
6d16a2bf142b important bug fix in pipeline corresponding to an iterator always giving 0 complexity, need to redo 10% of the P07 dataset
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 254
diff changeset
68 "stop-after=", "data-file=", "label-file=", "ocr-file=", "ocrlabel-file=", "prob-font=", "prob-captcha=", "prob-ocr=", "seed=","type="])
156
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
69 except getopt.GetoptError, err:
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
70 # print help information and exit:
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
71 print str(err) # will print something like "option -a not recognized"
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
72 usage()
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
73 pdb.gimp_quit(0)
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
74 sys.exit(2)
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
75
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
76 for o, a in opts:
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
77 if o in ('-y','--seed'):
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
78 random.seed(int(a))
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
79 numpy.random.seed(int(a))
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
80
261
6d16a2bf142b important bug fix in pipeline corresponding to an iterator always giving 0 complexity, need to redo 10% of the P07 dataset
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 254
diff changeset
81 type_pipeline = 0
254
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
82 for o, a in opts:
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
83 if o in ('-t','--type'):
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
84 type_pipeline = int(a)
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
85
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
86 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
87 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
88 pylab.ion()
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
89
183
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
90 from ift6266.data_generation.transformations.PoivreSel import PoivreSel
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
91 from ift6266.data_generation.transformations.thick import Thick
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
92 from ift6266.data_generation.transformations.BruitGauss import BruitGauss
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
93 from ift6266.data_generation.transformations.DistorsionGauss import DistorsionGauss
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
94 from ift6266.data_generation.transformations.PermutPixel import PermutPixel
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
95 from ift6266.data_generation.transformations.gimp_script import GIMP1
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
96 from ift6266.data_generation.transformations.Rature import Rature
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
97 from ift6266.data_generation.transformations.contrast import Contrast
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
98 from ift6266.data_generation.transformations.local_elastic_distortions import LocalElasticDistorter
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
99 from ift6266.data_generation.transformations.slant import Slant
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
100 from ift6266.data_generation.transformations.Occlusion import Occlusion
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
101 from ift6266.data_generation.transformations.add_background_image import AddBackground
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
102 from ift6266.data_generation.transformations.affine_transform import AffineTransformation
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
103 from ift6266.data_generation.transformations.ttf2jpg import ttf2jpg
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
104 from ift6266.data_generation.transformations.pycaptcha.Facade import generateCaptcha
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
105
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
106 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
107 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
108 # 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
109 # 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
110 # 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
111 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
112
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
113 ###---------------------order of transformation module
254
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
114 if type_pipeline == 0:
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
115 MODULE_INSTANCES = [Slant(),Thick(),AffineTransformation(),LocalElasticDistorter(),GIMP1(),Rature(),Occlusion(), PermutPixel(),DistorsionGauss(),AddBackground(), PoivreSel(), BruitGauss(), Contrast()]
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
116 stop_idx = 0
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
117 if type_pipeline == 1:
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
118 MODULE_INSTANCES = [Slant(),Thick(),AffineTransformation(),LocalElasticDistorter(),GIMP1(False),Rature(),Occlusion(), PermutPixel(),DistorsionGauss(),AddBackground(), PoivreSel(), BruitGauss(), Contrast()]
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
119 stop_idx = 5
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
120 #we disable transformation corresponding to MODULE_INSTANCES[stop_idx:] but we still need to apply them on dummy images
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
121 #in order to be sure to have the same random generator state than with the default pipeline.
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
122 #This is not optimal (we do more calculus than necessary) but it is a quick hack to produce similar results than previous generation
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
123
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
124
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
125
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
126 # 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
127 # (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
128 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
129 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
130 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
131
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
132 # 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
133 # (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
134 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
135 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
136 END_TRANSFORM_HOOK = [VISUALIZER]
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
137
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
138 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
139 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
140 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
141 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
142 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
143 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
144
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
145 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
146
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 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
148 # 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
149 # 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
150 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
151 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
152 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
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 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
155 self.init_num_params_stored()
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
156
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 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
158 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
159
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
160 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
161 # +1 to store complexity
115
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
162 self.params = numpy.empty((total, self.num_params_stored+len(self.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
163 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
164
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
165 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
166 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
167
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
168 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
169 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
170
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
171 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
172 sys.stdout.flush()
115
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
173
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
174 global_idx = img_no
254
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
175
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
176 img = img.reshape(img_size)
15
f6b6c74bb82f Fix the datatypes.
Arnaud Bergeron <abergeron@gmail.com>
parents: 10
diff changeset
177
115
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
178 param_idx = 0
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
179 mod_idx = 0
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
180 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
181 # This used to be done _per batch_,
115
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
182 # ie. out of the "for img" loop
261
6d16a2bf142b important bug fix in pipeline corresponding to an iterator always giving 0 complexity, need to redo 10% of the P07 dataset
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 254
diff changeset
183 complexity = complexity_iterator.next()
115
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
184 #better to do a complexity sampling for each transformations in order to have more variability
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
185 #otherwise a lot of images similar to the source are generated (i.e. when complexity is close to 0 (1/8 of the time))
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
186 #we need to save the complexity of each transformations and the sum of these complexity is a good indicator of the overall
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
187 #complexity
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
188 self.params[global_idx, mod_idx] = complexity
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
189 mod_idx += 1
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
190
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
191 p = mod.regenerate_parameters(complexity)
115
b84a0d009af8 changes on pipeline mecanism: we now sample a different complexity for each transformations, this because when we use the same sampled complexity for all the modules 1/8 of the time we are close to 0 and we obtain an image very close to the source, we now save a complexity for each module in the parameters array
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 109
diff changeset
192 self.params[global_idx, param_idx+len(self.modules):param_idx+len(p)+len(self.modules)] = 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
193 param_idx += len(p)
254
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
194
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
195 if not(stop_idx) or stop_idx > mod_idx:
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
196 img = mod.transform_image(img)
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
197 else:
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
198 tmp = mod.transform_image(copy.copy(img))
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
199 #this is done to be sure to have the same global random generator state
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
200 #we don't apply the transformation on the original image but on a copy in case of in-place transformations
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
201
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
202 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
203 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
204 hook.after_transform_callback(img)
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
205
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
206 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
207 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
208 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
209
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
210 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
211 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
212 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
213
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
214 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
215 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
216 ft.write(f, self.res_data)
261
6d16a2bf142b important bug fix in pipeline corresponding to an iterator always giving 0 complexity, need to redo 10% of the P07 dataset
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 254
diff changeset
217
6d16a2bf142b important bug fix in pipeline corresponding to an iterator always giving 0 complexity, need to redo 10% of the P07 dataset
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 254
diff changeset
218 #if type_pipeline == 0: #only needed for type 0 pipeline
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
219 numpy.save(params_output_file_path, self.params)
261
6d16a2bf142b important bug fix in pipeline corresponding to an iterator always giving 0 complexity, need to redo 10% of the P07 dataset
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 254
diff changeset
220
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
221 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
222 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
223
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
224
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
225 ##############################################################################
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
226 # 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
227 # 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
228 # 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
229
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
230 # 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
231 # 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
232 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
233 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
234 n = numpy.random.uniform(0.0, 1.0)
261
6d16a2bf142b important bug fix in pipeline corresponding to an iterator always giving 0 complexity, need to redo 10% of the P07 dataset
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 254
diff changeset
235 n = 2.0 #hack to bug fix, having a min complexity is not necessary and we need the same seed...
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
236 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
237 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
238 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
239 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
240 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
241
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 # 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
244 # 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
245
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
246 '''
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
247 # 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
248
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
249 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
250 _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
251 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
252 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
253 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
254 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
255 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
256
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
257 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
258 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
259 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
260 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
261
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
262 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
263 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
264 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
265 '''
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
266
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
267 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
268 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
269 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
270 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
271 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
272 # 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
273 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
274 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
275 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
276 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
277
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
278 # 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
279 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
280 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
281 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
282 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
283 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
284 ocr_labels = ft.read(nist.ocr_labels)
109
9c45e0071b52 Adapté le générateur d'images de fontes pour utiliser en amont du pipeline
boulanni <nicolas_boulanger@hotmail.com>
parents: 108
diff changeset
285 ttf = ttf2jpg()
128
ccce06590e64 Added captcha support in pipeline.py
boulanni <nicolas_boulanger@hotmail.com>
parents: 116
diff changeset
286 L = [chr(ord('0')+x) for x in range(10)] + [chr(ord('A')+x) for x in range(26)] + [chr(ord('a')+x) for x in range(26)]
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
287
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
288 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
289 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
290 if r <= prob_font:
109
9c45e0071b52 Adapté le générateur d'images de fontes pour utiliser en amont du pipeline
boulanni <nicolas_boulanger@hotmail.com>
parents: 108
diff changeset
291 yield ttf.generate_image()
134
4981c729149c Fixed various bugs in pipeline for Python 2.5 support
boulanni <nicolas_boulanger@hotmail.com>
parents: 128
diff changeset
292 elif r <=prob_font + prob_captcha:
128
ccce06590e64 Added captcha support in pipeline.py
boulanni <nicolas_boulanger@hotmail.com>
parents: 116
diff changeset
293 (arr, charac) = generateCaptcha(0,1)
134
4981c729149c Fixed various bugs in pipeline for Python 2.5 support
boulanni <nicolas_boulanger@hotmail.com>
parents: 128
diff changeset
294 yield arr.astype(numpy.float32)/255, L.index(charac[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
295 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
296 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
297 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
298 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
299 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
300 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
301
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
302
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
303 # 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
304 # 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
305 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
306 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
307 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
308
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
309 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
310
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
311 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
312
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
313 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
314 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
315
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
316
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
317 ##############################################################################
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
318 # 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
319
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
320
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
321 # 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
322 # 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
323 # 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
324 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
325 #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
326 #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
327
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
328 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
329 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
330 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
331 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
332 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
333 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
334 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
335 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
336 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
337 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
338 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
339 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
340 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
341 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
342
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
343 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
344 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
345 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
346 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
347 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
348 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
349 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
350 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
351 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
352 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
353 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
354 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
355 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
356 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
357 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
358 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
359 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
360 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
361 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
362 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
363 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
364 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
365 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
366 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
367 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
368 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
369 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
370 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
371 prob_captcha = float(a)
134
4981c729149c Fixed various bugs in pipeline for Python 2.5 support
boulanni <nicolas_boulanger@hotmail.com>
parents: 128
diff changeset
372 elif o in ('-g', "--prob-ocr"):
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
373 prob_ocr = float(a)
156
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
374 elif o in ('-y', "--seed"):
6f3b866c0182 On peut maintenant launcher le pipeline avec un seed donné, résultats déterministes
boulanni <nicolas_boulanger@hotmail.com>
parents: 134
diff changeset
375 pass
254
dd2df78fcf47 added option to pipeline and gimp_script to produce NIST-friendly data
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 183
diff changeset
376 elif o in ('-t', "--type"):
261
6d16a2bf142b important bug fix in pipeline corresponding to an iterator always giving 0 complexity, need to redo 10% of the P07 dataset
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 254
diff changeset
377 pass
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
378 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
379 assert False, "unhandled option"
10
faacc76d21c2 Basic new pipeline script for the images tranforms
Arnaud Bergeron <abergeron@gmail.com>
parents:
diff changeset
380
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
381 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
382 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
383 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
384 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
385 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
386
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
387 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
388 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
389 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
390 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
391 '''
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
392 # 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
393 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
394 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
395 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
396 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
397 '''
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
398 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
399 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
400 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
401 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
402 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
403 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
404 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
405
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
406 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
407 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
408 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
409
183
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
410 try:
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
411 _main()
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
412 except:
992ca8035a4d Adapted pipeline to new directory structure
boulanni <nicolas_boulanger@hotmail.com>
parents: 171
diff changeset
413 print "Unexpected error"
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
414
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
415 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
416 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
417 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
418
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
419 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
420