23
23
import os
24
24
import json
25
25
import logging
26
- import time
27
26
import logging .handlers
28
27
import subprocess
29
28
import picamera
38
37
from event import EventManager
39
38
from conversation import Conversation
40
39
41
- from flask import Flask , render_template , request , send_file , redirect , Response , jsonify
40
+ from flask import Flask , render_template , request , send_file , Response , jsonify
42
41
from flask_babel import Babel
43
42
from werkzeug .datastructures import Headers
44
43
#from flask_sockets import Sockets
64
63
event = None
65
64
conv = None
66
65
67
- app = Flask (__name__ ,static_url_path = "" )
66
+ app = Flask (__name__ , static_url_path = "" )
68
67
#app.config.from_pyfile('coderbot.cfg')
69
68
babel = Babel (app )
70
69
app .debug = False
@@ -86,26 +85,33 @@ def get_locale():
86
85
@app .route ("/" )
87
86
def handle_home ():
88
87
stream_port = cam .stream_port if cam else ""
89
- return render_template ('main.html' , host = request .host [:request .host .find (':' )], stream_port = stream_port , locale = get_locale (), config = app .bot_config , program_level = app .bot_config .get ("prog_level" , "std" ), cam = cam != None , cnn_model_names = json .dumps ([[name ] for name in cnn .get_models ().keys ()]))
88
+ return render_template ('main.html' ,
89
+ host = request .host [:request .host .find (':' )],
90
+ stream_port = stream_port ,
91
+ locale = get_locale (),
92
+ config = app .bot_config ,
93
+ program_level = app .bot_config .get ("prog_level" , "std" ),
94
+ cam = cam != None ,
95
+ cnn_model_names = json .dumps ([[name ] for name in cnn .get_models ().keys ()]))
90
96
91
97
@app .route ("/config" , methods = ["POST" ])
92
98
def handle_config ():
93
99
Config .write (request .form )
94
100
app .bot_config = Config .get ()
95
- return "ok" ;
101
+ return "ok"
96
102
97
103
@app .route ("/wifi" , methods = ["POST" ])
98
104
def handle_wifi ():
99
105
mode = request .form .get ("wifi_mode" )
100
106
ssid = request .form .get ("wifi_ssid" )
101
107
psk = request .form .get ("wifi_psk" )
102
- logging .info ( "mode " , mode , " ssid: " , ssid , " psk: " , psk )
108
+ logging .info ("mode " + mode + " ssid: " + ssid + " psk: " + psk )
103
109
client_params = " \" " + ssid + "\" \" " + psk + "\" " if ssid != "" and psk != "" else ""
104
110
logging .info (client_params )
105
111
os .system ("sudo python wifi.py updatecfg " + mode + client_params )
106
112
os .system ("sudo reboot" )
107
113
if mode == "ap" :
108
- return "http://coder.bot:8080" ;
114
+ return "http://coder.bot:8080"
109
115
else :
110
116
return "http://coderbot.locali:8080"
111
117
@@ -134,28 +140,24 @@ def handle_bot():
134
140
motion .stop ()
135
141
except :
136
142
logging .warning ("Camera not present" )
137
- pass
138
143
elif cmd == "take_photo" :
139
144
try :
140
145
cam .photo_take ()
141
146
audio .say (app .bot_config .get ("sound_shutter" ))
142
147
except :
143
148
logging .warning ("Camera not present" )
144
- pass
145
149
elif cmd == "video_rec" :
146
150
try :
147
151
cam .video_rec ()
148
152
audio .say (app .bot_config .get ("sound_shutter" ))
149
153
except :
150
154
logging .warning ("Camera not present" )
151
- pass
152
155
elif cmd == "video_stop" :
153
156
try :
154
157
cam .video_stop ()
155
158
audio .say (app .bot_config .get ("sound_shutter" ))
156
159
except :
157
160
logging .warning ("Camera not present" )
158
- pass
159
161
elif cmd == "say" :
160
162
logging .info ("say: " + str (param1 ) + " in: " + str (get_locale ()))
161
163
audio .say (param1 , get_locale ())
@@ -176,15 +178,14 @@ def handle_bot():
176
178
def handle_bot_status ():
177
179
return json .dumps ({'status' : 'ok' })
178
180
179
- def video_stream (cam ):
180
-
181
+ def video_stream (a_cam ):
181
182
while not app .shutdown_requested :
182
- frame = cam .get_image_jpeg ()
183
+ frame = a_cam .get_image_jpeg ()
183
184
yield ("--BOUNDARYSTRING\r \n " +
184
185
"Content-type: image/jpeg\r \n " +
185
186
"Content-Length: " + str (len (frame )) + "\r \n \r \n " )
186
- yield ( frame )
187
- yield ( "\r \n " )
187
+ yield frame
188
+ yield "\r \n "
188
189
189
190
@app .route ("/video" )
190
191
def handle_video ():
@@ -209,11 +210,12 @@ def handle_video_stream():
209
210
h .add ('Cache-Control' , 'no-cache, private' )
210
211
h .add ('Pragma' , 'no-cache' )
211
212
return Response (video_stream (cam ), headers = h , mimetype = "multipart/x-mixed-replace; boundary=--BOUNDARYSTRING" )
212
- except : pass
213
+ except :
214
+ pass
213
215
214
- def video_stream_cv (cam ):
216
+ def video_stream_cv (a_cam ):
215
217
while not app .shutdown_requested :
216
- frame = cam .get_image_cv_jpeg ()
218
+ frame = a_cam .get_image_cv_jpeg ()
217
219
yield ("--BOUNDARYSTRING\r \n " +
218
220
"Content-type: image/jpeg\r \n " +
219
221
"Content-Length: " + str (len (frame )) + "\r \n \r \n " +
@@ -227,9 +229,8 @@ def handle_video_stream_cv():
227
229
h .add ('Cache-Control' , 'no-cache, private' )
228
230
h .add ('Pragma' , 'no-cache' )
229
231
return Response (video_stream_cv (cam ), headers = h , mimetype = "multipart/x-mixed-replace; boundary=--BOUNDARYSTRING" )
230
- except : pass
231
-
232
-
232
+ except :
233
+ pass
233
234
234
235
@app .route ("/photos" , methods = ["GET" ])
235
236
def handle_photos ():
@@ -240,20 +241,18 @@ def handle_photos():
240
241
def handle_photo_get (filename ):
241
242
logging .info ("media filename: " + filename )
242
243
mimetype = {'jpg' : 'image/jpeg' , 'mp4' : 'video/mp4' }
243
- video = None
244
244
try :
245
245
media_file = cam .get_photo_file (filename )
246
- except picamera .exc .PiCameraError :
247
- pass
248
-
249
- return send_file (media_file , mimetype = mimetype .get (filename [:- 3 ], 'image/jpeg' ), cache_timeout = 0 )
246
+ return send_file (media_file , mimetype = mimetype .get (filename [:- 3 ], 'image/jpeg' ), cache_timeout = 0 )
247
+ except picamera .exc .PiCameraError as e :
248
+ logging .error ("Error: " + str (e ))
250
249
251
250
@app .route ("/photos/<filename>" , methods = ["PUT" ])
252
251
def handle_photo_put (filename ):
253
252
logging .info ("photo update" )
254
253
data = request .get_data (as_text = True )
255
254
data = json .loads (data )
256
- cam .update_photo ({"name" : filename , "tag" :data ["tag" ]});
255
+ cam .update_photo ({"name" : filename , "tag" :data ["tag" ]})
257
256
return jsonify ({"res" :"ok" })
258
257
259
258
@app .route ("/photos/<filename>" , methods = ["DELETE" ])
@@ -280,7 +279,7 @@ def handle_program_save():
280
279
name = request .form .get ('name' )
281
280
dom_code = request .form .get ('dom_code' )
282
281
code = request .form .get ('code' )
283
- prog = Program (name , dom_code = dom_code , code = code )
282
+ prog = Program (name , dom_code = dom_code , code = code )
284
283
app .prog_engine .save (prog )
285
284
return "ok"
286
285
@@ -336,7 +335,7 @@ def handle_cnn_models_new():
336
335
@app .route ("/cnnmodels/<model_name>" , methods = ["GET" ])
337
336
def handle_cnn_models_status (model_name ):
338
337
logging .info ("cnn_models_status" )
339
- model_status = cnn .get_model ( model_name = model_name )
338
+ model_status = cnn .get_models (). get ( model_name )
340
339
341
340
return json .dumps (model_status )
342
341
@@ -372,10 +371,13 @@ def run_server():
372
371
global motion
373
372
global audio
374
373
global cnn
374
+ global conv
375
+ global event
375
376
try :
376
377
try :
377
378
app .bot_config = Config .read ()
378
- bot = CoderBot .get_instance (servo = (app .bot_config .get ("move_motor_mode" )== "servo" ), motor_trim_factor = float (app .bot_config .get ('move_motor_trim' , 1.0 )))
379
+ bot = CoderBot .get_instance (servo = (app .bot_config .get ("move_motor_mode" ) == "servo" ),
380
+ motor_trim_factor = float (app .bot_config .get ('move_motor_trim' , 1.0 )))
379
381
audio = Audio .get_instance ()
380
382
audio .say (app .bot_config .get ("sound_start" ))
381
383
try :
0 commit comments