v4.5.3

v4.5.3 est une version majeure : autofocus OV5640, tracé de lignes anticrénelé, décodeur JPEG matériel intégré au tronc commun, gains de capacité importants pour l’i.MX RT (RT1060) et un large ensemble de correctifs pour la caméra et l’ISP. Plusieurs méthodes d’image rarement utilisées ont été supprimées et certaines API ISP/affichage ont changé — lisez les changements incompatibles ci-dessous.

Points marquants

  • Autofocus OV5640 — activé sur OpenMV 4 / 4 Plus / RT1060 (sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)), avec un exemple.

  • draw_line() anticrénelé et un décodeur JPEG matériel STM32 intégré au tronc commun (décompression JPEG plus rapide).

  • OpenMV RT1060 a gagné ulab, les opérations ISP, set_framerate() / set_frame_callback(), un tampon d’image bien plus grand et le pilote CAN.

  • Incompatibilité : Image.div() / cartoon() / mul() ont été supprimées et certaines API ISP/affichage ont changé — voir les changements incompatibles.

Nouvelles fonctionnalités

  • Autofocus OV5640 — le micrologiciel d’autofocus est activé sur OPENMV4, OPENMV4P et OPENMV RT1060 ; déclenchez-le avec sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS). Un nouvel exemple 07-Sensor-Control/autofocus.py a été ajouté.

  • Tracé de lignes anticrénelédraw_line() a gagné l’anticrénelage.

  • Contrôleurs d’affichage SPI personnalisésSPIDisplay accepte désormais un mot-clé controller= et expose un point d’accroche bus_write pour les séquences d’initialisation/commande personnalisées.

  • Amélioration de Image.ccm() — accepte désormais des matrices imbriquées 3x3 / 4x3 / 3x4 / 4x4 et des tableaux ulab (avec une ligne de décalage optionnelle par canal) ; ajout d’un exemple de correction des couleurs.

  • Capture JPEG i.MX RT — capture sensor.JPEG sur Arduino Portenta/Nicla Vision/Giga, ainsi que set_framerate() et set_frame_callback() sur le port mimxrt.

  • Validation des modèles TFLite — les modèles portent désormais un hachage de l’ordre des opérateurs et la taille de l’ensemble d’opérateurs.

  • WiFi — ajout de constantes de mode de sécurité CYW43 ; nouveaux scripts d’exemple de contrôle de carte i.MX RT (Pin/ADC/CAN/I2C/PWM/SPI/UART/…).

Autres changements et améliorations

  • MicroPython mis à jour vers 1.22 ; CMSIS mis à jour vers 5.9.0.

  • Décodeur JPEG matériel STM32 intégré au tronc commun — décompression JPEG plus rapide sur le codec embarqué.

  • Optimisation de Image.invert() / negate() et des opérations d’image binaires/mathématiques (intrinsèques CMSIS).

  • Les bibliothèques rpc et vl53l1x ont été rendues portables (utilisation de machine / time au lieu de pyb), de sorte qu’elles fonctionnent sur les ports non-STM32.

  • memcpy de tampon d’image accéléré par DMA sur OpenMV H7 / H7 Plus / Pro / Pure Thermal et Arduino Giga / Nicla Vision / Portenta H7 ; le STM32 ne scrute désormais les périphériques I2C qu’une fois par scan pour un démarrage plus rapide.

Corrections de bugs

Caméra et capteurs :

  • Correction du XCLK de la caméra STM32 vers un véritable rapport cyclique de 50 % et d’un bug lorsque la fréquence d’horloge de la caméra est réglée à zéro ; correction du recadrage+transposition Bayer, du décalage de couleur YUV422 et de set_windowing() sur le port mimxrt.

  • Correction de la détection de l’ID de puce du GC2145 et de hmirror/vflip sur les montages pivotés ; correction du PAJ6100 sur le RT1062 et d’un débordement de tampon SPI PixArt PAJ7620/PAW3902.

Traitement d’image :

  • Correction du rognage de roi de find_rects(), de la troncature du décalage fractionnaire de morph(), des valeurs par défaut de contraste/luminosité de image.gamma(), des décalages A/B de get_threshold() sur RGB565 et du décodage JPEG de dimensions non multiples de 8.

Système et bibliothèques :

  • machine.LED.value() sans argument renvoie désormais l’état de la LED au lieu de l’effacer ; correction de la désinitialisation du SSEL SPI sur un bus partagé, de machine.deepsleep() sur le RT1062, d’un plantage de TF sur des opérateurs manquants et de l’auto-activation de la carte réseau WINC1500/ninaw10 lors de connect().

Prise en charge matérielle et des cartes

  • OpenMV RT1060 — ulab et opérations ISP activés, tampon d’image plus grand (10M→20M) / fb_alloc (2M→11M), pilote CAN restauré, plus de tas.

  • Arduino GIGA — prise en charge de la caméra GC2145, avec détection automatique GC2145/OV5640 (elles partagent une adresse I2C).

  • i.MX RT — prise en charge de la capture sensor.JPEG.

Changements d’API incompatibles

Ruptures d’API visibles par l’utilisateur entre v4.5.2 et v4.5.3. Portée : modules C Python dans modules/ et bibliothèques Python dans scripts/libraries/.

Chaque changement est étiqueté selon son impact :

  • mineur — API étroite ; n’affecte que les scripts qui l’utilisaient.

  • comportement — même API, résultats différents ; revérifiez les scripts réglés.

Les changements sont regroupés par impact dans cet ordre. Si vous voulez simplement porter votre code, passez directement à la liste de contrôle de migration à la fin. Chaque hachage de commit renvoie à son diff sur GitHub.

Méthodes d’image supprimées (mineur)

Image.div(), Image.cartoon() (et son exemple) et Image.mul() ont été supprimées.

Commits : 7c932602e, 055a468b8, 4fe7fb63b

API du module d’affichage (mineur)

Le repli hérité sur le nom de module udisplay a été supprimé — le module est enregistré uniquement sous display. Les méthodes dsi_write() / dsi_read() réservées au DSI ont été remplacées par bus_write() / bus_read(), désormais disponibles sur tous les contrôleurs d’affichage.

Commits : 7df6694c3, 7d1f378a0

Changements d’API MQTT et tf.regression (mineur)

Le MQTTClient de la bibliothèque mqtt a été retravaillé : port est désormais obligatoire, de nouveaux mots-clés de constructeur ssl_params / callback et un argument timeout sur connect() ont été ajoutés, les anciennes valeurs par défaut ssl= / port=0 ont été supprimées, et check_msg() est désormais non bloquant. tf.regression() a été réécrit — sa signature est maintenant regression(model, array) et il gère les modèles 1D/2D/3D et quantifiés (int8).

Commits : d12874c63, c5ec576c1

Changements de comportement ISP / capteur (comportement)

Image.awb() a été retravaillé — gray-world (par défaut) vs white-patch (max=True) est désormais explicite, et l’argument max ainsi que les arguments gamma / contrast / brightness de Image.gamma() sont désormais réservés aux mots-clés (les appels positionnels doivent être mis à jour). La transposition d’image est désormais désactivée pour YUV422 (elle produisait auparavant une sortie incorrecte) et le décalage de couleur YUV422 a été corrigé pour correspondre à Bayer. Le chemin JPEG STM32 lève désormais une erreur en cas de non-correspondance de géométrie JPEG au lieu de produire une image corrompue, et le mode point d’accès WiFi applique désormais un mode de sécurité par défaut sur les ports STM32 et i.MX RT.

Commits : 36d5cecbd, 00500ccde, c1eeaefd6, 333fb2b5f, 55cab8733, c7d40f6af

Liste de contrôle de migration

Pour un portage propre vers v4.5.3, le travail typique est :

  1. Cessez d’utiliser Image.div() / cartoon() / mul() (les méthodes supprimées).

  2. Importez le module d’affichage sous display et passez de dsi_write/ dsi_read à bus_write/bus_read (le changement d’API d’affichage).

  3. Mettez à jour la construction de MQTTClient (port est obligatoire ; ssl_params/callback) et tout appel à tf.regression() (les changements d’API des bibliothèques).

  4. Passez max de awb() et gamma/contrast/ brightness de gamma() comme arguments nommés, et revérifiez les hypothèses sur YUV422/transposition et la sécurité en mode point d’accès (les changements ISP/capteur).