v3.3.0

v3.3.0 est une version majeure. Elle ajoute la prise en charge complète de la caméra thermique FLIR Lepton avec une nouvelle interface sensor.ioctl() et des palettes de couleurs, un module de sortie vidéo SPI tv, le mode déclenché à obturateur global, un grand ensemble de nouvelles méthodes de dessin/analyse image (gamma_corr(), draw_ellipse(), draw_edges(), de nombreuses propriétés de blob), ainsi que de nouvelles bibliothèques ToF / moteur / linalg. L’API cpufreq a été retravaillée et sensor.set_framesize() lève désormais une exception — lisez les changements incompatibles ci-dessous.

Points forts

  • FLIR Lepton — prise en charge complète de la caméra thermique via la nouvelle interface sensor.ioctl(), des palettes de couleurs et image.to_rainbow().

  • Module tv — sortie vidéo SPI TV / composite.

  • Mode déclenché à obturateur global — capture déclenchée du MT9V034 via sensor.ioctl().

  • Imageriegamma_corr(), draw_ellipse(), draw_edges(), fusion alpha de draw_image() et de nombreuses nouvelles propriétés de blob.

  • Nouvelles bibliothèques — distance ToF VL53L1X, pilote de moteur TB6612, micro-linalg.

  • Incompatible : l’API cpufreq a été retravaillée, sensor.set_framesize() lève désormais une exception en cas d’échec, sensor.alloc_extra_fb() a abandonné Bayer/JPEG, et les arguments positionnels de image.replace() ont été décalés — voir les changements incompatibles.

Nouvelles fonctionnalités

  • FLIR Lepton — ajout de sensor.ioctl() pour le contrôle spécifique au capteur et d’un ensemble complet d’ioctls Lepton (radiométrie, rafraîchissement/résolution, exécution de commande, définition/lecture d’attribut, température FPA/AUX en °C, mode/plage de mesure, largeur/hauteur), de sensor.set_color_palette() / sensor.get_color_palette() avec sensor.PALETTE_RAINBOW / PALETTE_IRONBOW, de image.to_rainbow() et de scripts d’exemple Lepton (27-Lepton).

  • Mode déclenchéIOCTL_SET_TRIGGERED_MODE / IOCTL_GET_TRIGGERED_MODE pour la capture déclenchée à obturateur global du MT9V034, avec des exemples à haute fréquence d’images et en mode déclenché.

  • Module tv — ajout des liaisons de sortie vidéo SPI TV / composite.

  • Imagerie — ajout de image.gamma_corr(), image.draw_ellipse(), image.draw_edges(), de la fusion alpha de draw_image(), d’un mot-clé mask= sur clear(), réintroduction de mask_rectangle() / mask_circle() / mask_ellipse(), des mots-clés rotation / hmirror / vflip sur draw_string() / draw_text(), d’un mot-clé transpose (et des alias assign / set) sur replace(), des paramètres x_scale / y_scale de copy() ainsi que crop() / scale(), d’un constructeur Image() à partir des dimensions, du format de pixel sensor.BINARY, de l’exportation des fonctions de conversion d’espace colorimétrique, et de nombreuses nouvelles propriétés de blob (corners, perimeter, roundness, elongation, extent, compactness, solidity, convexity, enclosing_circle, enclosed_ellipse, rotation).

  • Bibliothèques — ajout du pilote de capteur de distance ToF vl53l1x, du pilote de moteur tb6612 (avec des exemples de Motor-Shield à moteur CC et pas à pas) et d’une bibliothèque micro-linalg (ulinalg / umatrix).

  • Mise à niveau de FatFS vers FF13C (compatible exFAT).

Autres changements et améliorations

  • Amélioration de la qualité JPEG par défaut (milieu de la plage bas–haut au lieu d’une valeur codée en dur) ; les opérations d’image sur place ne nécessitent plus de répéter l’image comme premier argument ; draw_string() accepte des valeurs d’échelle non entières.

Corrections de bogues

Caméra et capteurs :

  • Correction du blocage au démarrage du Lepton 3.5 (délai d’attente + récupération) et de la fiabilité de la réinitialisation, de set_framesize() avant set_pixformat() sur le MT9V034 (l’ordre des appels n’a plus d’importance), du WVGA du MT9V034 sur le STM32H7, de la plage d’auto-exposition du MT9V034 et des mises à jour des registres fantômes, ainsi que du bogue de l’ADC du H7.

Imagerie :

  • Correction d’un accès mémoire invalide dans find_apriltags(), de copy() lors de la copie d’une image mise à l’échelle vers le tampon d’image principal, de l’allocation de tampon d’image de to_grayscale() / to_rgb565(), du len() de l’objet keypoint, de la gestion des limites des MCU JPEG, de l’analyse de la liste de seuils de binary(), et de l’acceptation des tuples de keypoints par draw_keypoints().

Système :

  • Correction des fuites par déséquilibre mark/free de fb_alloc dans les méthodes image / fir / lcd / tv / nn, py_assert libère désormais la mémoire du tampon d’image lors d’exceptions capturées (#417), effacement de l’indicateur de dépassement (ORE) de l’UART afin que les dépassements ne bloquent plus les lectures UART, correction du gestionnaire d’IRQ du RTC, et correction de l’outil Windows cascade_convert.py.

Matériel et prise en charge des cartes

  • Caméra thermique FLIR Lepton.

  • Shield TV — sortie vidéo SPI TV / composite.

  • Mode déclenché à obturateur global (MT9V034).

Changements d’API incompatibles

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

Chaque changement est étiqueté selon son impact :

  • majeur — affecte la plupart des scripts utilisant la fonctionnalité ; vous devrez porter votre code.

  • 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 migration à la fin. Chaque hash de commit renvoie à son diff sur GitHub.

API cpufreq retravaillée (majeur)

Le module cpufreq a été retravaillé pour la prise en charge du H7. Les constantes cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ et cpufreq.get_frequency() ont été supprimées. cpufreq.set_frequency() prend désormais un simple entier en MHz (par ex. cpufreq.set_frequency(120)), et cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies() ont été ajoutées.

Commits : 6babf84a1

Arguments positionnels de image.replace() décalés (mineur)

image.replace() a gagné un argument transpose, décalant l’argument positionnel mask de la position 4 à la position 5. Le code qui passait mask de façon positionnelle (par ex. img.replace(src, hmirror, vflip, mask)) doit basculer vers la forme à mot-clé img.replace(src, mask=mask).

Commits : dbe7bf059

sensor.alloc_extra_fb() n’accepte plus Bayer/JPEG (mineur)

sensor.alloc_extra_fb() n’accepte plus sensor.BAYER ni sensor.JPEG (il prend désormais aussi en charge sensor.BINARY). Le code qui allouait des tampons d’image supplémentaires au format Bayer ou JPEG doit utiliser GRAYSCALE / RGB565 (ou allouer le tampon d’une autre manière).

Commits : f9e6b3fe0

sensor.set_framesize() lève une exception en cas d’échec (comportement)

sensor.set_framesize() lève désormais une ValueError lorsque la taille d’image n’est pas prise en charge, au lieu de renvoyer False. Le code qui vérifiait la valeur de retour False doit désormais intercepter l’exception ValueError.

Commits : b0442633e

Liste de migration

Pour un portage propre vers v3.3.0, le travail habituel est le suivant :

  1. Porter le code cpufreq vers set_frequency() en entier-MHz et get_current_frequencies() / get_supported_frequencies() (la refonte de cpufreq).

  2. Passer mask à image.replace() comme mot-clé (le changement de replace).

  3. Allouer les tampons d’image supplémentaires en GRAYSCALE / RGB565 au lieu de Bayer/JPEG (le changement de alloc_extra_fb).

  4. Intercepter ValueError autour de sensor.set_framesize() au lieu de vérifier False (le changement de set_framesize).

Tous les autres scripts fonctionnent sans modification.