Arguments parser in hpe_json.py
This commit is contained in:
37
README.md
37
README.md
@@ -2,28 +2,28 @@
|
|||||||
|
|
||||||
## Запуск
|
## Запуск
|
||||||
|
|
||||||
Для вебкамеры, где 0 - индекс самой вебкамеры, если отличается, то следует заменить на нужный.
|
Для тестового запуска через вебкамеру с индексом 0.
|
||||||
```console
|
```console
|
||||||
python3 hpe_videocapture.py 0 scale_pose
|
python3 hpe_json.py --address_input 0 --show_image True
|
||||||
```
|
```
|
||||||
|
|
||||||
Для чтения из файла
|
Скрипт принимает следующие аргументы:
|
||||||
|
|
||||||
|
* '--address_input' (type=str, default="0"): путь к файлу или индекс вебкамеры
|
||||||
|
* '--scale_pose' (type=float, default=0.42): ширина плеч в метрической системе
|
||||||
|
* '--crop_image' (type=float, default=1.0): коэффициент, если нужно изменить размер изображения
|
||||||
|
* '--osc_address' (type=str, default="0.0.0.0"): ip-адрес для osc клиента
|
||||||
|
* '--osc_port' (type=int, default="5005"): порт для osc клиента
|
||||||
|
* '--osc_message_address' (type=str, default="/pose/0"): адрес для вывода сообщения через osc клиент
|
||||||
|
* '--output_method' (type=str, default='file', choices=['file', 'osc']): тип вывода через файл или osc клиент
|
||||||
|
* '--mirror_image' (type=bool, default=True): горизнтальное отображение выходного изображения
|
||||||
|
* '--show_image' (type=bool, default=False): вывод выходного изображения через opencv
|
||||||
|
|
||||||
|
Для теста с matplotlib нужно запустить скрипт (пример с вебкамерой с индексом 0):
|
||||||
```console
|
```console
|
||||||
python3 hpe_videocapture.py path_to_video scale_pose
|
python3 hpe_videocapture.py 0
|
||||||
```
|
```
|
||||||
|
|
||||||
Параметр scale_pose - ширина плеч. По умолчанию равен 0,42.
|
|
||||||
|
|
||||||
Есть экспериментальная версия для взаимодействия с ffmpeg и osc:
|
|
||||||
```console
|
|
||||||
python3 hpe_ffmpeg.py
|
|
||||||
```
|
|
||||||
Внутри кода записаны параметры для osc соединения:
|
|
||||||
* osc_address = "10.199.0.14"
|
|
||||||
* osc_port = 5005
|
|
||||||
|
|
||||||
Предполагается вывести выше указанные параметры либо в аргументы, либо в конфиг-файл.
|
|
||||||
|
|
||||||
## Зависимости
|
## Зависимости
|
||||||
|
|
||||||
Библиотеки python:
|
Библиотеки python:
|
||||||
@@ -32,7 +32,7 @@ python3 hpe_ffmpeg.py
|
|||||||
* matplotlib (можно сделать опциональной)
|
* matplotlib (можно сделать опциональной)
|
||||||
* opencv-python
|
* opencv-python
|
||||||
* json
|
* json
|
||||||
* python-osc (в файле hpe_ffmpeg.py)
|
* python-osc
|
||||||
|
|
||||||
Библиотека mediapipe требует cudatoolkit и cudnn для работы с gpu.
|
Библиотека mediapipe требует cudatoolkit и cudnn для работы с gpu.
|
||||||
|
|
||||||
@@ -76,6 +76,3 @@ python3 hpe_ffmpeg.py
|
|||||||
* hol_smooth_landmarks = True
|
* hol_smooth_landmarks = True
|
||||||
* hol_min_detection_confidence = 0.7
|
* hol_min_detection_confidence = 0.7
|
||||||
* hol_min_tracking_confidence = 0.5
|
* hol_min_tracking_confidence = 0.5
|
||||||
|
|
||||||
Физические параметры человека (ширина плеч в метрах):
|
|
||||||
* scale_pose = 0,42
|
|
||||||
|
|||||||
434
hierarchy_data.json
Normal file
434
hierarchy_data.json
Normal file
@@ -0,0 +1,434 @@
|
|||||||
|
{
|
||||||
|
"hip_r": {
|
||||||
|
"visible": 3.283990008640103e-05,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.23185212236810918,
|
||||||
|
"y": 0.00371596784027843,
|
||||||
|
"z": -1.3490804656954876
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hip_l": {
|
||||||
|
"visible": 3.066848512389697e-05,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.49386722361764196,
|
||||||
|
"y": -0.004551878615287206,
|
||||||
|
"z": -1.3717949211023943
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"visible": 1.0,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.32104200438618696,
|
||||||
|
"y": -2.4274882656989587,
|
||||||
|
"z": 1.2036544053764062
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pelvis": {
|
||||||
|
"visible": 3.1754192605149e-05,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.32104200438618696,
|
||||||
|
"y": 0.00036978822761340243,
|
||||||
|
"z": 1.2036544053764062
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"head": {
|
||||||
|
"visible": 1.0,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.4018470055921379,
|
||||||
|
"y": 1.4863796147074047,
|
||||||
|
"z": -0.49572140460617947
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spine_01": {
|
||||||
|
"visible": 0.9558884007726984,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.3523824967200987,
|
||||||
|
"y": 1.2570843949458836,
|
||||||
|
"z": -0.3722668270030201
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spine_02": {
|
||||||
|
"visible": 0.8642053121876015,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.3458276216245312,
|
||||||
|
"y": 1.136539767039317,
|
||||||
|
"z": -0.23441402075809645
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spine_03": {
|
||||||
|
"visible": 0.7177959614459576,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.335360096787125,
|
||||||
|
"y": 0.9440412269098308,
|
||||||
|
"z": -0.014275932352623016
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spine_04": {
|
||||||
|
"visible": 0.5484203400028553,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.323250600260258,
|
||||||
|
"y": 0.7213467084507186,
|
||||||
|
"z": 0.24039376830583514
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spine_05": {
|
||||||
|
"visible": 0.2289994832763534,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.3004136316210739,
|
||||||
|
"y": 0.30137320064339257,
|
||||||
|
"z": 0.7206683985833275
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"knee_r": {
|
||||||
|
"visible": 0.021311474964022636,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.224715555879875,
|
||||||
|
"y": 0.04331640486588048,
|
||||||
|
"z": -1.848822215632786
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"knee_l": {
|
||||||
|
"visible": 0.01792996935546398,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.479653365369021,
|
||||||
|
"y": 0.04956380758879055,
|
||||||
|
"z": -1.8599454030851834
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ankle_r": {
|
||||||
|
"visible": 0.004003077745437622,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.22040579799855411,
|
||||||
|
"y": -0.6035946591415875,
|
||||||
|
"z": -2.2528606986185435
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ankle_l": {
|
||||||
|
"visible": 0.005025549326092005,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.46486163125941043,
|
||||||
|
"y": -0.49356652566551906,
|
||||||
|
"z": -2.266784775168302
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ball_r": {
|
||||||
|
"visible": 0.0033030910417437553,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.2533501274660685,
|
||||||
|
"y": -0.2277205314512301,
|
||||||
|
"z": -2.4257652906916354
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ball_l": {
|
||||||
|
"visible": 0.007918210700154305,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.4167605323921076,
|
||||||
|
"y": -0.07112429439358949,
|
||||||
|
"z": -2.4274882656989587
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heel_r": {
|
||||||
|
"visible": 0.003357355482876301,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.214153237082301,
|
||||||
|
"y": -0.6405563543831717,
|
||||||
|
"z": -2.3297296844741737
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heel_l": {
|
||||||
|
"visible": 0.009946711361408234,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.4684025052154504,
|
||||||
|
"y": -0.5260255564826632,
|
||||||
|
"z": -2.3472397765876565
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shoulder_r": {
|
||||||
|
"visible": 0.9999551773071289,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.18561357625361946,
|
||||||
|
"y": 0.7721517346988932,
|
||||||
|
"z": -0.69730114825041
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shoulder_l": {
|
||||||
|
"visible": 0.9999798536300659,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.60345881243435,
|
||||||
|
"y": 0.7539580847363371,
|
||||||
|
"z": -0.7356984098989899
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clavicle_r": {
|
||||||
|
"visible": 0.3903829998635262,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.29915971923785645,
|
||||||
|
"y": 0.6344740294859538,
|
||||||
|
"z": 0.30770636512969557
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clavicle_l": {
|
||||||
|
"visible": 0.45094530122838333,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.3989762273134593,
|
||||||
|
"y": 0.6323009442726204,
|
||||||
|
"z": 0.3072717480870289
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"elbow_r": {
|
||||||
|
"visible": 0.3276873528957367,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.09727160822155982,
|
||||||
|
"y": 0.6303470208087711,
|
||||||
|
"z": -1.0638687217845344
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"elbow_l": {
|
||||||
|
"visible": 0.3048570454120636,
|
||||||
|
"translation": {
|
||||||
|
"x": 0.6504693670538582,
|
||||||
|
"y": 0.5472289809491672,
|
||||||
|
"z": -1.1147813886926048
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"rotx": 0,
|
||||||
|
"roty": 0,
|
||||||
|
"rotz": 0
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
89
hpe_json.py
Normal file
89
hpe_json.py
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
import cv2
|
||||||
|
import time
|
||||||
|
from hpe_mp_class import hpe_mp_class
|
||||||
|
import json
|
||||||
|
import argparse
|
||||||
|
from pythonosc import udp_client
|
||||||
|
|
||||||
|
# Arguments
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--address_input', type=str, default="0", help='input video path or webcam index')
|
||||||
|
parser.add_argument('--scale_pose', type=float, default=0.42, help='shoulder width')
|
||||||
|
parser.add_argument('--crop_image', type=float, default=1.0, help='coefficient of image cropping')
|
||||||
|
parser.add_argument('--osc_address', type=str, default="0.0.0.0", help='osc_address')
|
||||||
|
parser.add_argument('--osc_port', type=int, default="5005", help='port')
|
||||||
|
parser.add_argument('--osc_message_address', type=str, default="/pose/0", help='osc address for message in send_message function')
|
||||||
|
parser.add_argument('--output_method', type=str, default='file', choices=['file', 'osc'], help='type os output data method')
|
||||||
|
parser.add_argument('--mirror_image', type=bool, default=True, help='horizontal image mirroring just for show')
|
||||||
|
parser.add_argument('--show_image', type=bool, default=False, help='show image in opencv interface')
|
||||||
|
args = parser.parse_args()
|
||||||
|
address_input = args.address_input
|
||||||
|
for i in range(0, 100):
|
||||||
|
if address_input == str(i):
|
||||||
|
address_input = i
|
||||||
|
scale_pose = args.scale_pose
|
||||||
|
osc_address = args.osc_address
|
||||||
|
osc_port = args.osc_port
|
||||||
|
osc_message_address = args.osc_message_address
|
||||||
|
output_method = args.output_method
|
||||||
|
crop = args.crop_image
|
||||||
|
mirror_image = args.mirror_image
|
||||||
|
show_image = args.show_image
|
||||||
|
|
||||||
|
# OSC client
|
||||||
|
client = udp_client.SimpleUDPClient(osc_address, osc_port)
|
||||||
|
|
||||||
|
# Videocapture
|
||||||
|
cap = cv2.VideoCapture(address_input)
|
||||||
|
|
||||||
|
# Preprocessing parameters
|
||||||
|
frame_width = int(crop*cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
||||||
|
frame_height = int(crop*cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
||||||
|
|
||||||
|
# FPS variables
|
||||||
|
pTime = 0
|
||||||
|
cTime = 0
|
||||||
|
|
||||||
|
# Mediapie class
|
||||||
|
mp_cl = hpe_mp_class()
|
||||||
|
|
||||||
|
while True:
|
||||||
|
# Reading frame
|
||||||
|
success, img = cap.read()
|
||||||
|
|
||||||
|
# Image preprocessing
|
||||||
|
if crop != 1.0:
|
||||||
|
img = cv2.resize(img, (frame_width, frame_height))
|
||||||
|
|
||||||
|
# Mediapipe
|
||||||
|
mp_cl.process(img, scale_pose=scale_pose)
|
||||||
|
mp_cl.show(img)
|
||||||
|
|
||||||
|
# FPS
|
||||||
|
cTime = time.time()
|
||||||
|
fps = 1. / (cTime - pTime)
|
||||||
|
pTime = cTime
|
||||||
|
|
||||||
|
# Showing
|
||||||
|
if show_image:
|
||||||
|
if mirror_image:
|
||||||
|
img = cv2.flip(img, 1) # mirror
|
||||||
|
cv2.putText(img, str(int(fps)), (22, 32), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 0), 2)
|
||||||
|
cv2.putText(img, str(int(fps)), (20, 30), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2)
|
||||||
|
cv2.imshow("Main", img)
|
||||||
|
|
||||||
|
# Output
|
||||||
|
if output_method == 'file':
|
||||||
|
# JSON
|
||||||
|
res = mp_cl.getJSON()
|
||||||
|
with open('hierarchy_data.json', 'w', encoding='utf-8') as f:
|
||||||
|
json.dump(res, f, ensure_ascii=False, indent=4)
|
||||||
|
else:
|
||||||
|
# OSC
|
||||||
|
res = mp_cl.getJSON()
|
||||||
|
client.send_message(osc_message_address, res)
|
||||||
|
|
||||||
|
# Interface
|
||||||
|
key = cv2.waitKey(1)
|
||||||
|
if key == 27:
|
||||||
|
break
|
||||||
Reference in New Issue
Block a user