v3.0.0

v3.0.0은 주요 v2 → v3 릴리스입니다. OpenMV Cam M7(STM32F7)과 새로운 nn CMSIS-NN 신경망 모듈(기존의 하드코딩된 find_number() / classify_object() 메서드를 대체)을 도입하고, MT9V034 글로벌 셔터FLIR Lepton 센서 지원, sensor.WVGA 프레임 크기를 추가하며, 코어를 MicroPython 1.9.4로 업데이트합니다. 여러 image / sensor / WiFi 동작이 변경되었습니다 — 아래의 호환성 변경 사항을 확인하세요.

주요 사항

  • OpenMV Cam M7 — 새로운 STM32F7 보드.

  • nn 모듈 — CMSIS-NN 추론: nn.load(), Net.forward(), Net.search(), 모델 변환기 및 예제 포함.

  • 새로운 센서 — MT9V034 글로벌 셔터(FSIN 트리거)와 FLIR Lepton.

  • MicroPython 1.9.4 코어 업데이트.

  • 호환성 변경: 하드코딩된 image.find_number() / image.classify_object()가 제거되었고, sensor.sleep()이 이제 예외를 발생시키며, WINC 소켓이 실제 바이트 수를 반환하고, image.binary()가 새 이미지를 반환하며, find_apriltags()가 64K 픽셀로 제한됩니다 — 호환성 변경 사항을 참고하세요.

새로운 기능

  • nn — 새로운 CMSIS-NN 신경망 모듈: nn.load(path), Net.forward(img, roi=, softmax=, dry_run=)(0.0–1.0 부동소수점 반환), 멀티 스케일/위치 검출을 위한 Net.search(), 그리고 Net.test()와 더불어 CMSIS-NN 모델 변환기(nn_convert.py / nn_quantizer.py), 번들된 CIFAR-10 / LeNet / smile 모델, NN / NN 검색 예제 스크립트를 제공합니다.

  • Sensors — OpenMV 4의 MT9V034 글로벌 셔터 지원(FSIN 트리거 스냅샷), Lepton 스냅샷을 지원하는 업데이트된 FLIR Lepton 드라이버, 그리고 새로운 sensor.WVGA(720x480) / sensor.WVGA2(752x480) 프레임 크기.

  • 이미징image.find_circles()r_min / r_max / r_step 키워드(더 빠른 Hough)가 추가되었고, find_keypoints()와 Haar find_features()가 이제 RGB 이미지를 받으며, image.compress() / JPEG 인코딩이 이제 바이너리(비트맵) 이미지를 지원합니다.

  • 부팅boot.py가 이제 USB 초기화 전에 실행되어 USB 모드(예: HID)를 재정의할 수 있습니다.

  • 예제 — 소형/고해상도 AprilTag 예제, I2C LIDAR-Lite V3 예제, 데이터셋 도구(augment_images.py / make_patches.py)를 추가했습니다.

기타 변경 및 개선 사항

  • 번들된 MicroPython을 1.9.4로 업데이트했고(pyexec 파싱/컴파일/실행 되돌리기 및 PendSV 수정 포함), fb_alloc / xalloc 메모리 부족 오류 메시지를 더 명확하게 했으며, 네트워크 로딩 중 nn printf 잡음을 억제하고, 저장소를 재구성했습니다(예제 → scripts/, 도구 → tools/, Haar 캐스케이드 → ml/). nn 모듈은 OpenMV 2에서는 사용할 수 없습니다(플래시 부족).

버그 수정

이미징:

  • x≤0에 대한 fast_atan2f(이전에는 항상 0이었음 — 블롭 / 선 / 키포인트 각도를 다시 확인하세요), find_apriltags() 메모리 처리(OOM 시 내용 손실 및 잘못된 realloc), 바이너리/비트맵 bpp별 행 포인터(손상된 바이너리 결과), ROI를 사용한 find_edges(EDGE_CANNY), TO_GS_PIXEL 매크로(적분 / 모폴로지), 그레이스케일(bpp==0) 프레임의 비트맵/JPEG 스트리밍, 키포인트/블롭 리스트 pop_front, 그리고 match_descriptor 결과를 수정했습니다.

시스템 및 카메라:

  • USB HID 인터페이스/엔드포인트 번호, 런타임에 XCLK 주파수를 동적으로 변경하는 기능, Net.forward()가 올바른 출력 개수를 반환하도록, 그리고 스크립트 파싱을 중단할 때 발생하던 하드폴트를 수정했습니다.

하드웨어 및 보드 지원

  • OpenMV Cam M7 (STM32F7) — 새로운 보드.

  • MT9V034 글로벌 셔터 센서(OpenMV 4, FSIN 트리거).

  • FLIR Lepton — 스냅샷 지원이 추가된 업데이트된 드라이버.

호환성을 깨는 API 변경

v2.9.0과 v3.0.0 사이의 사용자에게 보이는 API 변경 사항입니다. 범위: modules/의 Python C 모듈과 scripts/libraries/의 Python 라이브러리.

각 변경에는 영향도가 표시되어 있습니다:

  • 주요 — 해당 기능을 사용한 대부분의 스크립트에 영향을 줍니다. 코드를 포팅해야 합니다.

  • 사소 — 좁은 범위의 API로, 이를 사용한 스크립트에만 영향을 줍니다.

  • 동작 — 동일한 API이지만 결과가 다릅니다. 튜닝된 스크립트를 다시 확인하세요.

변경 사항은 그 순서대로 영향도별로 그룹화되어 있습니다. 코드를 포팅하고 싶다면 끝부분의 마이그레이션 체크리스트로 바로 이동하세요. 각 커밋 해시는 GitHub의 해당 diff로 연결됩니다.

image.find_number() / image.classify_object() 제거 (주요)

하드코딩된 image.find_number()(LeNet)와 image.classify_object()(CMSIS CNN) 메서드가 새로운 nn 모듈을 위해 제거되었습니다. net = nn.load('/model.network'); out = net.forward(img)로 대체하세요.

커밋: d151f7e38

sensor.sleep() / sensor.reset()가 실패 시 예외 발생 (사소)

sensor.sleep()sensor.reset()은 이제 실패 시 True / False를 반환하는 대신 예외를 발생시킵니다. sensor.sleep()의 불리언 반환값을 확인하던 코드는 대신 해당 호출을 try / except로 감싸야 합니다.

커밋: 7d16d008f

WINC 소켓이 실제 바이트 수를 반환 (동작)

WINC1500 소켓의 send / recv / sendto / recvfrom 메서드는 이전에는 항상 0을 반환했지만, 이제 실제로 전송된 바이트 수를 반환합니다. 0 반환을 가정했던(또는 그 값에 대해 루프/블록했던) 코드는 실제 바이트 수를 처리해야 합니다.

커밋: a07fb2f60

image.binary()가 새 이미지를 반환 (동작)

image.binary()to_bitmap / copy 키워드가 추가되었으며, 이제 원본 이미지를 제자리에서 반환/변경하는 대신 새로운 이미지 객체를 반환합니다. binary()가 원본 이미지를 변경하는 데 의존했던 코드는 반환된 객체를 사용해야 합니다(제자리 변경이 아닌 동작을 원하면 copy=True를 전달하세요).

커밋: 8a44f0cd9

find_apriltags()가 64K 픽셀로 제한 (동작)

image.find_apriltags()는 이제 이미지(또는 ROI)가 64K 픽셀을 초과하면 예외를 발생시키고, 4x4보다 작은 이미지에 대해서는 빈 리스트를 반환합니다. find_apriltags()를 호출하기 전에 큰 이미지를 축소하세요(더 작은 framesize를 사용하거나 명시적인 roi를 전달).

커밋: bd77afbc0

마이그레이션 체크리스트

v3.0.0으로 깔끔하게 포팅하려면 일반적으로 다음 작업이 필요합니다:

  1. image.find_number() / image.classify_object()nn 모듈로 대체하세요(nn 마이그레이션).

  2. 불리언 반환값을 확인하는 대신 sensor.sleep() / sensor.reset()try / except로 감싸세요(sensor.sleep 변경).

  3. WINC 소켓 send / recv의 실제 바이트 수를 처리하세요(WINC 소켓 변경).

  4. 제자리 변경을 기대하는 대신 image.binary()가 반환한 이미지를 사용하세요(binary 변경).

  5. 64K 픽셀 미만으로 유지하기 위해 find_apriltags() 전에 이미지를 축소하세요(find_apriltags 제한).

그 외 모든 스크립트는 변경 없이 실행됩니다.