Bläddra i källkod

test plugin from brain

nico 8 år sedan
förälder
incheckning
d939a8afb5

+ 2 - 7
brain.yml

@@ -1,9 +1,9 @@
 ---
   - name: "Say hello"
     neurons:
-      - say: "Hello sir"
+      - Say: "Bonjour monsieur"
     when:
-      - order: "Say hello"
+      - order: "dis bonjour"
 
   - name: "Run a simple script"
     neurons:
@@ -17,9 +17,4 @@
       - systemdate
     when:
       - order: "What time is it?"
-    register: date_result
 
-  - name: "Run when date"
-    neurons:
-      - say: "It is late, sir?"
-    when: date_result

+ 10 - 1
core/MainController.py

@@ -1,4 +1,5 @@
 from core.JarvisTrigger import JarvisTrigger
+from core.OrderAnalyser import OrderAnalyser
 from core.OrderListener import OrderListener
 from neurons import Say
 
@@ -33,4 +34,12 @@ class MainController:
         self.pause_jarvis_trigger()
         print "Start listening for order"
         Say("oui monsieur?")
-        self.order_listener.start()
+        self.order_listener.start()
+
+    def analyse_order(self, order):
+        """
+        Receive an order, try to retreive it in the brain.yml to launch to attached plugins
+        :return:
+        """
+        order_analyser = OrderAnalyser(order)
+        order_analyser.start()

+ 49 - 0
core/OrderAnalyser.py

@@ -0,0 +1,49 @@
+from Utils import *
+import importlib
+import re
+
+
+class OrderAnalyser:
+    def __init__(self, order):
+        """
+        Class used to load
+        :param order:
+        """
+        self.order = order
+        self.brain = get_brain()
+        print "Receiver order: %s" % self.order
+
+    def start(self):
+        print self.brain
+
+        for el in self.brain:
+            # print el
+            # print el["when"]
+            whens = el["when"]
+            for when in whens:
+                brain_order = when["order"]
+                print "order to test: %s" % brain_order
+                if self._spelt_order_match_brain_order(brain_order):
+                    print "Order found! Run neurons: %s" % el["neurons"]
+                    neurons = el["neurons"]
+                    for neuron in neurons:
+                        for plugin, parameter in neuron.items():
+                            print "Run plugin %s with parameter %s" % (plugin, parameter)
+                            mod = __import__('neurons', fromlist=[plugin])
+                            klass = getattr(mod, plugin)
+                            # run the plugin
+                            klass(parameter)
+
+
+    def _spelt_order_match_brain_order(self, order_to_test):
+        """
+        test if the current order match the order spelt by the user
+        :param order_to_test:
+        :return:
+        """
+        my_regex = r"\b(?=\w)" + re.escape(order_to_test) + r"\b(?!\w)"
+
+        if re.search(my_regex, self.order, re.IGNORECASE):
+            return True
+
+

+ 3 - 1
core/OrderListener.py

@@ -31,7 +31,9 @@ class OrderListener:
             # for testing purposes, we're just using the default API key
             # to use another API key, use `r.recognize_google(audio, key="GOOGLE_SPEECH_RECOGNITION_API_KEY")`
             # instead of `r.recognize_google(audio)`
-            print("Google Speech Recognition thinks you said " + r.recognize_google(audio, key=None, language="fr-FR"))
+            captured_audio = r.recognize_google(audio, key=None, language="fr-FR")
+            print "Google Speech Recognition thinks you said %s" % captured_audio
+            self.main_controller.analyse_order(captured_audio)
         except sr.UnknownValueError:
             print("Google Speech Recognition could not understand audio")
         except sr.RequestError as e:

+ 41 - 0
core/Utils.py

@@ -0,0 +1,41 @@
+import yaml
+import os
+
+
+def get_settings():
+    """
+    Load settings.yml file
+    :return:
+    """
+    filename = "settings.yml"
+    return _load_yaml_file(filename)
+
+
+def get_brain():
+    """
+    Load brain.yml file
+    :return:
+    """
+    filename = "../brain.yml"
+    return _load_yaml_file(filename)
+
+
+def _load_yaml_file(file_to_load):
+    """
+    Load settings file
+    :return:
+    """
+    # Load settings. Will be used to convert slot number into GPIO pin number
+    __location__ = os.path.realpath(
+        os.path.join(os.getcwd(), os.path.dirname(__file__)))
+    with open(os.path.join(__location__, file_to_load)) as ymlfile:
+        cfg = yaml.load(ymlfile)
+    return cfg
+
+
+def my_import(name):
+    components = name.split('.')
+    mod = __import__(components[0])
+    for comp in components[1:]:
+        mod = getattr(mod, comp)
+    return mod

+ 0 - 0
neurons/say/__init__.py → neurons/Say/__init__.py


+ 0 - 0
neurons/say/say.py → neurons/Say/say.py


+ 0 - 0
neurons/systemdate/__init__.py → neurons/Systemdate/__init__.py


+ 0 - 0
neurons/systemdate/systemdate.py → neurons/Systemdate/systemdate.py


+ 2 - 2
neurons/__init__.py

@@ -1,2 +1,2 @@
-from say import Say
-from systemdate import SystemDate
+from Say import Say
+from Systemdate import SystemDate

+ 8 - 2
test.py

@@ -1,7 +1,13 @@
+from core.OrderAnalyser import OrderAnalyser
 from core.OrderListener import OrderListener
 
+#
+# oder = OrderListener()
+#
+# oder.start()
 
-oder = OrderListener()
+order = "jarvis dit bonjour s'il te plait"
+order_analyser = OrderAnalyser(order)
 
-oder.start()
+order_analyser.start()