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 APIs —
find_blobs(),get_histogram(),get_statistics()ตอนนี้คืนค่าอ็อบเจกต์ที่มีตัวเข้าถึงแบบระบุชื่อQR codes — เพิ่มการตรวจจับด้วย
image.find_qrcodes()OpenMV Cam M7 — การรองรับบอร์ดเริ่มต้น
Sensor —
set_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.pyORB keypoints — ระบบตัวบ่งชี้ลักษณะ ORB ใหม่:
find_keypoints()พร้อมอาร์กิวเมนต์corner_detector(CORNER_FAST/CORNER_AGAST),max_keypoints/scale_factor;match_descriptor()พร้อม keywordfilter_outliersและค่าประมาณการหมุน; บันทึก/โหลด keypointObject APIs —
image.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_strideSensor — เพิ่ม
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 พร้อมค่าเริ่มต้นที่เปลี่ยนไป
การเปลี่ยนชื่อฟังก์ชัน 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()) แทน)
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
lens_corr() zoom ใช้งานได้จริงแล้ว (behavior)¶
image.lens_corr() ตอนนี้ใช้อาร์กิวเมนต์ zoom จริง ๆ แล้ว (ก่อนหน้านี้ parse ได้แต่ไม่มีผล) ดังนั้นผลลัพธ์จะต่างออกไปสำหรับสคริปต์ที่ส่ง zoom ที่ไม่ใช่ค่าเริ่มต้น ปรับจูน lens_corr() ใหม่
Commits: d6b49adef
รายการตรวจสอบการย้าย¶
สำหรับการย้ายไป v2.1.0 อย่างสะอาด งานทั่วไปคือ:
แทนที่
image.FREAKด้วยimage.ORBลบอาร์กิวเมนต์ประเภทตัวบ่งชี้ลักษณะออก และอัปเดตการ unpack tuple ของmatch_descriptor()/draw_keypoints()ให้ใช้อ็อบเจกต์ keypoints (การปรับ ORB ใหม่)เปลี่ยนชื่อ
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()เป็นรูปแบบset_auto_*(การเปลี่ยนชื่อฟังก์ชัน auto)ย้ายโค้ด histogram/statistics ไปใช้เมธอดแบบอ็อบเจกต์ (การปรับ histogram/statistics ใหม่)
เปลี่ยนชื่อ
scale=ของfind_features()เป็นscale_factor=(การเปลี่ยนชื่อ find_features)ใช้ตัวเข้าถึงอ็อบเจกต์ blob และแทนที่
find_markers()ด้วยfind_blobs(merge=True, ...)(การเปลี่ยนแปลง find_blobs); แทนที่img.copy_to_fb()ด้วย keywordcopy_to_fb=(การเปลี่ยนแปลง copy_to_fb)จำกัด quality ของ
compress()ให้อยู่ในช่วง 1–100 และตรวจสอบขนาด JPEG บน OpenMV 3 (การเปลี่ยนแปลง compress); ปรับจูน zoom ของlens_corr()ใหม่ (การเปลี่ยนแปลง lens_corr)
สคริปต์อื่น ๆ ทั้งหมดทำงานได้โดยไม่ต้องเปลี่ยนแปลง