Mercurial > code > home > repos > light9
annotate bin/vidref @ 1939:6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Ignore-this: 34bcc3b6149a1a3bed31aa5f32a4ddc6
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Mon, 03 Jun 2019 09:50:29 +0000 |
parents | 3c523c71da29 |
children | 0dc3715050cf |
rev | line source |
---|---|
729
b5efddd80dad
update more shbang lines
Drew Perttula <drewp@bigasterisk.com>
parents:
647
diff
changeset
|
1 #!bin/python |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
2 """ |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
3 Camera images of the stage. View live on a web page and also save |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
4 them to disk. Retrieve images based on the song and time that was |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
5 playing when they were taken. Also, save snapshot images to a place |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
6 they can be used again as thumbnails of effects. |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
7 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
8 bin/vidref main |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
9 light9/vidref/videorecorder.py capture frames and save them |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
10 light9/vidref/replay.py backend for vidref.js playback element- figures out which frames go with the current song and time |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
11 light9/vidref/index.html web ui for watching current stage and song playback |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
12 light9/vidref/setup.html web ui for setup of camera params and frame crop |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
13 light9/web/vidref.js LitElement for video playback |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
14 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
15 """ |
882 | 16 from run_local import log |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
17 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
18 from twisted.internet import reactor, defer |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
19 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
20 import logging, optparse, json, base64 |
1096
087f6cbe4b22
vidrefsetup tool now prepares a url that vidref will use for rpi camera requests
Drew Perttula <drewp@bigasterisk.com>
parents:
1089
diff
changeset
|
21 import cyclone.web, cyclone.httpclient, cyclone.websocket |
1866
3c523c71da29
pyflakes cleanups and some refactors
Drew Perttula <drewp@bigasterisk.com>
parents:
1858
diff
changeset
|
22 from light9 import networking |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
23 from light9.vidref.replay import snapshotDir |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
24 from light9.vidref import videorecorder |
1692 | 25 from rdfdb.syncedgraph import SyncedGraph |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
26 from io import BytesIO |
542
cfd5d5be1b50
vidref complete panels on each replay. replays load and delete pretty well
drewp@bigasterisk.com
parents:
541
diff
changeset
|
27 |
cfd5d5be1b50
vidref complete panels on each replay. replays load and delete pretty well
drewp@bigasterisk.com
parents:
541
diff
changeset
|
28 parser = optparse.OptionParser() |
1858 | 29 parser.add_option("-v", "--verbose", action="store_true", help="logging.DEBUG") |
542
cfd5d5be1b50
vidref complete panels on each replay. replays load and delete pretty well
drewp@bigasterisk.com
parents:
541
diff
changeset
|
30 (options, args) = parser.parse_args() |
cfd5d5be1b50
vidref complete panels on each replay. replays load and delete pretty well
drewp@bigasterisk.com
parents:
541
diff
changeset
|
31 |
1089
2ee97997ee56
vidref now reads from picamserve
Drew Perttula <drewp@bigasterisk.com>
parents:
1070
diff
changeset
|
32 log.setLevel(logging.DEBUG if options.verbose else logging.INFO) |
534
6f1eb6437c96
vidref refactor, start to add more widgets
drewp@bigasterisk.com
parents:
525
diff
changeset
|
33 |
1858 | 34 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
35 class Snapshot(cyclone.web.RequestHandler): |
1858 | 36 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
37 @defer.inlineCallbacks |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
38 def post(self): |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
39 # save next pic |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
40 # return /snapshot/path |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
41 try: |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
42 outputFilename = yield self.settings.gui.snapshot() |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
43 |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
44 assert outputFilename.startswith(snapshotDir()) |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
45 out = networking.vidref.path( |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
46 "snapshot/%s" % outputFilename[len(snapshotDir()):].lstrip('/')) |
1858 | 47 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
48 self.write(json.dumps({'snapshot': out})) |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
49 self.set_header("Location", out) |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
50 self.set_status(303) |
1866
3c523c71da29
pyflakes cleanups and some refactors
Drew Perttula <drewp@bigasterisk.com>
parents:
1858
diff
changeset
|
51 except Exception: |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
52 import traceback |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
53 traceback.print_exc() |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
54 raise |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
55 |
1858 | 56 |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
57 pipeline = videorecorder.GstSource( |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
58 '/dev/v4l/by-id/usb-Generic_FULL_HD_1080P_Webcam_200901010001-video-index0') |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
59 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
60 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
61 class Live(cyclone.websocket.WebSocketHandler): |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
62 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
63 def connectionMade(self, *args, **kwargs): |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
64 pipeline.liveImages.subscribe(on_next=self.onFrame) |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
65 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
66 def connectionLost(self, reason): |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
67 0 #self.subj.dispose() |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
68 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
69 def onFrame(self, t_img): |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
70 t, img = t_img |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
71 if img is None: return |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
72 output = BytesIO() |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
73 img.save(output, 'jpeg', quality=80) |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
74 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
75 self.sendMessage( |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
76 json.dumps({ |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
77 'jpeg': |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
78 base64.b64encode(output.getvalue()).decode('ascii'), |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
79 'description': |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
80 f't={t}', |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
81 })) |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
82 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
83 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
84 class SnapshotPic(cyclone.web.StaticFileHandler): |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
85 pass |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
86 |
1369
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
87 |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
88 class Time(cyclone.web.RequestHandler): |
1858 | 89 |
1369
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
90 def put(self): |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
91 body = json.loads(self.request.body) |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
92 t = body['t'] |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
93 source = body['source'] |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
94 self.settings.gui.incomingTime(t, source) |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
95 self.set_status(202) |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
96 |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
97 |
1114
a38955ba6f40
rdfdb port is now in the config
Drew Perttula <drewp@bigasterisk.com>
parents:
1096
diff
changeset
|
98 graph = SyncedGraph(networking.rdfdb.url, "vidref") |
1096
087f6cbe4b22
vidrefsetup tool now prepares a url that vidref will use for rpi camera requests
Drew Perttula <drewp@bigasterisk.com>
parents:
1089
diff
changeset
|
99 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
100 port = networking.vidref.port |
1858 | 101 reactor.listenTCP( |
102 port, | |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
103 cyclone.web.Application( |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
104 handlers=[ |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
105 (r'/()', cyclone.web.StaticFileHandler, { |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
106 'path': 'light9/vidref', |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
107 'default_filename': 'vidref.html' |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
108 }), |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
109 (r'/setup/()', cyclone.web.StaticFileHandler, { |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
110 'path': 'light9/vidref', |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
111 'default_filename': 'setup.html' |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
112 }), |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
113 (r'/setup/live', Live), |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
114 (r'/snapshot', Snapshot), |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
115 (r'/snapshot/(.*)', SnapshotPic, { |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
116 "path": snapshotDir() |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
117 }), |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
118 (r'/time', Time), |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
119 ], |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
120 debug=True, |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
121 )) |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
122 log.info("serving on %s" % port) |
937 | 123 |
935 | 124 reactor.run() |