def post_speech_data(): data = request.form.to_dict() data["time"] = float(data["time"]) db.speech.insert_one(data) cm.trigger_controllers(data['user_name'], "speech", data) data.pop("_id") return jsonify(data), 201
def post_confirm_data(): data = request.get_json(force=True) #data["time"] = time.time() #data["action"] = json.loads(data["action"]) db.confirmation.insert_one(data) cm.trigger_controllers(data['user_name'], "confirmation", data) data.pop("_id") return jsonify(data), 201
def post_hue_data(): data = request.form.to_dict() data["time"] = float(data["time"]) #data["last_manual"] = float(data["last_manual"]) data['light_states'] = json.loads(data['lights']) db.hue.insert_one(data) cm.trigger_controllers(data['user_name'], "hue", data) data.pop("_id") return jsonify(data), 201
def handle_messages(): payload = request.get_json() for event in messaging_events(payload): fb_id = event["sender"]["id"] username = None result = db.fb_users.find_one({"fb_id": fb_id}) if result: username = result["username"] if fb_id != bot_id: cm.trigger_controllers(username, "chat", event) return "ok", 200
def process(img_data): try: with current_app.test_request_context('/'): if data["motion_update"]: db.images.update_one({"filename": img_data['filename']}, { '$set': { "history.image_processing_start": time.time() } }, upsert=False) cm.trigger_controllers(data['user_name'], "image", img_data) db.images.update_one({"filename": img_data['filename']}, { '$set': { "history.image_processing_finish": time.time() } }, upsert=False) except: traceback.print_exc()
def on_event(self, event, data): if event == "image": # request update self.update = True self.current_images = get_newest_images(self.username, self.cams) # if model is ready if "activity" in self.learner.models and self.classes is not None: pred, pred_probs = self.learner.predict( "activity", [self.current_images]) self.current_predictions = pred_probs[0].tolist() self.current_activity = self.classes[np.argmax( self.current_predictions)] cm.trigger_controllers(self.username, "activity", self.current_activity) conf_mean = np.mean(self.confidences[-1000:]) conf_std = np.std(self.confidences[-1000:]) sigma = 1.0 current_conf = np.max(pred_probs[0]) patience = 60 * 60 # actually 1 hour or more is probably good if current_conf < conf_mean - conf_std * sigma: logger.debug( "current confidence: {}; mean: {}, std: {}".format( current_conf, conf_mean, conf_std)) if time.time() - self.last_asked > patience: ask = { "platform": "", "data": "", "confirmation": { "question": "今は何をしてるんですか?", "open": "", "data": "activity" } } if ask not in self.re: self.re.append(ask) self.last_asked = time.time() elif event == "speech" and data["type"] == "speech": msg = "".join(data["text"].split()) if ("という行動" in msg or ("今" in msg and "してる" in msg)) and self.classes is not None: self.confirm_label(msg) elif event == "confirmation": if "data" in data and "label" in data["data"]: phase = data["data"]["phase"] ans = data["answer"] if ans and self.classes is not None: label = data["data"]["label"] db.labels.insert_one({ "username": self.username, "time": data['response_time'], "label": label }) #if label in self.classes: # self.re.append({"platform": "tts", "data": label + "をデータベースに追加しました."}) #else: # self.re.append({"platform": "tts", "data": label + "をデータベースに新しいクラスとして追加しました."}) if "data" in data and data["data"] == "activity": msg = data["answer"] self.confirm_label(msg)