v4.7.0¶
v4.7.0은 주요 기능 릴리스입니다. 핵심 내용으로는, 듀얼 코어 openamp 프로그래밍 모델을 갖춘 새로운 OpenMV AE3(Alif Ensemble, Cortex-M55 + Ethos-U55 NPU) 보드, 번들된 모델과 캐스케이드를 포함하는 읽기 전용 ROMFS(/rom) 파일 시스템, VL53L8CX 8x8 비행 시간 측정 지원, 새로운 YOLOv8 / YOLO-LC 후처리기, 그리고 MicroPython 1.25가 있습니다. 또한 내장 모델과 Haar 캐스케이드를 로드하는 방식이 변경되었으므로 아래의 호환성 변경 사항을 읽어보십시오.
주요 내용¶
OpenMV AE3 보드 — Alif Ensemble(Cortex-M55 + Ethos-U55 NPU) 보드로, 전체 포트, 부트로더, ROMFS를 갖추고 있습니다.
듀얼 코어
openamp모듈 — RPMsg를 통해 두 번째 Alif 코어로 작업을 오프로드합니다(@async_remote데코레이터,Endpoint/EndpointIO).ROMFS — 내장 TFLite 모델과 Haar 캐스케이드를 포함하는 읽기 전용
/rom파일 시스템과 새로운tools/mkromfs.py호스트 빌더.VL53L8CX 8x8 다중 영역 비행 시간 측정 센서 지원.
새로운 ML 후처리기 —
yolo_v8_postprocess와yolo_lc_postprocess.MicroPython이 1.25.0으로 업데이트되었습니다.
호환성 변경: 내장 모델과 Haar 캐스케이드는 이제
/rom에서 경로로 로드됩니다(ml.Model 변경 및 Haar 캐스케이드 변경 참조).
새로운 기능¶
OpenMV AE3 — 새로운 Alif Ensemble 보드(Cortex-M55 애플리케이션 코어 + Ethos-U55 NPU)로, 포트, 부트로더, 보드 구성, RGB LED, ROMFS 지원을 갖추고 있습니다.
openamp— Alif 듀얼 코어(Open-AMP / RPMsg) RPC 모델을 위한 새로운 모듈입니다:Endpoint,EndpointIO,new_service_callback, 그리고 마샬링된 함수를 두 번째 코어로 오프로드하는@async_remote데코레이터. HE/HP 코어는 기본 asyncio 기반_boot.py태스크 러너를 함께 제공합니다.audio— Alif 포트는 AE3에서 콜백 기반 스트리밍 API(audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=))를 갖춘 오디오 모듈(PDM 마이크)을 추가합니다.ROMFS — 보드별로 패키징된 내장 자산(TFLite 모델, Haar 캐스케이드 등)을 포함하는 읽기 전용
/rom파일 시스템, 새로운tools/mkromfs.py호스트 도구(tflite, tflite+vela, Haar 캐스케이드, 텍스트, 바이너리), 그리고ls_romfs()를 노출하는scripts/libraries/romfs.py헬퍼.ML 후처리 — 새로운
yolo_v8_postprocess(YOLOv8)와yolo_lc_postprocess(임베디드에 최적화된 기본 앵커를 갖춘 경량 tiny-YOLOv2 변형) 클래스로, 각각threshold,nms_threshold,nms_sigma를 받습니다.GenX320 안티 플리커 — 이벤트 센서의 안티 플리커 필터(최소/최대 플리커 주파수, Hz 단위)를 활성화하고 구성하는 새로운
IOCTL_GENX320_SET_AFKioctl로,genx320_grayscale_set_afk.py예제가 함께 제공됩니다.VL53L8CX —
tof모듈을 통한 8x8 다중 영역 비행 시간 측정 센서 지원(자동 감지, 15Hz에서 8x8).
기타 변경 사항 및 개선 사항¶
MicroPython이 1.25.0으로 업데이트되었습니다(STM32 및 i.MX RT 포트). 업스트림 Alif 포트가 추가되었고 STM32 / i.MX RT 포트에서 기존 BT-HCI 드라이버가 제거되었습니다.
GenX320 — 새로운 ISSD 시퀀스가 더 높은 프레임 레이트를 위해 내부 픽셀 클록을 두 배(24 → 48 MHz)로 높입니다.
STM32N6 / ST Edge AI — STM32N6 Neural-ART 모델 배포를 위한 기반 작업(ST Edge AI 도구 및 ROMFS 지원).
PAG7936 — 이제 CSI PHY 비트레이트가 설정되어 해당 센서의 동작이 개선되었습니다.
버그 수정¶
카메라 및 센서:
I2C를 통한 IMU를 수정했습니다 — LSM6DSx IMU를 I2C로 연결하는 보드가 이제 올바르게 초기화되고 읽힙니다(이전에는 I2C 경로가 잘못된 읽기 경로와 잘못된 상수를 사용했습니다).
FLIR Boson 초기화는 이제 부팅에 약 10초가 걸리는 구형(< IDD 4.x) 센서에 대해 최대 10회까지 재시도하며, 리셋 시 공장 기본 설정이 복원되어 외부에서 로드된 설정이 비디오 출력을 손상시킬 수 없습니다.
GenX320
psee_ehc_activate_override가 잘못된(0) 누적 시간을 기록하던 문제를 수정했습니다.FastMode+ 하드웨어가 없는 STM32 보드에서, I2C 패스트 모드를 요청할 때 이제 버스를 조용히 잘못 구성하는 대신 적절히 보호됩니다.
머신러닝:
YOLOv2 / YOLOv5 후처리기에서 경계 상자 수집과
np.nonzero처리를 수정하여 검출 신뢰성을 개선했습니다.
하드웨어 및 보드 지원¶
OpenMV AE3 — 새로운 Alif Ensemble(Cortex-M55 + Ethos-U55 NPU) 보드.
VL53L8CX — 8x8 다중 영역 비행 시간 측정 센서. AE3의 ToF 센서가 VL53L5CX에서 VL53L8CX로 변경되었습니다.
STM32N6 — ST Edge AI(Neural-ART) 모델 배포 기반 작업.
호환성을 깨는 API 변경¶
v4.6.20과 v4.7.0 사이의 사용자에게 보이는 API 변경 사항입니다. 범위: modules/의 Python C 모듈과 scripts/libraries/의 Python 라이브러리.
각 변경 사항은 영향도에 따라 태그가 지정됩니다:
major — 해당 기능을 사용한 대부분의 스크립트를 수정해야 합니다.
minor — 좁은 범위의 API로, 해당 기능을 사용한 스크립트에만 영향을 줍니다.
behavior — 동일한 API이지만 결과가 다릅니다. 튜닝된 스크립트를 다시 확인하십시오.
변경 사항은 해당 순서대로 영향도별로 그룹화됩니다. 코드를 포팅하기만 원한다면 끝부분의 마이그레이션 체크리스트로 이동하여 요약된 할 일 목록을 확인하십시오. 각 커밋 해시는 GitHub의 해당 diff로 연결됩니다.
내장 모델은 이름이 아니라 경로로 로드됩니다 (major)¶
ml.Model은 더 이상 단순 이름 문자열로부터 내장 모델을 로드하지 않습니다. 모델은 이제 파일 시스템 / ROMFS에서 경로로 로드됩니다:
model = ml.Model("/rom/person_detect.tflite") # was: ml.Model("person_detect")
C 측 model.labels 속성이 제거되었습니다. 레이블은 이제 Python ml.Model 래퍼가 사이드카 <model>.txt 파일에서 로드합니다(없으면 None). 모든 번들 예제와 ml/apps.py가 /rom/*.tflite 경로를 사용하도록 업데이트되었습니다.
Haar 캐스케이드는 ROMFS에서 로드됩니다 (minor)¶
image.HaarCascade()는 이제 VFS / ROMFS를 통해 내장 캐스케이드를 로드합니다. 기본 정면 얼굴 캐스케이드 파일이 haarcascade_frontalface_default.xml에서 haarcascade_frontalface.xml로 이름이 변경되었으며, 로드 실패 시 이제 OSError 대신 RuntimeError(“Failed to load Haar cascade”)가 발생합니다.
커밋: 9de1220d8
tof.reset() / tof.deinit() 동작 (behavior)¶
tof 모듈에서 reset()은 이전에 init()의 별칭이었고 실제 deinit이 없었습니다. tof.reset()은 이제 실제 센서 리셋을 수행하며 tof.deinit()은 센서를 적절히 종료합니다(VL53L5CX 종료 지원 포함). reset()이 센서를 재초기화하는 데 의존했던 코드는 다시 확인해야 합니다.
GenX320 타이밍 및 이벤트 모드 제약 (behavior)¶
새로운 GenX320 ISSD 시퀀스가 센서 시간 기준을 변경합니다: 프레임 레이트와 노출 인자는 이제 클록 스케일링되는 대신 1 MHz 단위로 표현되며, HSYNC 블랭킹은 요청된 프레임 레이트에 맞춰 동적으로 조정됩니다. GenX320 타이밍 값을 하드코딩한 스크립트는 다시 튜닝해야 합니다. 이벤트 모드 캡처는 이제 이미지 트랜스포즈가 활성화되면 오류를 발생시킵니다(해당 구성에서는 지원되지 않습니다).
마이그레이션 체크리스트¶
v4.7.0으로 깔끔하게 포팅하기 위한 일반적인 작업은 다음과 같습니다:
내장 모델 로딩을 이름 문자열에서
/rom/<name>.tflite경로로 변경하고, 사이드카<name>.txt파일을 통해 레이블을 제공하십시오(ml.Model 변경).haarcascade_frontalface_default.xml을haarcascade_frontalface.xml로 업데이트하고 캐스케이드 로드 실패 시OSError가 아닌RuntimeError를 처리하십시오(Haar 캐스케이드 변경).tof.reset()이 센서를 재초기화하는 데 의존했던 코드를 제거하십시오(tof 변경).하드코딩된 GenX320 프레임 레이트 / 노출 값을 1 MHz 단위로 다시 튜닝하고, 이벤트 모드에서는 트랜스포즈를 활성화하지 마십시오(GenX320 변경).