v2.1.0

v2.1.0 เป็นรุ่นที่ปรับปรุง API อย่างครอบคลุม โดยแทนที่ตัวบ่งชี้ลักษณะ FREAK ด้วย ORB ปรับ find_blobs() / ฮิสโตแกรม / สถิติให้เป็น API แบบอ็อบเจกต์ เปลี่ยนชื่อฟังก์ชัน auto exposure/gain/white-balance ของ sensor เพิ่มการตรวจจับ QR code และการแก้ไขเลนส์ OV7725 รวมถึงเพิ่มการรองรับบอร์ด OpenMV Cam M7 รุ่นแรก API หลายส่วนมีการเปลี่ยนแปลง — อ่านรายละเอียด breaking changes ด้านล่าง

จุดเด่น

  • ORB keypoints — ตัวบ่งชี้ลักษณะ FREAK ถูกแทนที่ด้วย ORB (ปรับปรุง find_keypoints() / match_descriptor() ใหม่)

  • Object APIsfind_blobs(), get_histogram(), get_statistics() ตอนนี้คืนค่าอ็อบเจกต์ที่มีตัวเข้าถึงแบบระบุชื่อ

  • QR codes — เพิ่มการตรวจจับด้วย image.find_qrcodes()

  • OpenMV Cam M7 — การรองรับบอร์ดเริ่มต้น

  • Sensorset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (เปลี่ยนชื่อ) และ set_lens_correction()

  • Breaking: keypoint/descriptor, blob/histogram/statistics, ฟังก์ชัน auto ของ sensor และ API อื่น ๆ มีการเปลี่ยนแปลง — ดู breaking changes

ฟีเจอร์ใหม่

  • OpenMV Cam M7 — เพิ่มการรองรับบอร์ด OpenMV 3 (M7) รุ่นแรก

  • QR codes — เพิ่ม image.find_qrcodes() พร้อมตัวอย่าง qrcodes.py

  • ORB keypoints — ระบบตัวบ่งชี้ลักษณะ ORB ใหม่: find_keypoints() พร้อมอาร์กิวเมนต์ corner_detector (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor; match_descriptor() พร้อม keyword filter_outliers และค่าประมาณการหมุน; บันทึก/โหลด keypoint

  • Object APIsimage.get_histogram() / get_statistics() / get_percentile() คืนค่าอ็อบเจกต์ histogram/statistics; find_blobs() คืนค่าอ็อบเจกต์ blob (rect() / cx() / cy() / code() / area() / pixels()) พร้อม area_threshold / pixels_threshold / merge / margin / invert และ x_stride / y_stride

  • Sensor — เพิ่ม sensor.set_lens_correction(enable, radi, coef) สำหรับการแก้ไขเงา OV7725, sensor.set_windowing() รับ tuple (w, h) ด้วย (จัดตำแหน่งอัตโนมัติ) และ image.Image(..., copy_to_fb=True) / load_image(copy_to_fb=True)

  • เพิ่มสคริปต์ตัวอย่างสำหรับการติดตามสี, Arduino SPI/I2C-slave, keypoints และ histogram/statistics

การเปลี่ยนแปลงและการปรับปรุงอื่น ๆ

  • IDE สามารถขัดจังหวะ main.py ที่กำลังทำงานได้; find_blobs() / find_qrcodes() / get_statistics() เร็วขึ้น; ORB ใช้ popcount Hamming distance; การแก้ไขเลนส์ใช้ RAM น้อยลง; กฎ udev บน Linux ป้องกัน ModemManager ไม่ให้จับ serial port

การแก้ไขบั๊ก

กล้องและการประมวลผลภาพ:

  • แก้ไข M7 DMA cache clean/invalidate (เฟรมเสียหาย), บรรทัดพิเศษที่ไม่ต้องการท้ายแต่ละเฟรม, การล้นของ JPEG framebuffer, การปลดปล่อย framebuffer เมื่อ compress() ล้มเหลว, ความแม่นยำ ORB / ROI / การจัดการชุดว่าง และ geometry ของ load_image(copy_to_fb=True)

ระบบ:

  • แก้ไขการรองรับ F7 ADC, ชื่อรีจิสเตอร์ OV7725 ผิด, เวลา bootloader/USB, ใช้ WFI ขณะรอ snapshot และทำให้ตัวอย่าง MJPEG streamer ไม่บล็อกพร้อม timeout ต่อ client

ฮาร์ดแวร์และการรองรับบอร์ด

  • OpenMV Cam M7 (OpenMV 3) — การรองรับบอร์ดเริ่มต้น

  • OV7725 — รองรับการแก้ไขเลนส์ (เงา)

การเปลี่ยนแปลง API แบบ Breaking

การเปลี่ยนแปลง API ที่ผู้ใช้มองเห็นได้ระหว่าง v2.0.0 และ v2.1.0 ขอบเขต: Python C-modules ใน modules/ และไลบรารี Python ใน scripts/libraries/

แต่ละการเปลี่ยนแปลงมีป้ายกำกับระดับผลกระทบ:

  • major — ส่งผลต่อสคริปต์ส่วนใหญ่ที่ใช้ฟีเจอร์นั้น คุณจะต้องปรับโค้ด

  • minor — API แคบ ส่งผลเฉพาะสคริปต์ที่ใช้งาน

  • behavior — API เหมือนเดิม แต่ผลลัพธ์ต่างกัน ต้องตรวจสอบสคริปต์ที่ปรับแต่งไว้

การเปลี่ยนแปลงจัดกลุ่มตามผลกระทบตามลำดับ หากต้องการเพียงแค่ปรับโค้ด ข้ามไปที่ รายการตรวจสอบการย้าย ท้ายเอกสาร แต่ละ hash ของ commit เชื่อมไปยัง diff บน GitHub

FREAK ถูกแทนที่ด้วย ORB; API ของตัวบ่งชี้ลักษณะถูกปรับใหม่ (major)

ตัวบ่งชี้ลักษณะ FREAK ถูกลบออกและแทนที่ด้วย ORB: image.FREAK ไม่มีอีกแล้ว (ใช้ image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() ไม่รับอาร์กิวเมนต์ประเภทตัวบ่งชี้ลักษณะนำหน้าอีกต่อไป (จะอนุมานจากอ็อบเจกต์), match_descriptor() ตอนนี้คืนค่า tuple 8 ตัว (cx, cy, x, y, w, h, match_count, rotation) (ตัวสุดท้ายเป็นจำนวนนับดิบ ไม่ใช่เปอร์เซ็นต์) และ draw_keypoints() ต้องรับอ็อบเจกต์ keypoints แทน list (x, y, angle) ดิบ find_keypoints() ได้รับ corner_detector / max_keypoints / scale_factor พร้อมค่าเริ่มต้นที่เปลี่ยนไป

Commits: e2d0c4840, bba8e5a9e, 6000684cb

การเปลี่ยนชื่อฟังก์ชัน auto ของ sensor (major)

sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() ถูกเปลี่ยนชื่อเป็น sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (ชื่อเดิมถูกลบออก) แต่ละฟังก์ชันได้รับ keyword value= เพื่อตั้งค่าแบบ manual แทน auto

Commits: 1b22a2961

Histogram / statistics ถูกปรับเป็น object APIs (major)

surface histogram/statistics ถูกปรับเป็นแบบอ็อบเจกต์ผ่าน image.get_histogram() / get_statistics() / get_percentile() ที่คืนค่าอ็อบเจกต์ histogram/statistics ผลลัพธ์ histogram/statistics แบบแบน (flat) เดิม และเมธอด bin_count / l_bin_count / a_bin_count / b_bin_count ถูกลบออก (ใช้ len(histogram.bins()) แทน)

Commits: 011108412, 9f37c83de

find_features() เปลี่ยนชื่อ scale (major)

image.find_features() (Haar) เปลี่ยนชื่อ keyword scale= เป็น scale_factor= อัปเดตการเรียก find_features(cascade, scale=...) ให้ใช้ scale_factor=...

Commits: 96e4f770c

find_blobs() คืนค่าอ็อบเจกต์; find_markers() ถูกลบ (minor)

image.find_blobs() ตอนนี้คืนค่าอ็อบเจกต์ blob ที่มีตัวเข้าถึงแบบระบุชื่อ (การเข้าถึงด้วยดัชนียังรองรับสำหรับความเข้ากันได้ย้อนหลัง) และ image.find_markers() ถูกลบออก — ใช้ find_blobs(..., merge=True, margin=...) แทน ไม่รองรับ callback ตัวกรอง color-blob ขั้นสูงอีกต่อไป

Commits: af15ec6eb

img.copy_to_fb() ถูกแทนที่ (minor)

เมธอด img.copy_to_fb() ถูกแทนที่ด้วย keyword copy_to_fb= บน image.Image / load_image() ใช้ image.Image(path, copy_to_fb=True) เพื่อโหลดภาพขนาดใหญ่เข้า framebuffer โดยตรง

Commits: 1645ab94b

compress() ปฏิเสธค่า quality นอกช่วง (behavior)

image.compress() / compressed() ตอนนี้ raise error เมื่อ quality อยู่นอกช่วง 1–100 แทนที่จะ clamp อย่างเงียบ ๆ จำกัด quality ให้อยู่ในช่วง 1–100 ก่อนเรียก นอกจากนี้ บัฟเฟอร์ JPEG ของ OpenMV 3 ลดลงจาก 64 KB เป็น 23000 bytes ดังนั้นเฟรมขนาดใหญ่อาจ raise out-of-memory — ลด JPEG quality หรือ framesize

Commits: 9efd7474a, 9a7c3defc

lens_corr() zoom ใช้งานได้จริงแล้ว (behavior)

image.lens_corr() ตอนนี้ใช้อาร์กิวเมนต์ zoom จริง ๆ แล้ว (ก่อนหน้านี้ parse ได้แต่ไม่มีผล) ดังนั้นผลลัพธ์จะต่างออกไปสำหรับสคริปต์ที่ส่ง zoom ที่ไม่ใช่ค่าเริ่มต้น ปรับจูน lens_corr() ใหม่

Commits: d6b49adef

รายการตรวจสอบการย้าย

สำหรับการย้ายไป v2.1.0 อย่างสะอาด งานทั่วไปคือ:

  1. แทนที่ image.FREAK ด้วย image.ORB ลบอาร์กิวเมนต์ประเภทตัวบ่งชี้ลักษณะออก และอัปเดตการ unpack tuple ของ match_descriptor() / draw_keypoints() ให้ใช้อ็อบเจกต์ keypoints (การปรับ ORB ใหม่)

  2. เปลี่ยนชื่อ sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() เป็นรูปแบบ set_auto_* (การเปลี่ยนชื่อฟังก์ชัน auto)

  3. ย้ายโค้ด histogram/statistics ไปใช้เมธอดแบบอ็อบเจกต์ (การปรับ histogram/statistics ใหม่)

  4. เปลี่ยนชื่อ scale= ของ find_features() เป็น scale_factor= (การเปลี่ยนชื่อ find_features)

  5. ใช้ตัวเข้าถึงอ็อบเจกต์ blob และแทนที่ find_markers() ด้วย find_blobs(merge=True, ...) (การเปลี่ยนแปลง find_blobs); แทนที่ img.copy_to_fb() ด้วย keyword copy_to_fb= (การเปลี่ยนแปลง copy_to_fb)

  6. จำกัด quality ของ compress() ให้อยู่ในช่วง 1–100 และตรวจสอบขนาด JPEG บน OpenMV 3 (การเปลี่ยนแปลง compress); ปรับจูน zoom ของ lens_corr() ใหม่ (การเปลี่ยนแปลง lens_corr)

สคริปต์อื่น ๆ ทั้งหมดทำงานได้โดยไม่ต้องเปลี่ยนแปลง