lib.py 3.3 KB
Newer Older
S
superjom 已提交
1
import pprint
S
superjom 已提交
2
import re
S
superjom 已提交
3
import urllib
S
superjom 已提交
4 5 6 7 8 9
from tempfile import NamedTemporaryFile

import numpy as np
from PIL import Image

import storage
S
superjom 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25


def get_scalar_tags(storage, mode):
    result = {}
    print 'modes', storage.modes()
    for mode in storage.modes():
        result[mode] = {}
        reader = storage.as_mode(mode)
        for tag in reader.tags('scalar'):
            result[mode][tag] = {
                'displayName': reader.scalar(tag).caption(),
                'description': "",
            }
    return result


S
superjom 已提交
26 27 28 29 30 31 32 33 34 35 36 37
def get_scalar(storage, mode, tag):
    reader = storage.as_mode(mode)
    scalar = reader.scalar(tag)

    records = scalar.records()
    ids = scalar.ids()
    timestamps = scalar.timestamps()

    result = zip(timestamps, ids, records)
    return result


S
superjom 已提交
38 39 40 41 42 43 44 45 46 47
def get_image_tags(storage, mode):
    result = {}

    print 'modes', storage.modes()
    for mode in storage.modes():
        reader = storage.as_mode(mode)
        print 'tags', reader.tags('image')
        result[mode] = {}
        for tag in reader.tags('image'):
            image = reader.image(tag)
S
superjom 已提交
48
            if image.num_samples() <= 1:
S
superjom 已提交
49
                result[mode][tag] = {
S
superjom 已提交
50
                    'displayName': image.caption(),
S
superjom 已提交
51 52 53 54 55
                    'description': "",
                    'samples': 1,
                }
            else:
                for i in xrange(image.num_samples()):
S
superjom 已提交
56 57 58
                    caption = tag + '/%d' % i
                    result[mode][caption] = {
                        'displayName': caption,
S
superjom 已提交
59 60 61 62 63 64 65 66 67
                        'description': "",
                        'samples': 1,
                    }
    return result


def get_image_tag_steps(storage, mode, tag):
    # remove suffix '/x'
    res = re.search(r".*/([0-9]+$)", tag)
S
superjom 已提交
68
    sample_index = 0
S
superjom 已提交
69
    origin_tag = tag
S
superjom 已提交
70 71
    if res:
        tag = tag[:tag.rfind('/')]
S
superjom 已提交
72
        sample_index = int(res.groups()[0])
S
superjom 已提交
73 74 75 76

    reader = storage.as_mode(mode)
    image = reader.image(tag)
    res = []
S
superjom 已提交
77

S
superjom 已提交
78 79 80

    for step_index in range(image.num_records()):
        record = image.record(step_index, sample_index)
S
superjom 已提交
81 82 83
        shape = record.shape()
        query = urllib.urlencode({
            'sample': 0,
S
superjom 已提交
84
            'index': step_index,
S
superjom 已提交
85
            'tag': origin_tag,
S
superjom 已提交
86 87
            'run': mode,
        })
S
superjom 已提交
88
        res.append({
S
superjom 已提交
89 90 91 92 93
            'height': shape[0],
            'width': shape[1],
            'step': record.step_id(),
            'wall_time': image.timestamp(step_index),
            'query': query,
S
superjom 已提交
94 95 96 97
        })
    return res


S
superjom 已提交
98
def get_invididual_image(storage, mode, tag, step_index):
S
superjom 已提交
99 100 101 102 103 104 105 106
    reader = storage.as_mode(mode)
    res = re.search(r".*/([0-9]+$)", tag)
    # remove suffix '/x'
    if res:
        offset = int(res.groups()[0])
        tag = tag[:tag.rfind('/')]

    image = reader.image(tag)
S
superjom 已提交
107 108 109
    record = image.record(step_index, offset)

    data = np.array(record.data(), dtype='uint8').reshape(record.shape())
S
superjom 已提交
110 111 112 113 114 115 116 117 118 119 120 121
    tempfile = NamedTemporaryFile(mode='w+b', suffix='.png')
    with Image.fromarray(data) as im:
        im.save(tempfile)
    tempfile.seek(0, 0)
    return tempfile


if __name__ == '__main__':
    reader = storage.StorageReader('./tmp/mock')
    tags = get_image_tags(reader, 'train')

    tags = get_image_tag_steps(reader, 'train', 'layer1/layer2/image0/0')
S
superjom 已提交
122
    pprint.pprint(tags)
S
superjom 已提交
123 124 125

    image = get_invididual_image(reader, "train", 'layer1/layer2/image0/0', 2)
    print image