Skip to content

Commit

Permalink
ok bon numéro de body et plage note corrigé, recapture à faire
Browse files Browse the repository at this point in the history
  • Loading branch information
serge committed Apr 25, 2021
1 parent 97a577a commit 18f9eb6
Show file tree
Hide file tree
Showing 20 changed files with 92 additions and 93 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
old/
mon_venv/
*.caffemodel
*.mp4
*.mov
*.mkv

# blend
*.blend1
Expand Down
Binary file modified blender-skeleton/blender_skeleton.blend
Binary file not shown.
40 changes: 11 additions & 29 deletions blender-skeleton/scripts/always.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,15 @@ def apply_objet_position_orientation(objet_point_1, objet_point_2, objet):


def set_sphere_position_scale():
if gl.points:
for i in range(14): # gl.nombre):
if gl.points[i]:
v = Vector(gl.points[i])*gl.scale
gl.spheres[i].worldPosition = [ v[0] + gl.left_right,
v[1] + gl.av_ar,
v[2] + gl.up_down]
gl.spheres[i].worldScale = [1.5*gl.scale,
1.5*gl.scale,
1.5*gl.scale]
for i in range(14): # gl.nombre):
if gl.points[i]:
v = Vector(gl.points[i])*gl.scale
gl.spheres[i].worldPosition = [ v[0] + gl.left_right,
v[1] + gl.av_ar,
v[2] + gl.up_down]
gl.spheres[i].worldScale = [1.5*gl.scale,
1.5*gl.scale,
1.5*gl.scale]


def set_body_position_orientation():
Expand Down Expand Up @@ -146,7 +145,6 @@ def keyboard():
elif gl.keyboard.events[events.HKEY] == gl.KX_INPUT_JUST_ACTIVATED:
visible_or_not()


def visible_or_not():
"""Visibilité soit du personnage, soit la matérialisation des os"""

Expand Down Expand Up @@ -174,7 +172,7 @@ def visible_or_not():


def main():
gl.frame_number += 1

gl.fps += 1
if time() - gl.t > 10:
gl.t = time()
Expand All @@ -184,29 +182,13 @@ def main():

keyboard()

if gl.debug:
if gl.nums < len(gl.data):
if gl.frame_number < 20:
every = 1
else:
every = gl.every
# les datas sans le body
data = gl.data[gl.nums][:-1]
if gl.frame_number % every == 0:
# Les coordonnées xzy de opencv deviennent xyz de blender
gl.points = get_points(data)
gl.nums += 1
gl.new = 1
else:
print("Le spectacle doit continué")

if gl.points:

set_sphere_position_scale()
set_cubes_position_orientation_scale()
set_body_position_orientation()
set_head_location() # pour COCO

gl.new = 0
gl.points = None

gl.metarig.update()
Expand Down
1 change: 0 additions & 1 deletion blender-skeleton/scripts/json/cap_2021_04_17_13_56.json

This file was deleted.

33 changes: 11 additions & 22 deletions blender-skeleton/scripts/once.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from oscpy.server import OSCThreadServer

from bge import logic as gl
from scripts.utils import get_all_objects, add_object, read_json
from scripts.utils import get_all_objects, add_object
from scripts.utils import JOINTS, PAIRS_COCO, PAIRS_MPI
from scripts.rs_utils import Filtre, get_points
from scripts.sound import EasyAudio
Expand All @@ -22,21 +22,21 @@ def on_points(*args):
args = args[:-1]

gl.points = get_points(args)
gl.new = 1
# Durée en frame depuis la dernière réception
gl.tempo = gl.frame_number - gl.receive_at
gl.receive_at = gl.frame_number


def on_note(i):
print("Play note", i)
# #print("Play note", i)
if gl.notes:
if i > 35: i = 35
if i < 0: i = 0
gl.notes[str(i)].play()


def osc_server_init():
gl.server = OSCThreadServer()
gl.server.listen('0.0.0.0', port=8003, default=True)


# Les callbacks du serveur
gl.server.default_handler = default_handler
gl.server.bind(b'/points', on_points)
Expand Down Expand Up @@ -80,23 +80,12 @@ def main():
gl.fps = 0
gl.server = None
gl.points = None
gl.frame_number = 0
gl.nums = 0
gl.new = 0
gl.receive_at = 0
gl.tempo = 0
gl.body_visible = 1
gl.person.visible = 0
gl.body = 0
gl.notes = None

gl.debug = 0 # 1=avec fichier enregistré
if gl.debug:
b = './scripts/json/cap_2021_04_17_13_56.json'
gl.data = read_json(b)
print("Nombre de frame =", len(gl.data))
else:
gl.notes = None
osc_server_init()
gl.every = 5
osc_server_init()

# Le filtre Savonarol Wakowski de scipy
gl.mode = "COCO" # "MPI" ou "COCO"
Expand All @@ -109,9 +98,9 @@ def main():

# Placement et échelle dans la scène
gl.scale = 1
gl.up_down = 1.0
gl.up_down = 0.5
gl.left_right = 0.2
gl.av_ar = -0.6
gl.av_ar = -2.5

# audio
get_notes()
2 changes: 2 additions & 0 deletions blender-skeleton/scripts/rs_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
print("Vous devez installer scipy !")
SCIPY = False


class Filtre:
"""Filtre les points reçus du RealSense
piles[17][2] = deque([1.937, -0.495, 0.144, 3.24], maxlen=4)
Expand Down Expand Up @@ -101,6 +102,7 @@ def get_points(data):
# Permutation de y et z, z est la profondeur pour RS et OpenCV
# et inversion de l'axe des y en z
points.append([val[0]/1000, val[2]/1000, -val[1]/1000])
# #points.append([val[0]/1000, val[1]/1000, val[2]/1000])
else:
points = None

Expand Down
68 changes: 47 additions & 21 deletions get_skeleton/gestures.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,19 @@
from json import load
import numpy as np

GESTURES_UP = {0: (13, 10),
1: (10, 13),
GESTURES_UP = {
2: (7, 5),
3: (4, 2),
4: (4, 3),
5: (7, 6),
6: (1, 8)}
3: (4, 2)
}


# #0: (13, 10),
# #1: (10, 13),
# #2: (7, 5),
# #3: (4, 2),
# #4: (4, 3),
# #5: (7, 6),
# #6: (1, 8)}


class Gestures:
Expand All @@ -23,8 +29,8 @@ def __init__(self, client):
self.client = client

self.depth = 1
self.mini = 50
self.maxi = -50
self.mini = 0.20
self.maxi = 0.90
self.step = 1 # int de 1 à 5
# 36 notes possibles
self.encours = [0] * 36
Expand Down Expand Up @@ -52,9 +58,9 @@ def get_depth_mini_maxi_current(self):
depth = 1
# mini maxi
if depth < self.mini:
self.mini = depth
self.mini = 0.20 #depth
if depth > self.maxi:
self.maxi = depth
self.maxi = 0.80 # depth

self.depth = depth
self.get_step()
Expand All @@ -71,27 +77,28 @@ def get_step(self):
if self.maxi - self.mini != 0:
pas = (self.maxi - self.mini)/5
if self.depth is not None:
if pas != 0:
self.step = int((self.depth - self.mini)/pas)
else:
self.step = 1
self.step = (self.depth - self.mini)/pas

def gestures(self):
""" step 1 --> 0 1 2 3 ... 6
step 2 --> 7 8 9 10 ... 12
"""
k = 0.02 # décalge de keypoints vers le haut
pts = self.points
for key, val in GESTURES_UP.items():
p2 = val[0]
p1 = val[1]
if pts[p1] and pts[p2]:
note = key + self.step*5
if pts[p2][1] > pts[p1][1] + 0.1:
note = int(key + self.step*5)
if note < 0: note = 0
if note > 35: note = 35
if pts[p2][2] > pts[p1][2] + k:
if not self.encours[note]:
print(round(pts[p2][2], 2), round(pts[p1][2], 2))
print("Envoi de:", note)
self.client.send_msg(b'/note', note)
self.encours[note] = 1
if pts[p2][1] < pts[p1][1] - 0.1:
if pts[p2][2] < pts[p1][2] - k:
self.encours[note] = 0


Expand Down Expand Up @@ -139,13 +146,32 @@ def get_points(data):
from osc_client import OscClt

clt = OscClt(b'localhost', 8003)

gest = Gestures(clt)

fichier = "./json/cap_2021_04_17_13_56.json"
# #fichier = "./json/cap_2021_04_22_17_06.json"
fichier = "./json/cap_2021_04_22_19_23.json" # 22940
data = read_json(fichier)
print("Nombre de data:", len(data))
for i in range(16300, 20000, 1):
# 2021_04_22_17_06 8000 à 12000 rien
# 2021_04_22_19_23 20600 à 22000 un peu
# 15000 à
print(i)
# Les points en 3D avec y et z interverti et y inversé
points = get_points(data[i][0][:-1])

for i in range(len(data)):
points = get_points(data[i][:-1])
gest.add_points(points)

# points =
# [None, [-1.535, 5.456, 0.569], None, None, None, [-1.466, 5.388, 0.511],
# None, None, None, None, None, None, None, None, None, None, None, None]
# send_global_message(self, points3D, bodyId=110):
points_inverse = []
for point in points:
if not point:
points_inverse.append(None)
else:
points_inverse.append([point[0], -point[2], point[1]])
clt.send_global_message(points_inverse)

sleep(0.06)
4 changes: 2 additions & 2 deletions get_skeleton/get_cubemos_skeleton.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,9 @@ def run(self):

# Chargement de la configuration
ini_file = 'get_cubemos_skeleton.ini'
my_config = MyConfig(ini_file)
my_conf = MyConfig(ini_file)

kwargs = my_config.conf['cubemos']
kwargs = my_conf.conf['cubemos']
print("\nDétection de squelette par Cubemos")
print("\n Configuration \n")
pprint(kwargs)
Expand Down
1 change: 0 additions & 1 deletion get_skeleton/json/cap_2021_04_17_13_34.json

This file was deleted.

3 changes: 0 additions & 3 deletions get_skeleton/json/cap_2021_04_17_13_50.json

This file was deleted.

1 change: 0 additions & 1 deletion get_skeleton/json/cap_2021_04_17_13_56.json

This file was deleted.

1 change: 0 additions & 1 deletion get_skeleton/json/cap_2021_04_18_15_30.json

This file was deleted.

1 change: 0 additions & 1 deletion get_skeleton/json/cap_2021_04_18_15_32.json

This file was deleted.

1 change: 0 additions & 1 deletion get_skeleton/json/cap_2021_04_18_15_39.json

This file was deleted.

1 change: 0 additions & 1 deletion get_skeleton/json/cap_2021_04_19_10_08.json

This file was deleted.

1 change: 0 additions & 1 deletion get_skeleton/json/cap_2021_04_19_10_11.json

This file was deleted.

1 change: 0 additions & 1 deletion get_skeleton/json/cap_2021_04_21_18_27.json

This file was deleted.

10 changes: 6 additions & 4 deletions get_skeleton/json/depth_graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import numpy as np
import matplotlib.pyplot as plt


def read_json(fichier):
try:
with open(fichier) as f:
Expand All @@ -27,9 +28,9 @@ def get_points(data):
points = []
for i in range(nombre):
# data[de 0 à 54] n'est jamais None car vient de l'OSC
val = [ data[(3*i)],
data[(3*i)+1],
data[(3*i)+2]]
val = [data[(3*i)],
data[(3*i)+1],
data[(3*i)+2]]
if val == [-1000000, -1000000, -1000000]:
points.append(None)
else:
Expand Down Expand Up @@ -57,6 +58,7 @@ def plot_depht(depths, tops_liss):
fig.savefig("depth.png")
plt.show()


def get_depth(points):
"""Moyenne de tous les z"""
zs = []
Expand All @@ -73,7 +75,7 @@ def get_depth(points):

if __name__ == '__main__':

fichier = "cap_2021_04_21_18_27.json"
fichier = "./cap_2021_04_22_17_06.json"
data = read_json(fichier)
depths = []
tops = []
Expand Down
11 changes: 8 additions & 3 deletions get_skeleton/json/send_points_from_json_with_osc.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,16 @@
from json import load
from oscpy.client import OSCClient


def send(data):
"""# N° body à la fin
msg.append(bodyId)
# Heure de capture
self.all_data.append([msg, time()])
self.client.send_message(b'/points', msg)
"""
client = OSCClient(b'localhost', 8003)
for points in data:
points = points[:-1]
points = points[0]
client.send_message(b'/points', points)
print(points)
sleep(0.1)
Expand All @@ -25,6 +30,6 @@ def read_json(fichier):

if __name__ == '__main__':

fichier = "./cap_2021_04_19_10_11.json"
fichier = "./cap_2021_04_22_17_06.json"
data = read_json(fichier)
send(data)
2 changes: 2 additions & 0 deletions get_skeleton/osc_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from oscpy.client import OSCClient
from time import time


class OscClt:
"""Un client OSC spécifique pour envoyer les points Cubemos,
et enregistrer ces points dans un fichier pour debug.
Expand Down Expand Up @@ -39,6 +40,7 @@ def send_global_message(self, points3D, bodyId=110):

# N° body à la fin
msg.append(bodyId)
# Heure de capture
self.all_data.append([msg, time()])
self.client.send_message(b'/points', msg)

Expand Down

0 comments on commit 18f9eb6

Please sign in to comment.