upd submodules
This commit is contained in:
@@ -4,6 +4,12 @@ class Config:
|
|||||||
CAMERA_TYPE = 'oak' # 'web' или 'oak'
|
CAMERA_TYPE = 'oak' # 'web' или 'oak'
|
||||||
MIRROR_CAMERA = True
|
MIRROR_CAMERA = True
|
||||||
|
|
||||||
|
# ===== Скелет =====
|
||||||
|
POSE_DETECTOR = 'mediapipe' # 'oak' или 'mediapipe'
|
||||||
|
OAK_MODEL_TYPE = 'efficienthrnet2'
|
||||||
|
OAK_DETECTION_THRESHOLD = 0.1
|
||||||
|
OAK_SHAVES = 6
|
||||||
|
|
||||||
# ===== Преобразование позы в скорости =====
|
# ===== Преобразование позы в скорости =====
|
||||||
ARM_CONTROL = {
|
ARM_CONTROL = {
|
||||||
'linear_arm': 'right',
|
'linear_arm': 'right',
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'submodules', 'gestur
|
|||||||
import cv2
|
import cv2
|
||||||
from config import Config
|
from config import Config
|
||||||
from skeleton.mediapipe_detector import MediaPipeDetector
|
from skeleton.mediapipe_detector import MediaPipeDetector
|
||||||
|
from skeleton.oak_pose_detector import OakPoseDetector
|
||||||
from gesture_control.special_gestures import SpecialGestureDetector
|
from gesture_control.special_gestures import SpecialGestureDetector
|
||||||
from ml_gestures_dynamic.predict import DynamicGesturePredictor
|
from ml_gestures_dynamic.predict import DynamicGesturePredictor
|
||||||
|
|
||||||
@@ -20,7 +21,20 @@ def main():
|
|||||||
cfg = Config()
|
cfg = Config()
|
||||||
|
|
||||||
# Детектор скелета
|
# Детектор скелета
|
||||||
|
if cfg.POSE_DETECTOR == 'oak':
|
||||||
|
if cfg.CAMERA_TYPE == 'web':
|
||||||
|
print(f"При вычислении скелета на oak, можно пользоваться только этой же камерой для захвата видео!")
|
||||||
|
return
|
||||||
|
detector = OakPoseDetector(
|
||||||
|
model_type=cfg.OAK_MODEL_TYPE,
|
||||||
|
detection_threshold=cfg.OAK_DETECTION_THRESHOLD,
|
||||||
|
shaves=cfg.OAK_SHAVES
|
||||||
|
)
|
||||||
|
camera = None
|
||||||
|
else:
|
||||||
detector = MediaPipeDetector()
|
detector = MediaPipeDetector()
|
||||||
|
# Захват кадра с камеры
|
||||||
|
camera = create_camera(camera_type=cfg.CAMERA_TYPE, camera_id=cfg.CAMERA_ID, mirror=cfg.MIRROR_CAMERA)
|
||||||
|
|
||||||
# Детектор статичных жестов
|
# Детектор статичных жестов
|
||||||
special_detector = SpecialGestureDetector(
|
special_detector = SpecialGestureDetector(
|
||||||
@@ -48,9 +62,6 @@ def main():
|
|||||||
else:
|
else:
|
||||||
robot = DebugRobot()
|
robot = DebugRobot()
|
||||||
|
|
||||||
# Захват кадра с камеры
|
|
||||||
camera = create_camera(camera_type=cfg.CAMERA_TYPE, camera_id=cfg.CAMERA_ID, mirror=cfg.MIRROR_CAMERA)
|
|
||||||
|
|
||||||
enabled = False
|
enabled = False
|
||||||
# включение управления жестами
|
# включение управления жестами
|
||||||
cross_cooldown = 0
|
cross_cooldown = 0
|
||||||
@@ -60,13 +71,22 @@ def main():
|
|||||||
dome_processed = False
|
dome_processed = False
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
# Получение кадра и скелета в зависимости от типа скелетного детектора
|
||||||
|
if cfg.POSE_DETECTOR == 'oak':
|
||||||
|
frame, landmarks = detector.get_frame_and_pose()
|
||||||
|
if frame is None:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
frame = camera.get_frame()
|
frame = camera.get_frame()
|
||||||
if frame is None:
|
if frame is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
result = detector.detect(frame)
|
result = detector.detect(frame)
|
||||||
if result['success']:
|
if result['success']:
|
||||||
landmarks = result['landmarks']
|
landmarks = result['landmarks']
|
||||||
|
else:
|
||||||
|
landmarks = None
|
||||||
|
|
||||||
|
if landmarks is not None:
|
||||||
|
|
||||||
# Статический жест
|
# Статический жест
|
||||||
special = special_detector.predict(landmarks)
|
special = special_detector.predict(landmarks)
|
||||||
@@ -111,7 +131,11 @@ def main():
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
# Отрисовка
|
# Отрисовка
|
||||||
vis = detector.draw_landmarks(frame, result['pose_landmarks'])
|
if cfg.POSE_DETECTOR == 'oak':
|
||||||
|
vis = detector.draw_landmarks(frame, landmarks) if landmarks is not None else frame
|
||||||
|
else:
|
||||||
|
vis = detector.draw_landmarks(frame, result['pose_landmarks']) if landmarks is not None else frame
|
||||||
|
|
||||||
cv2.putText(vis, f"Move: {'ON' if enabled else 'OFF'}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0) if enabled else (0,0,255), 2)
|
cv2.putText(vis, f"Move: {'ON' if enabled else 'OFF'}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0) if enabled else (0,0,255), 2)
|
||||||
cv2.putText(vis, f"L:{linear:.2f} A:{angular:.2f}", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,0), 2)
|
cv2.putText(vis, f"L:{linear:.2f} A:{angular:.2f}", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,0), 2)
|
||||||
if special != 'none':
|
if special != 'none':
|
||||||
@@ -132,7 +156,12 @@ def main():
|
|||||||
if cv2.waitKey(1) & 0xFF == ord('q'):
|
if cv2.waitKey(1) & 0xFF == ord('q'):
|
||||||
break
|
break
|
||||||
|
|
||||||
|
if cfg.POSE_DETECTOR == 'oak':
|
||||||
|
detector.release()
|
||||||
|
else:
|
||||||
camera.release()
|
camera.release()
|
||||||
|
detector.pose.close()
|
||||||
|
|
||||||
cv2.destroyAllWindows()
|
cv2.destroyAllWindows()
|
||||||
robot.quit()
|
robot.quit()
|
||||||
|
|
||||||
|
|||||||
Submodule submodules/gesture_detection updated: a751f51078...e2e24a5e7e
Submodule submodules/robot_controller_base updated: 9f65622b63...b34711ebc6
Reference in New Issue
Block a user