v4.5.1

v4.5.1 ajoute des indications de dessin pour l’orientation et le rapport d’aspect des images, le chargement d’images directement depuis un chemin de fichier, un ioctl de champ de vision large pour le GC2145, et une nouvelle API de contrôleur de rétroéclairage. Elle remanie également le constructeur Image(), les API display et l’analyse des arguments des modules — lisez les changements incompatibles ci-dessous.

Points forts

  • Indications de dessindraw_image() a gagné des indications d’orientation (HMIRROR/VFLIP/TRANSPOSE, ROTATE_90/180/270) et de mise à l’échelle selon l’aspect (SCALE_ASPECT_KEEP/EXPAND/IGNORE).

  • Charger des images depuis le disquedraw_image() / display.write() acceptent une chaîne de chemin de fichier.

  • Contrôle du rétroéclairage — nouvelles classes DACBacklight / PWMBacklight et un argument d’affichage backlight=.

  • Incompatibilité : le constructeur Image(), les API display et l’analyse des arguments des modules ont changé — voir les changements incompatibles.

Nouvelles fonctionnalités

  • Indications d’orientation de draw_image()image.HMIRROR, image.VFLIP, image.TRANSPOSE, ainsi que les raccourcis image.ROTATE_90 / ROTATE_180 / ROTATE_270.

  • Indications d’aspect de draw_image()image.SCALE_ASPECT_KEEP / SCALE_ASPECT_EXPAND / SCALE_ASPECT_IGNORE pour ajuster / étendre / étirer.

  • Constantes de paletteimage.PALETTE_RAINBOW et image.PALETTE_IRONBOW (déplacées dans le module image).

  • Champ de vision large — nouveaux ioctls sensor.IOCTL_SET_FOV_WIDE / IOCTL_GET_FOV_WIDE (sur le GC2145, jusqu’à 5x de mise à l’échelle du capteur).

  • Charger depuis le disquedraw_image() et display.write() acceptent une chaîne de chemin de fichier d’image source, la chargeant directement depuis le stockage.

  • Contrôleurs de rétroéclairage — nouvelles classes DACBacklight et PWMBacklight (importables depuis display), et un argument réservé aux mots-clés backlight= sur les constructeurs d’affichage SPI/parallèle.

Autres changements et améliorations

  • Le pilote d’affichage DSI ST7701 a été déplacé dans son propre module st7701.py (toujours importable via from display import *) et est figé sur l’Arduino Giga ; le pilote IMU lsm9ds1 a été figé sur l’Arduino Nano 33 BLE Sense.

  • Les caméras MT9V022 / MT9V034 (à obturateur global) appliquent désormais une correction du bruit de ligne pour une meilleure qualité d’image.

  • Le volume de stockage de masse USB de l’i.MX RT est désormais étiqueté comme un disque OpenMV.

Corrections de bugs

Caméra et capteurs :

  • Correction de la détection des coins (find_keypoints() FAST/AGAST) sur les images de plus de 480 lignes — le tampon par ligne est désormais dimensionné selon la hauteur de l’image.

  • Ajout de la prise en charge de la broche FSYNC pour des snapshot() synchronisés sur la trame sur i.MX RT (OpenMV RT1060), et correction des broches SPI4 MOSI/MISO inversées sur le RT1060.

Affichage et vidéo :

  • Correction de l’ordre des arguments du constructeur SPIDisplay (bgr, byte_swap, triple_buffer étaient appliqués aux mauvais paramètres).

  • Correction de la corruption d’image du shield TV lors du dessin d’une image avec un rectangle spécifié, et des limites de trame MJPEG incorrectes lors de l’enregistrement de trames mises à l’échelle.

Réseau :

  • Le mode AP WiFi WINC n’impose plus l’ancienne restriction au WEP uniquement — les modes AP ouvert et WPA fonctionnent avec une gestion correcte du PSK.

Matériel et prise en charge des cartes

  • OpenMV RT1060 — broche FSYNC et broches SPI4 corrigées.

  • Arduino GIGA — contournement de fiabilité QSPI ; afficheur ST7701 figé.

  • Arduino Nano 33 BLE Sense — pilote IMU lsm9ds1 figé.

Changements d’API incompatibles

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

Chaque changement est étiqueté selon son impact :

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

  • comportement — même API, résultats différents ; revérifiez les scripts ajusté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 hash de commit renvoie vers son diff sur GitHub.

Constructeur Image() et API display (mineur)

Le constructeur image.Image a été remanié pour utiliser des arguments nommés (height, pixformat, buffer=, copy_to_fb=) ; il peut désormais construire une image à partir d’un bytearray/tampon existant, et un tampon est requis pour les formats compressés. display.write() a été remanié : x_scale/y_scale prennent désormais un float (rapport d’échelle) ou un int (taille cible en pixels) et les mots-clés distincts x_size/y_size ont été supprimés. Le premier argument positionnel de WINC.connect() a été renommé essidssid, et les résultats de scan WiFi WINC sont passés à (ssid_bytes, bssid_bytes, channel, rssi, security, N) (SSID/BSSID sont désormais des octets ; le BSSID n’est plus une chaîne MAC formatée).

Commits : 6752c95ac, 161737092, 8178c237c, b6cdf8de1

Plage de rétroéclairage, mise à l’échelle et arguments réservés aux mots-clés (comportement)

Display.backlight() prend désormais une intensité de 0 à 100 (0 = éteint, 100 = maximum) au lieu de 0 à 255, levant une ValueError hors plage. Les valeurs entières x_scale/y_scale sont désormais traitées comme un facteur d’échelle multiplicatif (comme les floats) plutôt que comme une dimension cible en pixels — cela affecte fir.snapshot()/draw_ir(), tof.snapshot()/ draw_depth(), display, et la mise à l’échelle tv. L’analyse des arguments des modules sensor, fir, tof, tv, mjpeg, gif, imageio, tf et audio a été unifiée, rendant plusieurs options auparavant positionnelles réservées aux mots-clés (les noms, valeurs par défaut et comportements sont par ailleurs inchangés).

Commits : 391ec443f, 8bd25d6cd, 477312656, 08bf62a32, a4c0f20bf, 9b411a66d, 3d679f5a6, d15fc6b8d, 555e67ecd

Liste de contrôle de migration

Pour un portage propre vers v4.5.1, le travail typique consiste à :

  1. Mettre à jour la construction de Image() vers la nouvelle forme à mots-clés, faire passer display.write() hors de x_size/y_size, et renommer WINC.connect() essidssid (gérer les nouveaux tuples de scan basés sur des octets) (les changements constructeur/display/WINC).

  2. Remettre à l’échelle les appels Display.backlight() sur 0 à 100, revérifier toute utilisation entière de x_scale/y_scale, et passer les options de module auparavant positionnelles comme mots-clés (les changements de comportement).