In [2]:
# from IPython.external import mathjax; mathjax.install_mathjax()

In [26]:
import os
import glob
import json
import exiftool
import subprocess
from pprint import pprint
import matplotlib.image as mpimg
from matplotlib.dates import date2num, num2date
from pysurvey.plot import setup, dateticks

In [34]:
DIRNAME = '/Users/ajmendez/tmp/pi/pictures/neon_141107_08'
ET = exiftool.ExifTool()
ET.start()

In [35]:
def exif2(filename):
    cmd = 'exiftool -b -MakerNotes {}'.format(filename).split()
    tmp = subprocess.check_output(cmd)
    tmp = ['"{0[0]}":{0[1]}'.format(x.split('=')) for x in tmp.split()[:8]]
    return json.loads('{%s}'%(','.join(tmp)))

def exif2_batch(filenames):
    return [exif2(filename) for filename in filenames]

def date_batch(filenames):
    return date2num([datetime.datetime.fromtimestamp(int(os.path.getmtime(filename))) for filename in filenames])

def gen_files(dirname):
    for k, filename in enumerate(glob.glob(dirname+'*.jpg')):
        yield k, filename

def get_lightvalue(filenames):
    print filename

    
def get_values():
#     filenames = [filename for k,filename in gen_files(DIRNAME) if k < 10]
    filenames = [filename for k,filename in gen_files(DIRNAME) if k < 100]
    
    dates = date_batch(filenames)
    A = ET.get_metadata_batch(filenames)
    B = exif2_batch(filenames)
    out = {}
    for k, (key,a,b) in enumerate(zip(dates,A,B)):
        a.update(b)
        out[key] = a
        if k % 100 == 0:
            print k
        
    return dates, out
dates, values = get_values()


0
100
200
300

In [49]:
def items(keys, values, item):
    out = []
    for k in keys:
        try:
            out.append(values[k][item])
        except:
            out.append(0)
    return np.array(out)
#     return [values[k][item] for k in keys]

setup(figsize=(18,6))
# pylab.plot(dates, items(dates, values, 'ag'), '.')
for k, item in enumerate(['Composite:LightValue','Composite:ShutterSpeed'],1):
    setup(subplt=(1,3,k))
    pylab.plot(dates, items(dates, values, item), '.')
    dateticks('%Y.%m.%d %H:%M')
setup(subplt=(1,3,k+1))
pylab.plot(dates, items(dates, values, 'Composite:LightValue') - (10-80*items(dates, values, 'Composite:ShutterSpeed')), '.')


Out[49]:
[<matplotlib.lines.Line2D at 0x10a171b10>]

In [33]:
files = ['/Users/ajmendez/tmp/pi/pictures/neon_141107_08.41.53.jpg',
         '/Users/ajmendez/tmp/pi/pictures/neon_141107_08.42.03.jpg']

setup(figsize=(12,6))
for k, f in enumerate(files,1):
    im = mpimg.imread(f)
    md = ET.get_metadata(f)
    md.update(exif2(f))
    setup(subplt=(1,2,k),
          subtitle='Average: {:0.2f}\n Light:{:0.2f}\n Exp:{:0.4f} {:0.2f}'.format(
                    np.mean(im), md['Composite:LightValue'], md['EXIF:ShutterSpeedValue'], md['exp']))
    pylab.imshow(im, origin='upper', interpolation='nearest')
    print os.path.basename(f)
    items = ['Composite:Aperture',
             'Composite:ShutterSpeed',
             'EXIF:BrightnessValue',
             'exp',
             'EXIF:ISO',]
#     pprint(md)
    for item in items:
        print '  ', item, md[item]
#     pprint(md)
#     print exif2(f)


neon_141107_08.41.53.jpg
   Composite:Aperture 2.8984
   Composite:ShutterSpeed 0.021002
   EXIF:BrightnessValue 10.52
   exp 21002
   EXIF:ISO 100
neon_141107_08.42.03.jpg
   Composite:Aperture 2.8984
   Composite:ShutterSpeed 0.020672
   EXIF:BrightnessValue 13.22
   exp 20672
   EXIF:ISO 100

In [ ]:
print len(list(gen_files(DIRNAME)))