v3.9.0¶
v3.9.0은 주요 릴리스입니다. Arduino Nano 33 BLE Sense를 지원하는 nRF 포트(카메라, PDM audio 모듈, ulab, 고정된 센서 드라이버)를 추가하고, FLIR Lepton과 MLX90641 / MLX90621 열 센서 및 대폭 개편된 fir 모듈, OV5640 자동 초점 ioctl, 그리고 새로운 image.ImageIO 스트리밍 타입을 제공합니다. 레거시 CMSIS-NN nn 모듈과 기존 ImageReader / ImageWriter 클래스는 제거되었습니다. 아래의 호환성 변경 사항을 확인하세요.
주요 내용¶
Arduino Nano 33 BLE Sense — 카메라, PDM
audio모듈,ulab, 동결된 센서 드라이버를 갖춘 새로운 nRF52840 포트.열화상 — 재작업된
fir모듈(팔레트, 미러링, 스케일링, 라디오메트리, FFC)과 함께 FLIR Lepton, MLX90641, MLX90621 지원.OV5640 자동 초점 — 새로운
sensor.IOCTL_*_AUTO_FOCUSioctl.image.ImageIO—ImageReader/ImageWriter를 대체하는 통합 이미지 스트림 타입(메모리 또는 파일; read/write/seek/size/close).호환성 영향: CMSIS-NN
nn모듈과image.ImageReader/image.ImageWriter가 제거되었고,find_lines()/fir동작이 변경되었습니다 — 호환성에 영향을 주는 변경 사항을 참조하세요.
새로운 기능¶
nRF 포트 / Arduino Nano 33 BLE Sense — 새로운 nRF52840 포트 및 보드 지원으로, 새로운
audio모듈(audio.init(),audio.start_streaming(),audio.stop_streaming()),ulab활성화, 동결된apds9960/lps22h/lsm9ds1/hts221센서 드라이버를 포함합니다.image.ImageIO—read()/write()/seek()/size()/close()로 메모리 및 파일 스트림을 모두 지원하는 새로운 이미지 스트림 타입과 ImageIO 읽기/쓰기/메모리 예제.FLIR Lepton —
fir.radiometric(),fir.trigger_ffc(),fir.register_vsync_cb()와 함께FIR_LEPTON지원을 추가했습니다.열화상 센서 — MLX90641(
FIR_MLX90641)과 MLX90621 서모파일 지원을 추가했습니다(공식 Melexis 드라이버).fir팔레트 / 방향 —fir.PALETTE_RAINBOW/PALETTE_IRONBOW/GRAYSCALE/RGB565상수를 추가했으며,fir.read_ir()가 이제hmirror/vflip/transpose를 허용합니다.OV5640 자동 초점 —
sensor.IOCTL_TRIGGER_AUTO_FOCUS/IOCTL_PAUSE_AUTO_FOCUS/IOCTL_RESET_AUTO_FOCUS/IOCTL_WAIT_ON_AUTO_FOCUS를 추가했습니다(OpenMV 2/3/4/4 Plus/PT/Portenta).Arduino 예제를 보드별 디렉터리로 재구성했습니다.
기타 변경 및 개선 사항¶
압축된 MicroPython 오류 메시지(더 짧은 예외 문자열)로 전환했습니다.
fir.init()의type인자가 생략되면 이제 I2C 버스 스캔을 통해 자동 감지합니다.xalloc예외는 이제 요청된 바이트 수를 보고합니다. Portenta에서 UART 8을 활성화했습니다. FIR 예제는thermal_camera.py/thermal_overlay.py/thermal_overlay_lcd.py로 통합되었습니다. 플래시에 맞추기 위해 OpenMV 4 빌드에서image.get_similarity()와 선택적 검색(selective search)이 비활성화되었으며, 이미지 라이브러리는 이제 파일시스템 없이도 빌드할 수 있습니다(파일시스템이 없는 보드용).
버그 수정¶
카메라 및 센서:
OV5640 PCLK 계산을 수정하고, 누락된 I2C IRQ 핸들러를 추가했으며(I2C 전송 행 문제 해결), 신뢰성을 위해 cambus I2C 읽기/쓰기를 재작업하고, Lepton I2C 버스를 선택 가능하게 만들었으며, cambus 버스 복구 핀을 보드별 구성으로 옮기고, 실패하기 전에 cambus 스캔을 한 번 재시도하며, OpenMV PT(Lepton + 카메라 공유 I2C)가 작동하도록 했습니다.
열화상:
fir의get_ir()/draw_ir()와image.get_similarity()의 최댓값 계산(FLT_MIN→-FLT_MAX), AMG8833 12→16비트 처리, MLX90621 정확도(공식 Melexis 드라이버)를 수정했습니다.
디스플레이, 오디오 및 시스템:
STM32 SPI LCD 전송을 HAL SPI 콜백으로 옮기고(디스플레이 신뢰성), Nano 33
audio.init()(마이크가 작동하도록 HF 오실레이터 + PDM 비율), 새 HAL에서의 H7 타이머 상태, nRFgc_collect와 초기 보드 init/deinit을 수정했으며,find_apriltags()/find_rects()도중에 출력되던 잘못된 “uh oh, no preference for overlapping detection” 메시지를 더 이상 출력하지 않습니다.
하드웨어 및 보드 지원¶
Arduino Nano 33 BLE Sense — 새로운 nRF52840 보드(카메라, PDM 오디오,
ulab, 동결된 센서 드라이버).FLIR Lepton, MLX90641, MLX90621 열화상 센서.
OV5640 자동 초점 — OpenMV 2/3/4/4 Plus/PT/Portenta.
Portenta — UART 8 활성화.
호환성에 영향을 주는 API 변경 사항¶
v3.8.0과 v3.9.0 사이에서 사용자에게 보이는 API 변경 사항입니다. 범위: modules/의 Python C 모듈 및 scripts/libraries/의 Python 라이브러리.
각 변경 사항에는 영향도가 표시되어 있습니다:
major — 해당 기능을 사용한 대부분의 스크립트에 영향을 줌. 코드를 포팅해야 합니다.
minor — 좁은 범위의 API. 이를 사용한 스크립트에만 영향을 줍니다.
behavior — 동일한 API이지만 결과가 다름. 튜닝된 스크립트를 다시 확인하세요.
변경 사항은 해당 순서대로 영향도별로 그룹화되어 있습니다. 코드를 포팅하기만 하면 된다면 끝부분의 마이그레이션 체크리스트로 건너뛰세요. 각 커밋 해시는 GitHub의 해당 diff로 연결됩니다.
CMSIS-NN nn 모듈 제거 (major)¶
nn.load(), net.forward(), net.search(), nn_class 헬퍼를 포함하여 CMSIS-NN nn 모듈이 제거되었습니다. 모델 추론은 TensorFlow Lite(tf) 모듈로 이동합니다. nn으로 .network 모델을 로드하던 스크립트는 TensorFlow Lite 모델과 함께 tf로 포팅해야 합니다.
커밋: fbc767b36
ImageReader / ImageWriter가 image.ImageIO로 대체됨 (major)¶
image.ImageReader / image.ImageWriter와 그 next_frame() / add_frame() 메서드가 제거되었고, read() / write() / seek() / size() / close()를 통해 메모리 및 파일 스트림을 모두 지원하는 새로운 image.ImageIO 타입으로 대체되었습니다. 기존 reader/writer 클래스를 사용하는 코드는 image.ImageIO로 포팅해야 합니다(이름이 변경된 imageio_read.py / imageio_write.py 예제 참조).
커밋: 783a78754
fir.draw_ir()의 scale 키워드 제거 (minor)¶
fir.draw_ir()가 새로운 이미지 그리기 파이프라인 위에서 다시 작성되었습니다. scale=(min, max) 키워드가 제거되었고, hint, x_scale, y_scale, roi 및 위치 기반 x/y 오프셋 인자가 추가되었습니다. fir.draw_ir()에 scale=(min, max)를 전달하던 스크립트는 이를 삭제하고 새 인자를 사용해야 합니다.
커밋: 0a29103b1
find_lines() 근사화 (behavior)¶
image.find_lines()는 이제 그래디언트 크기를 (abs(gx) + abs(gy)) / 2로 근사하고 126 미만의 크기는 건너뜁니다. 이는 더 빠르지만 검출되는 선 집합과 누산기 값이 달라지므로 threshold / theta_margin / rho_margin을 다시 확인하고 다시 튜닝하세요.
커밋: 902ae3c98
fir.snapshot() 재작업 (behavior)¶
fir.snapshot()이 새로운 키워드 API(hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb)로 대폭 재작업되었으며, 번들된 예제도 다시 작성되었습니다. 이전의 위치 기반/pixformat 전용 동작이 변경되었습니다. FIR 스크립트를 새로운 키워드 형식으로 포팅하세요(업데이트된 thermopile-shield 예제 참조).
커밋: 53f2248b8
fir.init()이 실패 시 예외 발생 (behavior)¶
fir.init()은 이제 열화상 센서가 감지되지 않을 때 조용히 계속하는 대신 예외를 발생시킵니다(그리고 깔끔하게 de-init합니다). 이전에 예외를 발생시키지 않는다는 점에 의존했던 곳에서는 fir.init()을 try / except로 감싸거나(또는 센서가 연결되어 있는지 확인하세요).
커밋: 4b2f972f3
마이그레이션 체크리스트¶
v3.9.0으로 깔끔하게 포팅하려면 일반적으로 다음 작업이 필요합니다:
CMSIS-NN
nn모델 추론을 TensorFlow Litetf모듈로 포팅하세요(nn 제거).image.ImageReader/image.ImageWriter를image.ImageIO로 교체하세요(ImageIO 변경).fir.draw_ir()에서scale=(min, max)키워드를 삭제하고 새 인자를 사용하세요(draw_ir 변경).근사 크기 메트릭에 대해
find_lines()매개변수를 다시 튜닝하세요(find_lines 변경).FIR 스크립트를 새로운
fir.snapshot()키워드 API로 포팅하고(fir.snapshot 변경) 센서가 없을 때fir.init()이 예외를 발생시키는 것을 처리하세요(fir.init 변경).
다른 모든 스크립트는 변경 없이 실행됩니다.