Mercurial > code > home > repos > light9
comparison bin/captureDevice @ 1585:17da56a3c8df
group device captures into sessions, limit solver to specific ones
Ignore-this: b91d858ebb435973b9742bed00567ffd
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Tue, 30 May 2017 08:37:25 +0000 |
parents | 2239d5648932 |
children | 9fe3052f8ced |
comparison
equal
deleted
inserted
replaced
1584:2239d5648932 | 1585:17da56a3c8df |
---|---|
13 from greplin import scales | 13 from greplin import scales |
14 | 14 |
15 from run_local import log | 15 from run_local import log |
16 from lib.cycloneerr import PrettyErrorHandler | 16 from lib.cycloneerr import PrettyErrorHandler |
17 | 17 |
18 from light9.namespaces import L9 | 18 from light9.namespaces import L9, RDF |
19 from light9 import networking, showconfig | 19 from light9 import networking, showconfig |
20 from light9.rdfdb.syncedgraph import SyncedGraph | 20 from light9.rdfdb.syncedgraph import SyncedGraph |
21 from light9.paint.capture import writeCaptureDescription | 21 from light9.paint.capture import writeCaptureDescription |
22 from light9.greplin_cyclone import StatsForCyclone | 22 from light9.greplin_cyclone import StatsForCyclone |
23 from light9.effect.settings import DeviceSettings | 23 from light9.effect.settings import DeviceSettings |
24 from light9.effect.sequencer import sendToCollector | 24 from light9.effect.sequencer import sendToCollector |
25 from light9.rdfdb.patch import Patch | |
25 | 26 |
26 stats = scales.collection('/webServer', scales.PmfStat('setAttr')) | 27 stats = scales.collection('/webServer', scales.PmfStat('setAttr')) |
27 | |
28 | 28 |
29 class Camera(object): | 29 class Camera(object): |
30 def __init__(self, imageUrl): | 30 def __init__(self, imageUrl): |
31 self.imageUrl = imageUrl | 31 self.imageUrl = imageUrl |
32 | 32 |
33 def takePic(self, uri, writePath): | 33 def takePic(self, uri, writePath): |
34 log.info('takePic %s', uri) | 34 log.info('takePic %s', uri) |
35 return treq.get(self.imageUrl).addCallbacks(lambda r: self._done(writePath, r), | 35 return treq.get(self.imageUrl).addCallbacks( |
36 log.error) | 36 lambda r: self._done(writePath, r), log.error) |
37 | 37 |
38 @inlineCallbacks | 38 @inlineCallbacks |
39 def _done(self, writePath, response): | 39 def _done(self, writePath, response): |
40 jpg = yield response.content() | 40 jpg = yield response.content() |
41 try: | 41 try: |
54 class Capture(object): | 54 class Capture(object): |
55 firstMoveTime = 3 | 55 firstMoveTime = 3 |
56 settleTime = .5 | 56 settleTime = .5 |
57 def __init__(self, graph, dev): | 57 def __init__(self, graph, dev): |
58 self.graph = graph | 58 self.graph = graph |
59 self.dev = dev | |
59 | 60 |
60 def steps(a, b, n): | 61 def steps(a, b, n): |
61 return [round(a + (b - a) * i / n, 5) for i in range(n)] | 62 return [round(a + (b - a) * i / n, 5) for i in range(n)] |
62 | 63 |
63 startTime = time.time() | 64 startTime = time.time() |
75 (dev, L9['rx'], rx), | 76 (dev, L9['rx'], rx), |
76 (dev, L9['ry'], ry), | 77 (dev, L9['ry'], ry), |
77 (dev, L9['color'], '#ffffff'), | 78 (dev, L9['color'], '#ffffff'), |
78 ])) | 79 ])) |
79 | 80 |
81 self.devTail = dev.rsplit('/')[-1] | |
82 self.session = URIRef('/'.join([showconfig.showUri(), | |
83 'capture', self.devTail, self.captureId])) | |
84 self.ctx = URIRef(self.session + '/index') | |
85 | |
86 self.graph.patch(Patch(addQuads=[ | |
87 (self.session, RDF.type, L9['CaptureSession'], self.ctx), | |
88 ])) | |
89 | |
80 self.numPics = 0 | 90 self.numPics = 0 |
81 self.settingsCache = set() | 91 self.settingsCache = set() |
82 self.step().addErrback(log.error) | 92 self.step().addErrback(log.error) |
83 | 93 |
84 def off(self): | 94 def off(self): |
99 settings=settings) | 109 settings=settings) |
100 | 110 |
101 yield deferSleep(self.firstMoveTime if self.numPics == 0 else | 111 yield deferSleep(self.firstMoveTime if self.numPics == 0 else |
102 self.settleTime) | 112 self.settleTime) |
103 | 113 |
104 dev = settings.devices()[0] | |
105 devTail = dev.rsplit('/')[-1] | |
106 picId = 'pic%s' % self.numPics | 114 picId = 'pic%s' % self.numPics |
107 path = '/'.join(['capture', devTail, self.captureId, picId]) + '.jpg' | 115 path = '/'.join([ |
108 ctx = URIRef('/'.join([showconfig.showUri(), | 116 'capture', self.devTail, self.captureId, picId]) + '.jpg' |
109 'capture', devTail, self.captureId, 'index'])) | 117 uri = URIRef(self.session + '/' + picId) |
110 uri = URIRef('/'.join([showconfig.showUri(), | |
111 'capture', devTail, self.captureId, picId])) | |
112 | 118 |
113 yield camera.takePic(uri, os.path.join(showconfig.root(), path)) | 119 yield camera.takePic(uri, os.path.join(showconfig.root(), path)) |
114 self.numPics += 1 | 120 self.numPics += 1 |
115 | 121 |
116 writeCaptureDescription(self.graph, ctx, uri, dev, path, | 122 writeCaptureDescription(self.graph, self.ctx, self.session, uri, |
117 self.settingsCache, settings) | 123 self.dev, |
124 path, self.settingsCache, settings) | |
118 | 125 |
119 reactor.callLater(0, self.step) | 126 reactor.callLater(0, self.step) |
120 | 127 |
121 | 128 |
122 | 129 |