v2.1.0

v2.1.0 devasa bir API modernleştirme sürümüdür. FREAK anahtar nokta tanımlayıcısını ORB ile değiştirir, find_blobs() / histogramları / istatistikleri nesne tabanlı API’lere dönüştürür, sensor otomatik pozlama/kazanç/beyaz dengesi işlevlerini yeniden adlandırır, QR kod tespiti ve OV7725 lens düzeltmesi ekler ve ilk OpenMV Cam M7 kartını çalışır hale getirir. Birçok API değişti — aşağıdaki kırıcı değişiklikleri okuyun.

Öne çıkanlar

  • ORB anahtar noktaları — FREAK tanımlayıcısı ORB ile değiştirildi (find_keypoints() / match_descriptor() yeniden düzenlendi).

  • Nesne API’lerifind_blobs(), get_histogram(), get_statistics() artık adlandırılmış erişimcilere sahip nesneler döndürüyor.

  • QR kodlarimage.find_qrcodes() tespiti eklendi.

  • OpenMV Cam M7 — ilk kart desteği.

  • Sensörset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (yeniden adlandırıldı) ve set_lens_correction().

  • Kırıcı: anahtar nokta/tanımlayıcı, nokta (blob)/histogram/istatistik, sensör otomatik işlevi ve diğer birkaç API değişti — kırıcı değişikliklere bakın.

Yeni özellikler

  • OpenMV Cam M7 — ilk OpenMV 3 (M7) kart desteği eklendi.

  • QR kodlar — bir qrcodes.py örneğiyle birlikte image.find_qrcodes() eklendi.

  • ORB anahtar noktaları — yeni ORB tanımlayıcı sistemi: bir corner_detector argümanı (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor içeren find_keypoints(); bir filter_outliers anahtar sözcüğü ve bir dönüş tahmini içeren match_descriptor(); anahtar nokta kaydet/yükle.

  • Nesne API’leriimage.get_histogram() / get_statistics() / get_percentile() histogram/istatistik nesneleri döndürür; find_blobs(), area_threshold / pixels_threshold / merge / margin / invert ve x_stride / y_stride ile nokta (blob) nesneleri (rect() / cx() / cy() / code() / area() / pixels()) döndürür.

  • Sensör — OV7725 lens gölgeleme için sensor.set_lens_correction(enable, radi, coef) eklendi, sensor.set_windowing() artık bir (w, h) demeti de kabul ediyor (otomatik ortalanmış) ve image.Image(..., copy_to_fb=True) / load_image(copy_to_fb=True).

  • Renk izleme, Arduino SPI/I2C-slave, anahtar noktalar ve histogram/istatistik örnek betikleri eklendi.

Diğer değişiklikler ve iyileştirmeler

  • IDE artık çalışan bir main.py‘yi kesebiliyor; daha hızlı find_blobs() / find_qrcodes() / get_statistics(); ORB bir popcount Hamming mesafesi kullanıyor; lens düzeltmesi daha az RAM kullanıyor; bir Linux udev kuralı ModemManager’ın seri portu ele geçirmesini engelliyor.

Hata düzeltmeleri

Kamera ve görüntüleme:

  • M7 DMA önbellek temizleme/geçersiz kılma (bozuk çerçeveler), her çerçevenin sonundaki sahte bir ekstra satır, JPEG çerçeve arabelleği (frame buffer) taşma sınırları, compress() başarısızlığında çerçeve arabelleğinin serbest bırakılması, ORB doğruluğu / ROI / boş küme işleme ve load_image(copy_to_fb=True) geometrisi düzeltildi.

Sistem:

  • F7 ADC desteği, bir OV7725 yazmaç adı, önyükleyici (bootloader)/USB zamanlaması düzeltildi, anlık görüntüleri beklerken WFI kullanıldı ve MJPEG akış örneği istemci başına zaman aşımlarıyla bloklamayan hale getirildi.

Donanım ve kart desteği

  • OpenMV Cam M7 (OpenMV 3) — ilk kart desteği.

  • OV7725 — lens düzeltme (gölgeleme) desteği.

Kırıcı API değişiklikleri

v2.0.0 ile v2.1.0 arasındaki kullanıcı tarafından görülebilen API kırılmaları. Kapsam: modules/ içindeki Python C modülleri ve scripts/libraries/ içindeki Python kitaplıkları.

Her değişiklik etkisine göre etiketlenmiştir:

  • major — özelliği kullanan çoğu betiği etkiler; kodu taşımanız gerekecek.

  • minor — dar kapsamlı API; yalnızca onu kullanan betikleri etkiler.

  • behavior — aynı API, farklı sonuçlar; ayarlanmış betikleri yeniden kontrol edin.

Değişiklikler bu sırayla etkilerine göre gruplanmıştır. Yalnızca kodunuzu taşımak istiyorsanız, sondaki taşıma kontrol listesine atlayın. Her commit hash’i GitHub’daki diff’ine bağlanır.

FREAK, ORB ile değiştirildi; tanımlayıcı API’si yeniden düzenlendi (major)

FREAK anahtar nokta tanımlayıcısı kaldırıldı ve ORB ile değiştirildi: image.FREAK artık mevcut değil (image.ORB kullanın). image.match_descriptor() / save_descriptor() / load_descriptor() artık baştaki bir tanımlayıcı tipi argümanı almıyor (nesneden çıkarsanır), match_descriptor() artık 8 öğeli bir demet (cx, cy, x, y, w, h, match_count, rotation) döndürüyor (son öğe bir yüzde değil ham bir sayıdır) ve draw_keypoints() ham bir (x, y, angle) listesi yerine bir anahtar nokta nesnesi gerektiriyor. find_keypoints(), değişen varsayılanlarla corner_detector / max_keypoints / scale_factor kazandı.

Commits: e2d0c4840, bba8e5a9e, 6000684cb

Sensör otomatik işlevi yeniden adlandırma (major)

sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl(), sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() olarak yeniden adlandırıldı (eski adlar kaldırıldı). Her biri, otomatik yerine manuel bir değer ayarlamak için isteğe bağlı bir value= anahtar sözcüğü kazandı.

Commits: 1b22a2961

Histogram / istatistik nesne API’lerine yeniden düzenlendi (major)

Histogram/istatistik yüzeyi, histogram/istatistik nesneleri döndüren nesne tabanlı image.get_histogram() / get_statistics() / get_percentile() biçimine yeniden düzenlendi. Eski düz histogram/istatistik sonuçları ve bin_count / l_bin_count / a_bin_count / b_bin_count yöntemleri kaldırıldı (len(histogram.bins()) vb. kullanın).

Commits: 011108412, 9f37c83de

find_features() scale yeniden adlandırıldı (major)

image.find_features() (Haar), scale= anahtar sözcüğünü scale_factor= olarak yeniden adlandırdı. find_features(cascade, scale=...) çağrılarını scale_factor=... olarak güncelleyin.

Commits: 96e4f770c

find_blobs() nesneler döndürür; find_markers() kaldırıldı (minor)

image.find_blobs() artık adlandırılmış erişimcilere sahip nokta (blob) nesneleri döndürüyor (geriye dönük uyumluluk için indeks erişimi hâlâ çalışıyor) ve image.find_markers() kaldırıldı — bunun yerine find_blobs(..., merge=True, margin=...) kullanın. Gelişmiş renk noktası (blob) filtre geri çağırması (callback) artık desteklenmiyor.

Commits: af15ec6eb

img.copy_to_fb() değiştirildi (minor)

img.copy_to_fb() yöntemi, image.Image / load_image() üzerinde bir copy_to_fb= anahtar sözcüğüyle değiştirildi. Büyük görüntüleri doğrudan çerçeve arabelleğine (frame buffer) yüklemek için image.Image(path, copy_to_fb=True) kullanın.

Commits: 1645ab94b

compress() aralık dışı kaliteyi reddeder (behavior)

image.compress() / compressed() artık quality 1–100 dışında olduğunda sessizce kısıtlamak yerine bir hata üretiyor. Çağırmadan önce quality değerini 1–100 aralığına kısıtlayın. Ayrıca, OpenMV 3 JPEG arabelleği 64 KB’den 23000 bayta düşürüldü, bu nedenle büyük çerçeveler artık bellek yetersizliği hatası üretebilir — JPEG kalitesini veya çerçeve boyutunu düşürün.

Commits: 9efd7474a, 9a7c3defc

lens_corr() yakınlaştırması artık işlevsel (behavior)

image.lens_corr() artık zoom argümanını gerçekten uyguluyor (önceden ayrıştırılıyor ama etkisizdi), bu nedenle varsayılan olmayan bir yakınlaştırma geçiren betikler için çıktı farklılaşıyor. lens_corr() ayarını yeniden kontrol edin.

Commits: d6b49adef

Taşıma kontrol listesi

v2.1.0’a temiz bir taşıma için tipik iş şudur:

  1. image.FREAK yerine image.ORB kullanın, tanımlayıcı tipi argümanını kaldırın ve match_descriptor() demet açımını / draw_keypoints() çağrısını anahtar nokta nesnesine güncelleyin (ORB yeniden düzenlemesi).

  2. sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() çağrılarını set_auto_* biçimlerine yeniden adlandırın (otomatik işlev yeniden adlandırma).

  3. Histogram/istatistik kodunu nesne yöntemlerine taşıyın (histogram/istatistik yeniden düzenlemesi).

  4. find_features() scale= argümanını scale_factor= olarak yeniden adlandırın (find_features yeniden adlandırma).

  5. Nokta (blob) nesnesi erişimcilerini kullanın ve find_markers() çağrısını find_blobs(merge=True, ...) ile değiştirin (find_blobs değişikliği); img.copy_to_fb() çağrısını copy_to_fb= anahtar sözcüğüyle değiştirin (copy_to_fb değişikliği).

  6. compress() kalitesini 1–100 aralığına kısıtlayın ve OpenMV 3’te JPEG boyutlarını yeniden kontrol edin (compress değişikliği); lens_corr() yakınlaştırmasını yeniden ayarlayın (lens_corr değişikliği).

Diğer tüm betikler değişmeden çalışır.