Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
 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()
Esempio n. 6
0
    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)