Integration with the Client Speech to Text working :) (also moved flask related methods to flask_utils.py)
This commit is contained in:
parent
f92628f263
commit
411ddec237
@ -1,27 +1,14 @@
|
|||||||
import flask
|
|
||||||
import lingua_franca
|
import lingua_franca
|
||||||
from flask import Flask, request, jsonify, Response
|
from flask import Flask
|
||||||
|
|
||||||
from jarvis.skills import intent_manager
|
from jarvis.skills import intent_manager
|
||||||
from jarvis.skills.entertainement.jokes import JokesSkill
|
from jarvis.skills.entertainement.jokes import JokesSkill
|
||||||
from jarvis.skills.entertainement.spotify import SpotifySkill
|
from jarvis.skills.entertainement.spotify import SpotifySkill
|
||||||
from jarvis.skills.research.wikipedia import WikipediaSkill
|
from jarvis.skills.research.wikipedia import WikipediaSkill
|
||||||
from jarvis.utils import languages_utils
|
from jarvis.utils import languages_utils, flask_utils
|
||||||
from utils import config_utils, flask_utils
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/process", methods=['POST'])
|
|
||||||
def process_request():
|
|
||||||
data = flask_utils.get_data_in_request(request)
|
|
||||||
|
|
||||||
if 'sentence' not in data or not data['sentence']:
|
|
||||||
flask.abort(Response('You must provide a \'sentence\' parameter (not empty aswell)!'))
|
|
||||||
|
|
||||||
return jsonify(intent_manager.recognise(sentence=data['sentence']))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# Load lingua franca in the memory
|
# Load lingua franca in the memory
|
||||||
# Supported : English French German Hungarian Italian Portuguese Swedish
|
# Supported : English French German Hungarian Italian Portuguese Swedish
|
||||||
@ -32,14 +19,15 @@ if __name__ == '__main__':
|
|||||||
JokesSkill().register()
|
JokesSkill().register()
|
||||||
SpotifySkill().register()
|
SpotifySkill().register()
|
||||||
|
|
||||||
|
# Load all skills
|
||||||
intent_manager.load_all_skills()
|
intent_manager.load_all_skills()
|
||||||
|
|
||||||
|
# Bunch of tests
|
||||||
# intent_manager.recognise("cherche Elon Musk sur wikipédia") # WORKING
|
# intent_manager.recognise("cherche Elon Musk sur wikipédia") # WORKING
|
||||||
# intent_manager.recognise("raconte moi une blague") # WORKING
|
# intent_manager.recognise("raconte moi une blague") # WORKING
|
||||||
# intent_manager.recognise("joue le morceau crazy crazy nights de KISS sur spotify") # WORKING
|
# intent_manager.recognise("joue le morceau crazy crazy nights de KISS sur spotify") # WORKING
|
||||||
# intent_manager.recognise("coupe la musique") # WORKING
|
# intent_manager.recognise("coupe la musique") # WORKING
|
||||||
# intent_manager.recognise("c'est quoi le nom de cette chanson ?") # WORKING
|
# intent_manager.recognise("c'est quoi le nom de cette chanson ?") # WORKING
|
||||||
|
|
||||||
# start the flask server
|
# Start the flask server
|
||||||
app.config['JSON_AS_ASCII'] = False
|
flask_utils.start_server()
|
||||||
app.run(port=config_utils.get_in_config("PORT"), debug=False, host='0.0.0.0', threaded=True)
|
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
import json
|
|
||||||
|
|
||||||
import requests
|
|
||||||
from requests.structures import CaseInsensitiveDict
|
|
||||||
|
|
||||||
from jarvis.utils import config_utils
|
|
||||||
|
|
||||||
client_url = config_utils.get_in_config("CLIENT_URL")
|
|
||||||
|
|
||||||
|
|
||||||
def ask_for_microphone_output(record_for_seconds, speech_before_input):
|
|
||||||
data = {
|
|
||||||
'record_for_seconds': record_for_seconds,
|
|
||||||
'speech_before_input': speech_before_input
|
|
||||||
}
|
|
||||||
|
|
||||||
call_client_api("POST", "/record", json.dumps(data))
|
|
||||||
|
|
||||||
|
|
||||||
def ask_for_input(listen_for_seconds, speech_before_input):
|
|
||||||
data = {
|
|
||||||
'listen_for_seconds': listen_for_seconds,
|
|
||||||
'speech_before_input': speech_before_input
|
|
||||||
}
|
|
||||||
|
|
||||||
call_client_api("POST", "/input", json.dumps(data))
|
|
||||||
|
|
||||||
|
|
||||||
def speak(speech):
|
|
||||||
data = {
|
|
||||||
'speech': speech
|
|
||||||
}
|
|
||||||
call_client_api("POST", "/speak", data)
|
|
||||||
|
|
||||||
|
|
||||||
def sound(sound_name):
|
|
||||||
data = {
|
|
||||||
'sound_name': sound_name
|
|
||||||
}
|
|
||||||
call_client_api("POST", "/sound", data)
|
|
||||||
|
|
||||||
|
|
||||||
def call_client_api(method, url, json_data=None):
|
|
||||||
if json_data is None:
|
|
||||||
json_data = {}
|
|
||||||
|
|
||||||
try:
|
|
||||||
url_service = client_url + url
|
|
||||||
|
|
||||||
headers = CaseInsensitiveDict()
|
|
||||||
headers["Authorization"] = config_utils.get_in_config("API_KEY")
|
|
||||||
headers["Content-Type"] = "application/json; charset=utf8"
|
|
||||||
|
|
||||||
if method == 'GET':
|
|
||||||
return json.loads(requests.get(url_service, headers=headers).content.decode("utf-8"))
|
|
||||||
elif method == 'POST':
|
|
||||||
json_data = json.dumps(json_data)
|
|
||||||
return json.loads(
|
|
||||||
requests.post(url_service, headers=headers, data=json_data.encode("utf8")).content.decode("utf-8"))
|
|
||||||
except:
|
|
||||||
print("Error when calling the client API")
|
|
@ -1,8 +1,40 @@
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
|
import flask
|
||||||
|
import speech_recognition as sr
|
||||||
|
from flask import Response, request, jsonify
|
||||||
|
|
||||||
def get_data_in_request(request):
|
from jarvis.main import app
|
||||||
data_str = str(request.data.decode('utf8')).replace('"', '\"').replace("\'", "'")
|
from jarvis.skills import intent_manager
|
||||||
|
from jarvis.utils import config_utils, languages_utils
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/process", methods=['POST'])
|
||||||
|
def process_request():
|
||||||
|
data = get_data_in_request(request)
|
||||||
|
|
||||||
|
if 'sentence' not in data or not data['sentence']:
|
||||||
|
flask.abort(Response('You must provide a \'sentence\' parameter (not empty aswell)!'))
|
||||||
|
|
||||||
|
return jsonify(intent_manager.recognise(sentence=data['sentence']))
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/process_audio_request", methods=['POST'])
|
||||||
|
def process_audio_request():
|
||||||
|
frame_data = request.data
|
||||||
|
sample_rate = 44100
|
||||||
|
sample_width = 2
|
||||||
|
|
||||||
|
r = sr.Recognizer()
|
||||||
|
audio = sr.AudioData(frame_data, sample_rate, sample_width)
|
||||||
|
|
||||||
|
result_stt = r.recognize_google(audio, language=languages_utils.get_language_only_country())
|
||||||
|
|
||||||
|
return jsonify(intent_manager.recognise(sentence=result_stt))
|
||||||
|
|
||||||
|
|
||||||
|
def get_data_in_request(flask_request):
|
||||||
|
data_str = str(flask_request.data.decode('utf8')).replace('"', '\"').replace("\'", "'")
|
||||||
|
|
||||||
# if no data return an empty json to avoid error with json.loads below
|
# if no data return an empty json to avoid error with json.loads below
|
||||||
if not data_str:
|
if not data_str:
|
||||||
@ -14,3 +46,8 @@ def get_data_in_request(request):
|
|||||||
data_json = json.loads(data_json)
|
data_json = json.loads(data_json)
|
||||||
|
|
||||||
return data_json
|
return data_json
|
||||||
|
|
||||||
|
|
||||||
|
def start_server():
|
||||||
|
app.config['JSON_AS_ASCII'] = False
|
||||||
|
app.run(port=config_utils.get_in_config("PORT"), debug=False, host='0.0.0.0', threaded=True)
|
||||||
|
Reference in New Issue
Block a user