v3.6.1

v3.6.1은 대규모 릴리스입니다. imu 모듈(LSM6DS3), IMU 기반 자동 회전을 갖춘 일련의 새로운 sensor 게터 API, 4점 원근 rotation_corr() 을 도입하고, HIMAX HM01B0OV7690 카메라와 함께 Arduino Portenta H7 을 지원하기 시작합니다. 여러 sensor / image API가 변경되었고 M7에서 TensorFlow가 제거되었습니다 — 아래의 호환성 깨짐 변경 사항을 확인하세요.

주요 사항

  • imu 모듈 — LSM6DS3(OpenMV 4 / Portenta)의 가속도계 / 자이로 / 온도 / 롤 / 피치.

  • 센서 게터 + 자동 회전get_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing(), set_transpose() / set_auto_rotation(), 그리고 IMU 기반 스냅샷 회전.

  • 원근 보정rotation_corr()fovcorners (4점) 키워드가 추가되었습니다.

  • 새로운 하드웨어 — Arduino Portenta H7, HIMAX HM01B0, OV7690 카메라.

  • 호환성 깨짐: set_pixformat() / set_framesize() 가 이제 None 을 반환하고, sensor.set_framerate() 가 제거되었으며, M7에서 TensorFlow가 제거되었고, lens_corr() / linpolar() 가 이제 짝수 크기를 요구합니다 — 호환성 깨짐 변경 사항을 확인하세요.

새로운 기능

  • imu — 새로운 IMU 모듈: imu.acceleration_mg(), imu.angular_rate_mdps(), imu.temperature_c(), imu.roll(), imu.pitch(), imu.sleep() (OpenMV 4 / Portenta의 LSM6DS3).

  • 센서 게터sensor.get_pixformat(), get_framesize(), get_hmirror(), get_vflip(), get_windowing(), set_transpose() / get_transpose(), set_auto_rotation() / get_auto_rotation() 이 추가되었습니다.

  • 자동 회전 — 자동 회전이 활성화되면 sensor.snapshot() 이 IMU를 사용하여 프레임을 뒤집기 / 미러링 / 전치합니다.

  • rotation_corr()fovcorners (4점 원근) 키워드와 원근 보정 예제가 추가되었습니다.

  • lcd.init()bgr 키워드 인수가 추가되었습니다.

  • collections.deque — MicroPython 빌드에서 활성화되었습니다.

  • sensor.OV7690sensor.HM01B0 id 상수와 numpy 유사 ulab 이미지 필터 예제가 추가되었습니다.

기타 변경 사항 및 개선 사항

  • 이미지 필터(median / mode / mean / …)와 find_circles() 및 렌즈 보정을 크게 최적화했습니다. alloc_extra_fb 가 이제 임의의 바이트 수를 할당할 수 있습니다. 사람 검출 모델이 새로운 average-pool 연산으로 재구축되었습니다.

버그 수정

카메라 및 센서:

  • OV2640 sleep() (이제 전원 차단 핀 대신 COM2 스탠바이 레지스터를 사용함), FSYNC 핀 구성, HM01B0 HSYNC/VSYNC 극성 및 I2C 주소/스캐닝, Portenta 센서 전원 차단 GPIO 및 카메라 리셋 핀을 수정했으며, IMU 피치가 90°/270° 부근일 때 자동 회전을 비활성화했습니다.

이미징 및 시스템:

  • 이미지 필터 경계 검사 버그, D-cache 비활성화 시 발생하는 하드폴트, SD 카드가 없는 보드에서의 부팅, tf.load() load_to_fb 버그, 사람 검출 스택 오버플로(H7 스택을 ≥12 KB로 상향), OpenMV 4 Plus의 고속 모드 USB 디스크립터 오프셋을 수정했습니다.

하드웨어 및 보드 지원

  • Arduino Portenta H7 — 초기 보드 지원 시작(STM32H747 클럭/OSC/HSE 구성, CMSIS 헤더, ADC, SDRAM, Arduino USB PID).

  • HIMAX HM01B0 — 새로운 흑백 카메라 드라이버(Bayer, 외부 발진기 클럭).

  • OV7690 — 새로운 카메라 드라이버.

  • LSM6DS3 IMU — OpenMV 4 / Portenta.

호환성 깨짐 API 변경 사항

v3.6.0과 v3.6.1 사이의 사용자 가시적 API 변경 사항입니다. 범위: modules/ 의 Python C 모듈과 scripts/libraries/ 의 Python 라이브러리.

각 변경 사항은 영향도로 태그가 지정되어 있습니다:

  • minor — 좁은 범위의 API. 이를 사용한 스크립트에만 영향을 미칩니다.

  • behavior — 동일한 API이지만 결과가 다름. 조정된 스크립트를 다시 확인하세요.

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

sensor.set_framerate() 제거됨 (minor)

no-op 스텁이었던 sensor.set_framerate() 가 제거되었습니다. 이제 이를 호출하면 AttributeError 가 발생합니다. 호출을 제거하고 대신 framesize/exposure를 통해 프레임 타이밍을 제어하세요. (작동하는 set_framerate() 는 v4.0.2에서 다시 도입됩니다.)

커밋: 705e98f91

OpenMV Cam M7에서 TensorFlow 제거됨 (minor)

TensorFlow(tf 모듈)가 OpenMV Cam M7 / OpenMV 3에서 비활성화되었습니다(더 이상 들어가지 않음). M7에서 import tf 는 실패합니다 — TensorFlow에는 H7급 카메라를 사용하세요. (tf 는 v3.6.3에서 F7에 다시 활성화됩니다.)

커밋: 2ae875077

set_pixformat() / set_framesize()None 을 반환 (behavior)

sensor.set_pixformat()sensor.set_framesize() 가 이제 True 대신 None 을 반환하며, 지원되지 않는 픽셀 형식은 이제 어서션 대신 ValueError 를 발생시킵니다. 반환값을 검사하던 코드(예: if sensor.set_pixformat(...):)는 그렇게 하지 않도록 해야 하며, 지원되지 않는 형식에 대해 AssertionError 를 잡던 코드는 ValueError 를 잡아야 합니다.

커밋: f314ac4e7

lens_corr() / linpolar() / logpolar() 가 짝수 크기를 요구 (behavior)

image.lens_corr()image.linpolar() / image.logpolar() 가 이제 이미지 너비와 높이가 짝수일 것을 요구하며 홀수 크기에서는 오류를 발생시킵니다. 이러한 메서드를 호출하기 전에 이미지를 짝수 크기로 잘라내거나 크기를 조정하세요.

커밋: b36460a36, 2b26ca17b

마이그레이션 체크리스트

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

  1. sensor.set_framerate() 호출을 제거하세요 (set_framerate 제거).

  2. TensorFlow 워크로드를 OpenMV Cam M7에서 다른 곳으로 옮기세요 (M7 TensorFlow 변경).

  3. set_pixformat() / set_framesize() 의 반환값에 의존하지 말고 지원되지 않는 픽셀 형식에 대해 ValueError 를 잡으세요 (반환값 변경).

  4. lens_corr() / linpolar() / logpolar() 전에 이미지 크기가 짝수인지 확인하세요 (짝수 크기 요구 사항).

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