v5.0.0¶
v5.0.0 büyük bir sürümdür. Öne çıkanlar: baştan inşa edilen OpenMV Protocol V2 ana bilgisayar bağlantısı, çok kameralı kartlara ölçeklenen sınıf tabanlı bir csi kamera API’si, çalıştırılabilir bir simülatör hedefi, MoveNet tek-poz tahmini, MicroPython 1.28 ve kapsamlı bir kamera, ML ve ToF düzeltmeleri paketi. Ayrıca bir dizi geriye dönük uyumsuz API değişikliği de getirir — v4.8.1’den bu yana kullanıcıya görünen her değişiklik, tam olarak nasıl geçiş yapılacağıyla birlikte aşağıda listelenmiştir.
Öne çıkanlar¶
OpenMV Protocol V2. Ana bilgisayar/IDE bağlantısı baştan inşa edildi: çerçevelenmiş, sıralı, CRC denetimli ve stdio, akış önizlemesi ve kullanıcı verisi için çoğullanmış kanallara sahip. Yeni bir
protocolmodülü, betiklerin kendi aktarımlarını ve veri kanallarını oluşturmasına olanak tanır. Bkz. protokol modülü değişiklikleri.Sınıf tabanlı
csikamera API’si.import sensorartıkimport csi/csi.CSIolur ve yerel çok kameralı desteğe sahiptir. Bkz. csi geçişi.Simülatör hedefi. Aygıt yazılımı (firmware) artık Arm FVP / QEMU simülatörü (MPS2/MPS3) altında derlenip çalışır; NPU, ROMFS ve PSRAM emülasyonu dahil — görüş ve ML betikleri hiçbir donanım bağlı olmadan çalıştırılabilir.
MoveNet poz tahmini. Yeni bir
MoveNetson işlemcisi ve OpenMV AE3 ile N6 üzerinde paketlenmiş birmovenet_singlepose_192.tflitemodeli.MicroPython 1.28 ve ulab 6.12.0, ST Edge AI 4.0 araçları ve dışsallaştırılmış OpenMV SDK (bkz. derleme / araç değişiklikleri).
Yeni özellikler¶
The
protocolmodülü — Python’dan özel aktarımlar ve veri kanalları oluşturun:protocol.init(),protocol.register(),protocol.is_active()vesend_event()metoduna sahip birprotocol.ProtocolChannelsınıfı, ayrıcaCHANNEL_FLAG_*veCHANNEL_ID_*sabitleri. Nihaiprotocol.init()imzası protokol modülü değişiklikleri bölümünde belgelenmiştir.protocol.CBORChannel— adlandırılmış alanları görüntüleme bileşenleri (etiket, derinlik) ve etkileşimli denetimlerle (aç/kapa, kaydırıcı, seçim) birlikte CBOR’a serileştiren dondurulmuş birprotocoluzantı paketi.Ana bilgisayar belleği ve akış iç gözlemi — yeni bir
SYS_MEMORYprotokol komutu, havuz başına çalışma zamanı bellek istatistiklerini IDE’ye sunar ve yeni birSTREAM_SOURCEakış ioctl’i, ana bilgisayarın çok kameralı kartlarda hangi kameranın önizlemeyi beslediğini seçmesine olanak tanır (protokol sürümü 1.0.1).Çok kameralı akış —
csi.CSI, hangi sensörün IDE önizlemesini beslediğini seçen birstream=argümanı alır; akış çerçeve başlığı artık EMA ile yumuşatılmış bir FPS taşır, böylece IDE çerçeve hızınıclock.fps()standart kodu olmadan gösterir. Bkz. csi geçişi ve csi takip değişiklikleri.GenX320 olay sensörü — yeni bir Uzamsal-Zamansal Kontrast filtresi (
csi.GENX320_STC_DISABLE,csi.GENX320_STC_ONLY,csi.GENX320_STC_TRAIL_ONLYvecsi.GENX320_STC_TRAILmodlarıyla birliktecsi.IOCTL_GENX320_SET_STC) ve ham olay okuma (csi.IOCTL_GENX320_READ_EVENTS_RAW), yeni örnek betiklerle birlikte.MoveNet— 17 eklemli bir COCO anahtar nokta dizisiyle birlikte((x, y, w, h), score, keypoints)döndüren yeni bir MediaPipe tek-poz son işlemcisi (threshold,nms_threshold,nms_sigmakwarg’ları); birmovenet_singlepose_192.tflitemodeli ve örneği AE3 ile N6 üzerinde paketlenmiştir.ml.utils.draw_predictions()— etiket başına güven değerini ekleyen yeni bir isteğe bağlıscores=argümanı; yazı tipi ve kutu çizgisi artık görüntü genişliğine göre otomatik ölçeklenir ve yeni birformat="point"modu, merkez noktası/tepe tespit edicileri için bir merkez işaretçisi çizer.Yeni
display.TVDisplaysınıfı (genel birioctl()ile) bağımsıztvmodülünün yerini alır. Bkz. display modülü değişiklikleri.Yeni bir
find_line_segments()tespit edicisi (ED-Lines) — artık tüm derlemelerde mevcuttur ve yeni birthreshold=argümanına sahiptir. Bkz. image modülü değişiklikleri.
Diğer değişiklikler ve iyileştirmeler¶
MicroPython, v4.8.1 tabanından 1.28.0’a güncellendi. H5/H7/N6 üzerinde yüksek hızlı SD kart modu, düşük güç modunda AHB5 saat sinyali ve OPENMV_AE3 üzerinde GPIO olarak denetlenebilir JTAG pinleri eklendi.
ulab 6.12.0’a güncellendi — ndarray’ler üzerinde yerel
%operatörü (ml.utils.mod()yardımcısı kaldırıldı; bkz. ML kütüphanesi değişiklikleri).ST Edge AI araçları 4.0’a güncellendi — cihaz üzerinde ST model derlemesini ve dağıtımını etkiler.
ml.Model—load_to_fbanahtar sözcük argümanı kaldırıldı; model belleği artık birleşik ayırıcı tarafından otomatik olarak yönetilir.image.Image.scale()yerinde — bir görüntüyü yerinde büyütmek (örneğinimg.scale(x_scale=2.0, y_scale=2.0)) artık başarısız olmak yerine çerçeve arabelleğini (frame buffer) sığacak şekilde büyütür.Daha büyük stdio arabelleği — IDE’ye giden varsayılan metin arabelleği OpenMV 2/3/4, Nicla Vision, AE3 ve N6 üzerinde 512’den 1024 bayta çıkarıldı, böylece daha büyük
print()patlamaları kesilmez.Daha akıcı ana bilgisayar olay akışı — ana bilgisayara giden stdout NOTIFY olayları, halka arabelleği su işaretini aşan her
print()için bir tane yerine, her ana bilgisayar okuması başına en fazla bir tane olacak şekilde kısıtlanır.Kesilebilir uzun işlemler — uzun görüntü çizme, GPU (Nema/Dave2D) ve NPU bekleme döngüleri artık olayları belirli bir aralıkta işler, böylece betikler ağır işler sırasında IDE’nin Stop düğmesine duyarlı kalır.
Hata düzeltmeleri¶
Kamera ve sensörler:
find_apriltags()artık D-cache/GPU kartlarında (N6, AE3) sonuçları bozmuyor ve artık AE3 üzerinde çalışıyor.Piksel formatları değiştirildikten sonra STM32 N6 ISP’den gelen Bayer görüntü çıktısı düzeltildi.
Parlak sahnelerde yeşil otomatik beyaz dengesi taşması ve başlatılmamış ilk çerçeve AWB istatistikleri durumu düzeltildi; daha geniş bir gama/kontrast/parlaklık aralığı için STM32 ISP gama sınırlaması (32’den 63’e) yükseltildi.
PS5520 otomatik pozlaması artık parlak ışıkta salınmıyor; PAG7936 AEC/AGC davranışı yeniden tasarlandı (birleşik denetim, düzeltilmiş kazanç tavanı).
OV5640 otomatik odak aygıt yazılımı (firmware) yüklemesi Portenta/Nicla üzerinde geri yüklendi (MIMXRT I2C SUSPEND düzeltmesi).
Çerçeve hızı sınırı JPEG yakalamayla birleştirildiğinde oluşan bir kamera yakalama kilitlenmesi düzeltildi (STM32).
GenX320
csi.IOCTL_GENX320_READ_EVENTS_RAWokumaları artık IDE önizlemesini bozmuyor.FLIR Lepton
csi.IOCTL_LEPTON_SET_MODE,csi.CSI.ioctl()üzerinden tek bir argümanla çağrıldığında artık çalışıyor.
Görüntü işleme:
Bir maske sağlandığında
draw_image()/blend()alfa harmanlama düzeltildi.1 bitlik (BINARY) PNG kodlama/kod çözme bit sıralaması ve 1 bitten gri tonlama kod çözme düzeltildi.
mjpeg.Mjpegkayıt süresi/FPS meta verisi düzeltildi.Küçük yığınlı kartlarda (OpenMV M7) yazılımsal JPEG kod çözme yığın taşması düzeltildi.
ARM olmayan ana bilgisayarlarda (simülatör) JPEG/PNG dosya formatı otomatik algılaması düzeltildi.
Time-of-Flight:
tof.read_depth()artık geçici mesafe ölçüm hatalarında istisna fırlatmıyor ve veri yolu arızalarından otomatik olarak kurtuluyor; varsayılantof.read_depth()/tof.snapshot()zaman aşımı artık 100 ms (bkz. tof değişiklikleri).VL53L5CX / VL53L8CX çok bölgeli derinlik verisi bozulması düzeltildi.
ML ve sistem:
N6 üzerinde çıkarım kesildiğinde NPU artık doğru şekilde temizleniyor.
N6 üzerinde derin uyku / bekleme uyandırması geri yüklendi; AE3 önyükleyiciye (bootloader) atlama takılması düzeltildi.
Yazılımsal sıfırlamada (STM32 Nema GPU) bellek sızıntıları ve erken toplanan bir yardımcı çerçeve arabelleği (frame buffer) düzeltildi.
Özel Python protokol kanalları artık yazılımsal yeniden başlatmada hayatta kalıyor, USB aktarımı veri yolu sıfırlamasından / takılan uç noktalardan kurtuluyor ve USB SOF kesme taşması düzeltildi.
Donanım ve kart desteği¶
OpenMV N6 — Ethernet etkinleştirildi (kablolu ağ); NPU AXI SRAM (1.75 MB), çıkarımlar arasında daha fazla RAM için paylaşılan geçici bir havuzla birleştirildi; derin uyku/bekleme uyandırması; ROMFS’te paketlenmiş TFLite modelleri ve Haar basamaklı sınıflandırıcıları.
OpenMV AE3 — ROMFS’te paketlenmiş modeller ve basamaklı sınıflandırıcılar; aygıt yazılımına (firmware) dondurulmuş
cbor2.Alif (AE3, N6) — düşük güçlü
machine.RTCuyandırması.Yüksek çözünürlüklü AprilTags — AE3, Arduino Giga ve Arduino Portenta H7 üzerinde tam sensör çözünürlüğünde
find_apriltags().Simülatör hedefleri — MPS2_AN500 / MPS3_AN547 (Arm FVP / QEMU), NPU, ROMFS ve PSRAM emülasyonuyla.
Geriye dönük uyumsuz API değişiklikleri¶
v4.8.1 ile v5.0.0 arasındaki kullanıcıya görünen API kırılmaları. Kapsam: modules/ içindeki Python C-modülleri ve scripts/libraries/ içindeki Python kütüphaneleri.
Her değişiklik etkisiyle etiketlenmiştir:
major — çoğu betiğin düzenlenmesi gerekir.
minor — dar kapsamlı API; yalnızca onu kullanan betikleri etkiler.
behavior — aynı API, farklı sonuçlar; ince ayarlı betikleri yeniden kontrol edin.
tooling — yalnızca kaynaktan derlemeyi / alt akış çatallarını (fork) etkiler.
Değişiklikler bu sırayla etkiye göre gruplanmıştır — önce major, ardından minor, behavior ve tooling. Yalnızca kodunuzu taşımak istiyorsanız, yoğunlaştırılmış bir yapılacaklar listesi için sonundaki geçiş kontrol listesine atlayın. Her commit özeti, GitHub üzerindeki diff’ine bağlanır.
sensor yerine csi geldi (major)¶
Her resmi örnek, import sensor yerine import csi kullanacak şekilde yeniden yazıldı. Eski modül düzeyindeki işlevsel API (sensor.reset(), sensor.set_pixformat(), …), birden fazla kameraya sahip kartlara (csi0, csi1, …) doğal olarak ölçeklenen ve tüm yeni özellikler (stream= kwarg’ı, çok sensörlü akış, …) için gerekli olan sınıf tabanlı csi.CSI API’si ile değiştirildi.
sensor qstr’i, geriye dönük uyumlu aygıt yazılımı (firmware) derlemeleri için hâlâ modules/py_csi.c içinde bağlıdır, ancak yeni özellikler kazanmayacak ve tüm örnekler, belgeler ve kütüphane kodu artık csi varsayar.
Commit’ler: 945c5853c, 61f835b7e
Modülden sınıfa
Önce (sensor):
import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
img = sensor.snapshot()
Sonra (csi):
import csi
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
img = csi0.snapshot()
Setter/getter çiftleri birleşik erişimcilere indirgendi
Yeni API’de argüman olmadan çağrılan bir metot geçerli değeri döndürür; bir değer ile çağrıldığında onu ayarlar. set_*/get_* önekleri kaldırıldı. Metot adları ayrıca gereksiz olduğu yerlerde ing son ekini de yitirdi (windowing → window). Yeni API sütunu, referans belgelerine bağlanır.
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Doğrudan karşılığı olmayan işlevler
|
Bunun yerine ne kullanılmalı |
|---|---|
|
|
|
|
|
|
|
|
|
Kaldırıldı. |
|
|
Yeni: csi.CSI üzerinde
csi.CSI(stream=True|False)— hangi CSI’nin önizleme çerçeve arabelleğini (frame buffer) beslediğini seçen, oluşturma anında bir seçici (anlık görüntü başınaupdate=kwarg’ının yerini alır, bkz. csi takip değişiklikleri).csi.CSI(cid=N)/csi.devices()— birden fazla görüntü sensörüne sahip kartlar için çoklu CSI desteği.
image modülü — imza elden geçirme (major)¶
image modülü, csi‘den sonra en geniş API değişikliğini gördü — çizim imzaları, sonuç nesneleri ve birkaç tespit edicinin tümü değişti.
Koordinat argümanları tuple olmalıdır
modules/py_image.c, mp_arg_parse_all üzerine yeniden yazıldı. Daha önce ayrı x, y, ... konumsal argümanları alan tüm çizim / piksel metotları artık bu koordinatların tek bir tuple içinde paketlenmesini gerektirir.
Commit’ler: d18bbc472, 0c60c94b9 (PR #3061)
Önce |
Sonra |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tümü image.Image metotlarıdır.
Sonuç nesneleri attrtuple’a dönüştürüldü
Bu türler artık MicroPython attrtuple nesneleridir: similarity, statistics, percentile, threshold, line, circle, rect, qrcode, apriltag, datamatrix, barcode, displacement, kptmatch. Parantezsiz özniteliğe erişim artık kanoniktir.
Commit: 3399d302e
Önce (metot stili):
img.draw_cross(match.cx(), match.cy())
img.draw_rectangle(blob.rect())
Sonra (öznitelik stili):
img.draw_cross((match.cx, match.cy))
img.draw_rectangle(blob.rect)
blob ve histogram değişmedi — mevcut türlerini ve () erişimcilerini korurlar (bir attrtuple, bir blob’un tembel hesaplanan değerlerini veya bir histogramın argüman alan erişimcilerini ifade edemez).
find_features haar parametresi yeniden adlandırması
image.Image.find_features() — scale_factor=, scale= olarak yeniden adlandırıldı.
Commit: be4c5cd73
get_regression — artık her zaman gürbüz, target_size eklendi
image.Image.get_regression() artık her zaman gürbüz (Theil-Sen) regresyonu kullanır. Eski hızlı en küçük kareler yolu kaldırıldı, bu yüzden robust= anahtar sözcüğü kalktı — eskiden robust=True gerektiren artık tek davranıştır. Yeni bir target_size=(w, h) kwarg’ı (varsayılan (80, 60)), O(N^2) Theil-Sen uydurmasından önce ROI’yi alan olarak küçülterek her zaman makul bir görüntü boyutunda çalışmasını sağlar; uydurulan çizgi uç noktaları kaynak koordinatlarına geri eşlenir. linear_regression_robust.py örneği silindi ve linear_regression_fast.py, linear_regression.py olarak yeniden adlandırıldı.
Commit’ler: c7c2e69a0, 0ff2afa72
find_line_segments — yeni algoritma
image.Image.find_line_segments() — eski LSD tespit edicisi ED-Lines ile değiştirildi ve yeni bir threshold=50 kwarg’ı kazandı. Daha önce ince ayarlanmış betiklerin çıktısı farklı olacaktır.
Commit’ler: 87da2a7b7, 2c47b5735
AprilTag kütüphanesi değiştirildi
image.Image.find_apriltags() — AprilTag tespit edicisi yeni bir uygulamayla değiştirildi. Aile kümesi değişti:
Kaldırıldı |
Eklendi |
|---|---|
|
|
Commit: e813bada7
csi modülü takibi (minor)¶
csi geçişi üzerine daha küçük csi takip değişiklikleri.
snapshot(update=…) kaldırıldı
csi.CSI.snapshot() üzerindeki update kwarg’ı kalktı. Bir CSI cihazının önizleme çerçeve arabelleğini (frame buffer) beslemesini engellemek için, oluşturma anında devre dışı bırakın:
csi0 = csi.CSI(stream=False) # was: csi0.snapshot(update=False)
csi1.snapshot(blocking=False, image=fir_img) # was: ...(update=False, ...)
Commit’ler: 9a8077827, 26b79a2c5
framebuffers() expand argümanı kaldırıldı
csi.CSI.framebuffers() — üçüncü konumsal argüman (expand) kalktı; imza artık framebuffers([count]).
Commit: 86cb3a5de
protocol modülü (minor)¶
Yalnızca ana bilgisayar bağlantısını doğrudan süren betikleri etkiler. Bkz. protocol.
timer_ms, poll_ms olarak yeniden adlandırıldı
protocol.init() — timer_ms argümanı poll_ms olarak yeniden adlandırıldı.
protocol.init(..., poll_ms=10) # was: timer_ms=10
Commit’ler: 8a0635e8c, 95a290607
protocol.poll() kaldırıldı
Protokol görevi artık dahili olarak zamanlanır. protocol.poll() çağrıları AttributeError fırlatır.
Commit: 8a0635e8c
soft_reboot yapılandırma argümanı kaldırıldı
protocol.init() — soft_reboot argümanı kalktı. Tüm mevcut aktarımlar yazılımsal yeniden başlatmaları tolere eder, bu nedenle davranış artık koşulsuzdur.
Commit: 0bf766aa2
display modülleri (minor)¶
TV çıkışı artık bağımsız tv modülü yerine bir display.TVDisplay nesnesi üzerinden gider. display ayrıca genel bir ioctl() kazandı.
tof modülü (behavior)¶
Öncekiyle aynı API; varsayılanlar ve hata işleme değişti. Bkz. tof.
Varsayılan zaman aşımı değişti
tof.read_depth() ve tof.snapshot() (timeout=-1 ile çağrıldığında) artık süresiz beklemek yerine varsayılan olarak 100 ms‘dir. Eski davranışa ihtiyacınız varsa açık şekilde daha büyük bir değer geçirin.
Commit: b6772b80d
Otomatik kurtarma
Sürücü artık mesafe ölçümü/zaman aşımı hatalarında I2C veri yolunu ve sensörü donanımsal olarak sıfırlar. Örnekler artık istisna işleyicilerinde tof.reset() çağırmıyor — manuel kurtarma yapan kullanıcı kodu bunu kaldırmalıdır (yeni otomatik kurtarma ile çatışacaktır).
ML kütüphanesi (behavior)¶
Aynı API, farklı sayılar — ince ayarlı herhangi bir ML hattını yeniden kontrol edin.
Ön işleme artık mektup kutulamak (letterbox) yerine geriyor
Normalization artık image.SCALE_ASPECT_EXPAND (letterbox) yerine image.SCALE_ASPECT_IGNORE (germe) kullanıyor. NMS son işlemesi de bağımsız x/y ölçeklemeye geçti.
Not
Etki. YOLO tarzı tespit ediciler ve anahtar nokta regresörleri genellikle iyileşir. BlazeFace, BlazePalm, FaceLandmarks ve HandLandmarks örnekleri artık giriş ROI’sinde manuel bir kare kırpma gerektirir — örnek betikler güncellendi; özel kullanıcı kodu da aynısını yapmalıdır.
Commit: 68dc29a33
ml.utils.mod() yardımcısı kaldırıldı
ulab 6.12.0, ndarray’ler üzerinde % operatörünü yerel olarak destekler. ml.utils‘ten mod içe aktaran kod a % b kullanmalıdır.
Derleme / araçlar (tooling)¶
Bunların hiçbiri MicroPython betiklerini etkilemez. Aygıt yazılımını (firmware) kaynaktan derlemek artık harici OpenMV SDK‘yı (1.6.0, önceden ağaç içinde) gerektirir. Birkaç ağaç içi derleme aracı kaldırıldı ve N6, TinyUSB yığınına taşındı; alt akış çatalları (fork) aygıt yazılımı deposunun geçmişini gözden geçirmelidir — özellikle file_open() imzasının buffered argümanını kaldırması.
Geçiş kontrol listesi¶
v5.0.0’a temiz bir taşıma için tipik iş şudur:
import sensoryerineimport csi; csi0 = csi.CSI()koyun ve herset_*/get_*çağrısınıcsi.CSIerişimcisine çevirin (csi geçişi).img.draw_*,get_pixel()veset_pixel()için koordinat argümanlarını tuple’lara sarın (image modülü değişiklikleri).Yeni deyimsel biçimi istiyorsanız attrtuple sonuç erişimcilerinden
()kaldırın veya attrtuple’lar hâlâ çağrılabilir erişimcileri desteklediği için eski stili olduğu gibi bırakın (image modülü değişiklikleri).find_line_segments(),get_regression()ve herhangi birfind_apriltags()aile seçimini denetleyin (image modülü değişiklikleri).protocol.init()çağrılarındatimer_ms→poll_msolarak yeniden adlandırın;protocol.poll()vesoft_reboot=kaldırın (protokol modülü değişiklikleri).ML iş akışları için: mektup kutulanmış (letterbox) giriş gerektiren herhangi bir modeli yeniden gözden geçirin (ML kütüphanesi değişiklikleri).