PyCharm : comment détecter des objets avec TensorFlow ?

Par:
francoistonic

jeu, 28/05/2026 - 09:34

Le blog PyCharm publie un tutoriel intéressant sur la manière de créer une application pour détecter en direct des objets en utilisant PyCharm et TensorFlow sur Reachy Mini, un robot open source compact. PyCharm sert à coder et à build, puis l'application est envoyée sur le robot. Le projet se découpe en deux parties :

Le projet se découpage en deux parties :

  • Partie 1 : un notebook tourne sur un laptop avec la webcam active, pas de robot nécessaire. Il permet de tester le pipeline de détection et de s'assurer que tout se passe bien.

  • Partie 2 : le robot intègre le même modèle. La détection se fait par les caméras de la tête, et un tableau de bord live sur une page web permet de voir le flux et la détection. 

Typiquement, TensorFlow va capter les frames de l'image depuis la caméra puis les convertir en tenseur TensorFlow. De là, il fait de l'inférence sur un modèle pré-entraîné. Puis, après traitement et analyse, il affiche en temps réel la détection.

Pour ce projet, il faut : 

Python 3.12 minimum

PyCharm + Jupyter Notebook

Reachy Mini

Avoir les bases d'usage de TensorFlow

Le LLM utilisé est SSD MobileNet V2 (hub TensorFlow) qui est entraîné sur Open Images V4. Il faut importer le modèle et installer les dépendances. Ensuite, il faut coder la détection et l'affichage des cadres de détection. 

def detect_objects(frame_bgr, min_score=0.5, max_detections=10):
rgb = frame_bgr[:, :, ::-1]
img_tensor = tf.image.convert_image_dtype(rgb, tf.float32)[tf.newaxis, ...]
results = detector.signatures['default'](img_tensor)
boxes = np.array(results["detection_boxes"])
scores = np.array(results["detection_scores"])
class_labels = np.array(results["detection_class_entities"])
if boxes.ndim > 2:
boxes = boxes[0]
if scores.ndim > 1:
scores = scores[0]
if class_labels.ndim > 1:
class_labels = class_labels[0]
scores = np.atleast_1d(scores)
indices = [i for i, score in enumerate(scores) if score >= min_score][:max_detections]
detections = []
for idx in indices:
ymin, xmin, ymax, xmax = boxes[idx]
label = class_labels[idx].decode('utf-8') if isinstance(class_labels[idx], bytes) else str(class_labels[idx])
detections.append({
"box": [ymin, xmin, ymax, xmax],
"score": float(scores[idx]),
"label": label
})
return detections
def draw_detections(frame_bgr, detections):
h, w = frame_bgr.shape[:2]
annotated = frame_bgr.copy()
for det in detections:
ymin, xmin, ymax, xmax = det["box"]
x1, y1 = int(xmin * w), int(ymin * h)
x2, y2 = int(xmax * w), int(ymax * h)
color = (0, 255, 0)
cv2.rectangle(annotated, (x1, y1), (x2, y2), color, 2)
label = f"{det['label']} {det['score']:.0%}"
font_scale, thickness = 0.6, 2
(tw, th), _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, font_scale, thickness)
cv2.rectangle(annotated, (x1, y1 - th - 8), (x1 + tw + 4, y1), color, -1)
cv2.putText(annotated, label, (x1 + 2, y1 - 4),
cv2.FONT_HERSHEY_SIMPLEX, font_scale, (0, 0, 0), thickness)
return annotated

La détection s'appuie sur OpenCV qui est parfait pour ce genre d'usage. 

La partie robot consiste à créer le build et préparer le déploiement dans le dossier reachy_mini_object_detector/. L'installation de l'app se fera par un pip install.

Tutoriel complet : https://blog.jetbrains.com/pycharm/2026/05/build-a-live-object-detection-app-for-reachy-mini-with-tensorflow-and-pycharm/

Et la vidéo :