v3.9.0

v3.9.0은 주요 릴리스입니다. Arduino Nano 33 BLE Sense를 지원하는 nRF 포트(카메라, PDM audio 모듈, ulab, 고정된 센서 드라이버)를 추가하고, FLIR LeptonMLX90641 / 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_FOCUS ioctl.

  • image.ImageIOImageReader / 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.ImageIOread() / write() / seek() / size() / close()로 메모리 및 파일 스트림을 모두 지원하는 새로운 이미지 스트림 타입과 ImageIO 읽기/쓰기/메모리 예제.

  • FLIR Leptonfir.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)가 작동하도록 했습니다.

열화상:

  • firget_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 타이머 상태, nRF gc_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 / ImageWriterimage.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으로 깔끔하게 포팅하려면 일반적으로 다음 작업이 필요합니다:

  1. CMSIS-NN nn 모델 추론을 TensorFlow Lite tf 모듈로 포팅하세요(nn 제거).

  2. image.ImageReader / image.ImageWriterimage.ImageIO로 교체하세요(ImageIO 변경).

  3. fir.draw_ir()에서 scale=(min, max) 키워드를 삭제하고 새 인자를 사용하세요(draw_ir 변경).

  4. 근사 크기 메트릭에 대해 find_lines() 매개변수를 다시 튜닝하세요(find_lines 변경).

  5. FIR 스크립트를 새로운 fir.snapshot() 키워드 API로 포팅하고(fir.snapshot 변경) 센서가 없을 때 fir.init()이 예외를 발생시키는 것을 처리하세요(fir.init 변경).

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