v3.3.0

v3.3.0은 대규모 릴리스입니다. 새로운 sensor.ioctl() 인터페이스와 색상 팔레트를 통한 완전한 FLIR Lepton 열화상 카메라 지원, tv SPI 비디오 출력 모듈, 글로벌 셔터 트리거 모드, 다수의 새로운 image 그리기/분석 메서드(gamma_corr(), draw_ellipse(), draw_edges(), 여러 블롭 속성), 그리고 새로운 ToF / 모터 / linalg 라이브러리를 추가합니다. cpufreq API가 재작업되었고 sensor.set_framesize()는 이제 예외를 발생시킵니다. 아래의 호환성 깨짐 변경 사항을 읽어보세요.

주요 내용

  • FLIR Lepton — 새로운 sensor.ioctl() 인터페이스, 색상 팔레트, image.to_rainbow()를 통한 완전한 열화상 카메라 지원.

  • tv 모듈 — SPI TV / 컴포지트 비디오 출력.

  • 글로벌 셔터 트리거 모드sensor.ioctl()를 통한 MT9V034 트리거 캡처.

  • 이미징gamma_corr(), draw_ellipse(), draw_edges(), draw_image() 알파 블렌딩, 그리고 다수의 새로운 블롭 속성.

  • 새 라이브러리 — VL53L1X ToF 거리, TB6612 모터 드라이버, micro-linalg.

  • 호환성 깨짐: cpufreq API가 재작업되었고, sensor.set_framesize()는 이제 실패 시 예외를 발생시키며, sensor.alloc_extra_fb()는 Bayer/JPEG를 더 이상 지원하지 않고, image.replace()의 위치 인자 순서가 바뀌었습니다. 호환성 깨짐 변경 사항을 참고하세요.

새로운 기능

  • FLIR Lepton — 센서별 제어를 위한 sensor.ioctl()와 완전한 Lepton ioctl 세트(라디오메트리, 새로 고침/해상도, 명령 실행, 속성 설정/조회, °C 단위의 FPA/AUX 온도, 측정 모드/범위, 너비/높이), sensor.PALETTE_RAINBOW / PALETTE_IRONBOW와 함께하는 sensor.set_color_palette() / sensor.get_color_palette(), image.to_rainbow(), 그리고 Lepton 예제 스크립트(27-Lepton)를 추가했습니다.

  • 트리거 모드 — MT9V034 글로벌 셔터 트리거 캡처를 위한 IOCTL_SET_TRIGGERED_MODE / IOCTL_GET_TRIGGERED_MODE를 고FPS 및 트리거 모드 예제와 함께 추가했습니다.

  • tv 모듈 — SPI TV / 컴포지트 비디오 출력 바인딩을 추가했습니다.

  • 이미징image.gamma_corr(), image.draw_ellipse(), image.draw_edges(), draw_image() 알파 블렌딩, clear()mask= 키워드, mask_rectangle() / mask_circle() / mask_ellipse() 재추가, draw_string() / draw_text()의 회전 / hmirror / vflip 키워드, replace()transpose 키워드(및 assign / set 별칭), copy()x_scale / y_scalecrop() / scale(), 치수로부터 생성하는 Image() 생성자, sensor.BINARY 픽셀 포맷, 노출된 색상 공간 변환 함수, 그리고 다수의 새로운 블롭 속성(corners, perimeter, roundness, elongation, extent, compactness, solidity, convexity, enclosing_circle, enclosed_ellipse, 회전)을 추가했습니다.

  • 라이브러리vl53l1x ToF 거리 센서 드라이버, tb6612 모터 드라이버(DC 모터 및 스테퍼 Motor-Shield 예제 포함), 그리고 micro-linalg 라이브러리(ulinalg / umatrix)를 추가했습니다.

  • FatFS를 FF13C(exFAT 지원)로 업그레이드했습니다.

기타 변경 및 개선 사항

  • 기본 JPEG 품질을 개선했고(하드코딩된 값 대신 low–high의 중간값); 인플레이스 이미지 연산은 더 이상 첫 번째 인자로 이미지를 반복해서 전달할 필요가 없으며; draw_string()은 정수가 아닌 스케일 값을 허용합니다.

버그 수정

카메라 및 센서:

  • Lepton 3.5 시작 시 멈춤(타임아웃 + 복구) 및 리셋 안정성, set_pixformat() 이전에 호출되던 MT9V034 set_framesize() 문제(호출 순서가 더 이상 중요하지 않음), STM32H7의 MT9V034 WVGA, MT9V034 자동 노출 범위 및 섀도 레지스터 업데이트, 그리고 H7 ADC 버그를 수정했습니다.

이미징:

  • find_apriltags()의 잘못된 메모리 접근, 스케일된 이미지를 메인 프레임 버퍼로 복사할 때의 copy(), to_grayscale() / to_rgb565() 프레임 버퍼 할당, 키포인트 객체의 len(), JPEG MCU 경계 처리, binary() 임계값 리스트 파싱, 그리고 키포인트 튜플을 허용하는 draw_keypoints()를 수정했습니다.

시스템:

  • image / fir / lcd / tv / nn 메서드 전반의 fb_alloc mark/free 불균형 누수를 수정했고, py_assert가 잡힌 예외에서 프레임 버퍼 메모리를 해제하도록 했으며(#417), UART 오버런(ORE) 플래그를 지워서 오버런이 더 이상 UART 읽기를 막지 않도록 했고, RTC IRQ 핸들러를 수정했으며, Windows cascade_convert.py 도구를 수정했습니다.

하드웨어 및 보드 지원

  • FLIR Lepton 열화상 카메라.

  • TV 실드 — SPI TV / 컴포지트 비디오 출력.

  • 글로벌 셔터(MT9V034) 트리거 모드.

호환성 깨짐 API 변경

v3.2.0과 v3.3.0 사이의 사용자에게 보이는 API 호환성 깨짐. 범위: modules/의 Python C 모듈과 scripts/libraries/의 Python 라이브러리.

각 변경 사항에는 영향도가 태그되어 있습니다:

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

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

  • behavior — 동일한 API, 다른 결과. 튜닝된 스크립트를 다시 확인하세요.

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

cpufreq API 재작업 (major)

cpufreq 모듈이 H7 지원을 위해 재작업되었습니다. cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ 상수와 cpufreq.get_frequency()가 제거되었습니다. cpufreq.set_frequency()는 이제 일반 MHz 정수를 받으며(예: cpufreq.set_frequency(120)), cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies()가 추가되었습니다.

커밋: 6babf84a1

image.replace() 위치 인자 순서 변경 (minor)

image.replace()transpose 인자가 추가되면서 위치 인자 mask가 4번째 위치에서 5번째 위치로 이동했습니다. mask를 위치 인자로 전달한 코드(예: img.replace(src, hmirror, vflip, mask))는 키워드 형식 img.replace(src, mask=mask)로 전환해야 합니다.

커밋: dbe7bf059

sensor.alloc_extra_fb()가 더 이상 Bayer/JPEG를 허용하지 않음 (minor)

sensor.alloc_extra_fb()는 더 이상 sensor.BAYER 또는 sensor.JPEG를 허용하지 않습니다(이제 sensor.BINARY도 지원합니다). Bayer 또는 JPEG 형식으로 추가 프레임 버퍼를 할당한 코드는 GRAYSCALE / RGB565를 사용해야 합니다(또는 다른 방식으로 버퍼를 할당).

커밋: f9e6b3fe0

sensor.set_framesize()가 실패 시 예외 발생 (behavior)

sensor.set_framesize()는 이제 프레임 크기가 지원되지 않을 때 False를 반환하는 대신 ValueError를 발생시킵니다. False 반환값을 확인하던 코드는 대신 ValueError 예외를 잡아야 합니다.

커밋: b0442633e

마이그레이션 체크리스트

v3.3.0으로 깔끔하게 포팅하기 위한 일반적인 작업은 다음과 같습니다:

  1. cpufreq 코드를 정수 MHz의 set_frequency()get_current_frequencies() / get_supported_frequencies()로 포팅하세요(cpufreq 재작업).

  2. maskimage.replace()에 키워드로 전달하세요(replace 변경).

  3. 추가 프레임 버퍼를 Bayer/JPEG 대신 GRAYSCALE / RGB565로 할당하세요(alloc_extra_fb 변경).

  4. sensor.set_framesize() 주위에서 False를 확인하는 대신 ValueError를 잡으세요(set_framesize 변경).

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