Outils pour utilisateurs

Outils du site


movenet

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
movenet [2021/10/09 06:20] sergemovenet [2021/12/16 09:07] (Version actuelle) – [Ressources] serge
Ligne 1: Ligne 1:
 ====== MoveNet ====== ====== MoveNet ======
  
 +=====Ressources=====
   * https://www.tensorflow.org/hub/tutorials/movenet   * https://www.tensorflow.org/hub/tutorials/movenet
 +  * https://tfhub.dev/s?q=movenet
  
 +=====Optimisation de Tensorflow =====
 +Movenet appelle Tensorflow Lite, qui n'est pas optimisé pour GPU. Inutile d'installer Cuda.\\
 +Il ne tourne que sur CPU, et demande à avoir AVX2 et FMA.\\
 +Pour compiler Tensorflow, voir **[[linux_compiler_tensorflow_avec_bazel|]]**
 +
 +Altrnatives, trouver un truc tout fait:
 +  * https://www.intel.com/content/www/us/en/developer/articles/guide/optimization-for-tensorflow-installation-guide.html
 +
 +=====Exemple=====
 +  * https://tfhub.dev/google/lite-model/movenet/singlepose/thunder/3
 +
 +<file python movenet_test.py>
 +from time import time
 +import cv2
 +import numpy as np
 +import tensorflow as tf
 +
 +def draw(frame, keypoints_with_scores):
 +    for item in keypoints_with_scores[0][0]:
 +        if item[2] > 0.3:  # confiance
 +            x = int(item[1]*720)  # numpy array x est le 2ème
 +            y = int(item[0]*720)
 +            cv2.circle(frame, (x, y), 6, color=(0,0,255), thickness=-1)
 +    return frame
 +
 +models = [  "lite-model_movenet_singlepose_thunder_3.tflite",
 +            "lite-model_movenet_singlepose_thunder_tflite_float16_4.tflite",
 +            "lite-model_movenet_singlepose_thunder_tflite_int8_4.tflite"]
 +
 +interpreter = tf.lite.Interpreter(model_path=models[0])
 +interpreter.allocate_tensors()
 +
 +cv2.namedWindow('color', cv2.WND_PROP_FULLSCREEN)
 +cam = cv2.VideoCapture(2)
 +cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
 +cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
 +
 +t0 = time()
 +nbr = 0
 +
 +while 1:
 +
 +    nbr += 1
 +    ret, frame = cam.read()
 +
 +    if not ret:
 +        continue
 +
 +    # Extraction d'une image carrée [rows, columns]
 +    frame = frame[:, 280:1000]
 +
 +    image = tf.expand_dims(frame, axis=0)
 +    # Resize and pad the image to keep the aspect ratio and fit the expected size.
 +    image = tf.image.resize_with_pad(image, 256, 256)
 +
 +    # TF Lite format expects tensor type of float32.
 +    input_image = tf.cast(image, dtype=tf.float32)
 +    input_details = interpreter.get_input_details()
 +    output_details = interpreter.get_output_details()
 +
 +    interpreter.set_tensor(input_details[0]['index'], input_image.numpy())
 +    interpreter.invoke()
 +
 +    # Output is a [1, 1, 17, 3] numpy array.
 +    keypoints_with_scores = interpreter.get_tensor(output_details[0]['index'])
 +
 +    frame = draw(frame, keypoints_with_scores)
 +
 +    # Affichage de l'image
 +    cv2.imshow('color', frame)
 +
 +    # Calcul du FPS, affichage toutes les 10 s
 +    if time() - t0 > 10:
 +        print("FPS =", round(nbr/10, 2))
 +        t0, nbr = time(), 0
 +
 +    # Pour quitter
 +    if cv2.waitKey(1) == 27:
 +        break
 +
 +cv2.destroyAllWindows()
 +</file>
 +
 +=====Des essais amusants=====
 +  * **[[https://github.com/sergeLabo/movenet|Essai de movenet par SergeLabo]]**
 +
 +
 +
 +{{tag>python sb skeleton tensorflow}}
movenet.1633760401.txt.gz · Dernière modification : 2021/10/09 06:20 de serge