v2.1.0¶
v2.1.0은 대규모 API 현대화 릴리스입니다. FREAK 키포인트 디스크립터를 ORB로 교체하고, find_blobs() / 히스토그램 / 통계를 객체 기반 API로 재작업하며, sensor의 자동 노출/게인/화이트밸런스 함수의 이름을 변경하고, QR 코드 검출과 OV7725 렌즈 보정을 추가하며, 초기 OpenMV Cam M7 보드를 브링업합니다. 많은 API가 변경되었습니다 — 아래의 호환성 변경 사항을 읽어보세요.
주요 사항¶
ORB 키포인트 — FREAK 디스크립터가 ORB로 교체되었습니다(
find_keypoints()/match_descriptor()재작업).객체 API —
find_blobs(),get_histogram(),get_statistics()가 이제 명명된 접근자를 가진 객체를 반환합니다.QR 코드 —
image.find_qrcodes()검출이 추가되었습니다.OpenMV Cam M7 — 초기 보드 지원.
Sensor —
set_auto_whitebal()/set_auto_gain()/set_auto_exposure()(이름 변경됨)와set_lens_correction().호환성: 키포인트/디스크립터, 블롭/히스토그램/통계, 센서 자동 함수, 그 외 여러 API가 변경되었습니다 — 호환성 변경 사항을 참조하세요.
새로운 기능¶
OpenMV Cam M7 — 초기 OpenMV 3(M7) 보드 지원을 추가했습니다.
QR 코드 —
qrcodes.py예제와 함께image.find_qrcodes()를 추가했습니다.ORB 키포인트 — 새로운 ORB 디스크립터 시스템:
corner_detector인자(CORNER_FAST/CORNER_AGAST),max_keypoints/scale_factor를 갖춘find_keypoints();filter_outliers키워드와 회전 추정치를 갖춘match_descriptor(); 키포인트 저장/로드.객체 API —
image.get_histogram()/get_statistics()/get_percentile()가 히스토그램/통계 객체를 반환합니다;find_blobs()가area_threshold/pixels_threshold/merge/margin/invert와x_stride/y_stride를 갖춘 블롭 객체(rect()/cx()/cy()/code()/area()/pixels())를 반환합니다.Sensor — OV7725 렌즈 셰이딩을 위한
sensor.set_lens_correction(enable, radi, coef)를 추가했습니다,sensor.set_windowing()이 이제(w, h)튜플도 받습니다(자동 중앙 정렬), 그리고image.Image(..., copy_to_fb=True)/load_image(copy_to_fb=True).색상 추적, Arduino SPI/I2C 슬레이브, 키포인트, 히스토그램/통계 예제 스크립트를 추가했습니다.
기타 변경 및 개선 사항¶
IDE가 이제 실행 중인
main.py를 인터럽트할 수 있습니다; 더 빠른find_blobs()/find_qrcodes()/get_statistics(); ORB는 popcount 해밍 거리를 사용합니다; 렌즈 보정이 RAM을 더 적게 사용합니다; Linuxudev규칙이 ModemManager가 시리얼 포트를 점유하는 것을 막습니다.
버그 수정¶
카메라 및 이미징:
M7 DMA 캐시 클린/무효화(프레임 손상), 각 프레임 끝의 가짜 추가 라인, JPEG 프레임버퍼 오버플로 경계,
compress()실패 시 프레임버퍼 해제, ORB 정확도 / ROI / 빈 집합 처리, 그리고load_image(copy_to_fb=True)지오메트리를 수정했습니다.
시스템:
F7 ADC 지원, OV7725 레지스터 이름, 부트로더/USB 타이밍을 수정하고, 스냅샷을 기다리는 동안 WFI를 사용했으며, MJPEG 스트리머 예제를 클라이언트별 타임아웃을 갖춘 논블로킹 방식으로 만들었습니다.
하드웨어 및 보드 지원¶
OpenMV Cam M7 (OpenMV 3) — 초기 보드 지원.
OV7725 — 렌즈 보정(셰이딩) 지원.
호환성을 깨는 API 변경¶
v2.0.0과 v2.1.0 사이의 사용자에게 보이는 API 변경 사항입니다. 범위: modules/의 Python C 모듈과 scripts/libraries/의 Python 라이브러리.
각 변경 사항에는 영향도가 태그로 표시되어 있습니다:
major — 해당 기능을 사용한 대부분의 스크립트에 영향을 줍니다; 코드를 포팅해야 합니다.
minor — 좁은 API; 이를 사용한 스크립트에만 영향을 줍니다.
behavior — 동일한 API, 다른 결과; 조정된 스크립트를 다시 확인하세요.
변경 사항은 그 순서대로 영향도별로 분류되어 있습니다. 코드를 포팅하기만 하면 된다면, 끝부분의 마이그레이션 체크리스트로 건너뛰세요. 각 커밋 해시는 GitHub의 해당 diff로 연결됩니다.
FREAK가 ORB로 교체됨; 디스크립터 API 재작업 (major)¶
FREAK 키포인트 디스크립터가 제거되고 ORB로 교체되었습니다: image.FREAK는 더 이상 존재하지 않습니다(image.ORB를 사용하세요). image.match_descriptor() / save_descriptor() / load_descriptor()는 더 이상 선두의 디스크립터 타입 인자를 받지 않으며(객체로부터 추론됨), match_descriptor()는 이제 8개 요소 튜플 (cx, cy, x, y, w, h, match_count, rotation)을 반환하고(마지막 요소는 백분율이 아닌 원시 개수임), draw_keypoints()는 원시 (x, y, angle) 리스트 대신 키포인트 객체를 요구합니다. find_keypoints()는 변경된 기본값과 함께 corner_detector / max_keypoints / scale_factor를 추가했습니다.
센서 자동 함수 이름 변경 (major)¶
sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl()이 sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure()로 이름이 변경되었습니다(기존 이름은 제거됨). 각 함수는 자동 대신 수동 값을 설정하기 위한 선택적 value= 키워드를 추가했습니다.
커밋: 1b22a2961
히스토그램 / 통계가 객체 API로 재작업됨 (major)¶
히스토그램/통계 인터페이스가 히스토그램/통계 객체를 반환하는 객체 기반 image.get_histogram() / get_statistics() / get_percentile()로 재작업되었습니다. 기존의 평면적인 히스토그램/통계 결과와 bin_count / l_bin_count / a_bin_count / b_bin_count 메서드는 제거되었습니다(len(histogram.bins()) 등을 사용하세요).
find_features()의 scale 이름 변경 (major)¶
image.find_features()(Haar)가 scale= 키워드를 scale_factor=로 이름 변경했습니다. find_features(cascade, scale=...) 호출을 scale_factor=...로 갱신하세요.
커밋: 96e4f770c
find_blobs()가 객체를 반환함; find_markers() 제거됨 (minor)¶
image.find_blobs()가 이제 명명된 접근자를 가진 블롭 객체를 반환하며(하위 호환성을 위해 인덱스 접근도 여전히 동작함), image.find_markers()는 제거되었습니다 — 대신 find_blobs(..., merge=True, margin=...)를 사용하세요. 고급 색상 블롭 필터 콜백은 더 이상 지원되지 않습니다.
커밋: af15ec6eb
img.copy_to_fb()가 교체됨 (minor)¶
img.copy_to_fb() 메서드가 image.Image / load_image()의 copy_to_fb= 키워드로 교체되었습니다. 큰 이미지를 프레임버퍼로 바로 로드하려면 image.Image(path, copy_to_fb=True)를 사용하세요.
커밋: 1645ab94b
compress()가 범위를 벗어난 품질을 거부함 (behavior)¶
image.compress() / compressed()는 이제 quality가 1–100 범위를 벗어나면 조용히 클램프하는 대신 오류를 발생시킵니다. 호출하기 전에 quality를 1–100으로 클램프하세요. 별도로, OpenMV 3 JPEG 버퍼가 64 KB에서 23000 바이트로 줄어들었으므로, 큰 프레임은 이제 메모리 부족을 일으킬 수 있습니다 — JPEG 품질이나 프레임 크기를 낮추세요.
lens_corr() 줌이 이제 작동함 (behavior)¶
image.lens_corr()가 이제 실제로 zoom 인자를 적용합니다(이전에는 파싱되었지만 효과가 없었음). 따라서 기본값이 아닌 줌을 전달한 스크립트는 출력이 달라집니다. lens_corr() 튜닝을 다시 확인하세요.
커밋: d6b49adef
마이그레이션 체크리스트¶
v2.1.0으로 깔끔하게 포팅하려면 일반적으로 다음 작업이 필요합니다:
image.FREAK를image.ORB로 교체하고, 디스크립터 타입 인자를 제거하며,match_descriptor()튜플 언패킹 /draw_keypoints()를 키포인트 객체에 맞게 갱신하세요 (ORB 재작업).sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()을set_auto_*형태로 이름 변경하세요 (자동 함수 이름 변경).히스토그램/통계 코드를 객체 메서드로 옮기세요 (히스토그램/통계 재작업).
find_features()의scale=을scale_factor=로 이름 변경하세요 (find_features 이름 변경).블롭 객체 접근자를 사용하고
find_markers()를find_blobs(merge=True, ...)로 교체하세요 (find_blobs 변경);img.copy_to_fb()를copy_to_fb=키워드로 교체하세요 (copy_to_fb 변경).compress()품질을 1–100으로 클램프하고 OpenMV 3에서 JPEG 크기를 다시 확인하세요 (compress 변경);lens_corr()줌을 재조정하세요 (lens_corr 변경).
그 외 모든 스크립트는 변경 없이 실행됩니다.