|
@@ -1,8 +1,9 @@
|
|
|
-from flask import Flask, render_template, Response, request, jsonify
|
|
|
|
|
|
|
+from flask import Flask, render_template, Response, request, jsonify, make_response
|
|
|
import json
|
|
import json
|
|
|
import os
|
|
import os
|
|
|
import torch
|
|
import torch
|
|
|
import openai
|
|
import openai
|
|
|
|
|
+import uuid
|
|
|
|
|
|
|
|
|
|
|
|
|
with open(".env", "r") as env:
|
|
with open(".env", "r") as env:
|
|
@@ -43,16 +44,18 @@ class State:
|
|
|
big_head = False
|
|
big_head = False
|
|
|
number_audio = 0
|
|
number_audio = 0
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-state = State()
|
|
|
|
|
|
|
+state_dict = {}
|
|
|
|
|
|
|
|
app = Flask(__name__)
|
|
app = Flask(__name__)
|
|
|
# app.logger.setLevel(logging.DEBUG)
|
|
# app.logger.setLevel(logging.DEBUG)
|
|
|
app.logger.info("start logger")
|
|
app.logger.info("start logger")
|
|
|
|
|
+app.secret_key = "onism_pidor"
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.route("/send_data", methods=["POST"])
|
|
@app.route("/send_data", methods=["POST"])
|
|
|
def send_data():
|
|
def send_data():
|
|
|
|
|
+ user_id = request.cookies.get("user_id")
|
|
|
|
|
+ state = state_dict[user_id]
|
|
|
# Получаем данные из запроса
|
|
# Получаем данные из запроса
|
|
|
data = request.form["data"]
|
|
data = request.form["data"]
|
|
|
need_generation = request.form["state"]
|
|
need_generation = request.form["state"]
|
|
@@ -85,7 +88,7 @@ def send_data():
|
|
|
age = detections["face"][0]["age"]
|
|
age = detections["face"][0]["age"]
|
|
|
app.logger.info(f"\n{emotion=}, \n{sex=}, \n{age=}")
|
|
app.logger.info(f"\n{emotion=}, \n{sex=}, \n{age=}")
|
|
|
state.prompt = generate_prompt(emotion, age, sex)
|
|
state.prompt = generate_prompt(emotion, age, sex)
|
|
|
- state.generation_text = generate_text(state.prompt)
|
|
|
|
|
|
|
+ state.generation_text = generate_text(state.prompt, state)
|
|
|
elif detections["face"][0]["size"][0] > 200:
|
|
elif detections["face"][0]["size"][0] > 200:
|
|
|
# state.age.append(detections['face'][0]['age'])
|
|
# state.age.append(detections['face'][0]['age'])
|
|
|
# state.gender.append(detections['face'][0]['gender'])
|
|
# state.gender.append(detections['face'][0]['gender'])
|
|
@@ -101,18 +104,19 @@ def send_data():
|
|
|
app.logger.info(
|
|
app.logger.info(
|
|
|
f"STATUS {state.count=}, {state.need_generation=}, {state.need_generation_from_client=}"
|
|
f"STATUS {state.count=}, {state.need_generation=}, {state.need_generation_from_client=}"
|
|
|
)
|
|
)
|
|
|
-
|
|
|
|
|
return data
|
|
return data
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.route("/check_audio", methods=["GET", "POST"])
|
|
@app.route("/check_audio", methods=["GET", "POST"])
|
|
|
def check_audio():
|
|
def check_audio():
|
|
|
|
|
+ user_id = request.cookies.get("user_id")
|
|
|
|
|
+ state = state_dict[user_id]
|
|
|
app.logger.info(
|
|
app.logger.info(
|
|
|
f"checking need generation {state.need_generation=}, {state.need_audio=}"
|
|
f"checking need generation {state.need_generation=}, {state.need_audio=}"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
if state.need_audio and state.big_head:
|
|
if state.need_audio and state.big_head:
|
|
|
- audio_path = generate_audio(state.generation_text)
|
|
|
|
|
|
|
+ audio_path = generate_audio(state.generation_text, state)
|
|
|
else:
|
|
else:
|
|
|
state.new_audio = False
|
|
state.new_audio = False
|
|
|
audio_path = ""
|
|
audio_path = ""
|
|
@@ -133,6 +137,8 @@ def check_audio():
|
|
|
|
|
|
|
|
@app.route("/<filename>")
|
|
@app.route("/<filename>")
|
|
|
def audio(filename):
|
|
def audio(filename):
|
|
|
|
|
+ user_id = request.cookies.get("user_id")
|
|
|
|
|
+ state = state_dict[user_id]
|
|
|
state.need_generation = True
|
|
state.need_generation = True
|
|
|
return app.send_static_file(filename)
|
|
return app.send_static_file(filename)
|
|
|
|
|
|
|
@@ -160,9 +166,17 @@ def delete_audio():
|
|
|
@app.route("/")
|
|
@app.route("/")
|
|
|
def index():
|
|
def index():
|
|
|
"""Video streaming home page."""
|
|
"""Video streaming home page."""
|
|
|
|
|
+ user_id = request.cookies.get('user_id') # Пытаемся получить user_id из куки
|
|
|
|
|
+ if not user_id:
|
|
|
|
|
+ user_id = str(uuid.uuid4()) # Генерируем новый UUID, если его нет
|
|
|
|
|
+ state_dict[user_id] = State()
|
|
|
|
|
+ response = make_response(render_template("index.html"))
|
|
|
|
|
+ response.set_cookie('user_id', user_id, max_age=60*60*24) # Устанавливаем куки на 2 года
|
|
|
|
|
+ return response
|
|
|
return render_template("index.html")
|
|
return render_template("index.html")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
def generate_prompt(emotion, age, sex):
|
|
def generate_prompt(emotion, age, sex):
|
|
|
app.logger.info("\033[92m" + "preload prompt" + "\033[00m")
|
|
app.logger.info("\033[92m" + "preload prompt" + "\033[00m")
|
|
|
prompt = f"""Ты - это арт объект в виде носимого устройства. Твое название - Onism Machina.
|
|
prompt = f"""Ты - это арт объект в виде носимого устройства. Твое название - Onism Machina.
|
|
@@ -184,7 +198,7 @@ def generate_prompt(emotion, age, sex):
|
|
|
return prompt
|
|
return prompt
|
|
|
|
|
|
|
|
|
|
|
|
|
-def generate_text(prompt):
|
|
|
|
|
|
|
+def generate_text(prompt, state):
|
|
|
state.need_generation = False
|
|
state.need_generation = False
|
|
|
app.logger.info("\033[92m" + "start generating text from openai" + "\033[00m")
|
|
app.logger.info("\033[92m" + "start generating text from openai" + "\033[00m")
|
|
|
response = client.chat.completions.create(
|
|
response = client.chat.completions.create(
|
|
@@ -204,7 +218,7 @@ def generate_text(prompt):
|
|
|
return response.choices[0].message.content
|
|
return response.choices[0].message.content
|
|
|
|
|
|
|
|
|
|
|
|
|
-def generate_audio(sample_text):
|
|
|
|
|
|
|
+def generate_audio(sample_text, state):
|
|
|
state.number_audio += 1
|
|
state.number_audio += 1
|
|
|
app.logger.info(
|
|
app.logger.info(
|
|
|
"\033[93m"
|
|
"\033[93m"
|