v3.7.0

v3.7.0은 큰 릴리스입니다. 새로운 논블로킹 콜백 API를 갖춘 audio 모듈(Portenta H7 PDM 마이크), micro_speech TensorFlow 음성 인식 모듈, 완전히 새로운 병렬 RGB LCD 컨트롤러(HDMI 출력 및 FT5X06 터치 포함), 픽셀 형식 상수를 갖춘 image.flush() 메서드, 그리고 새로 작성된 image.draw_image() 스케일링 파이프라인을 추가합니다. 여러 레거시 헬퍼 라이브러리와 이미지 메서드가 제거되었고 yuv_to_* 연산이 변경되었습니다 — 아래의 호환성을 깨는 변경 사항을 읽어 보세요.

주요 변경 사항

  • audio 모듈 — 논블로킹 start_streaming(callback) API를 통한 Portenta H7 온보드 PDM 마이크 캡처.

  • micro_speech — TensorFlow 마이크로 음성 인식 모듈.

  • 새로운 LCD 컨트롤러 — 병렬 RGB 디스플레이 지원, HDMI 출력(TFP410), FT5X06 터치.

  • image.draw_image() — 전체 스케일링/알파/팔레트 파이프라인(x_scale / y_scale / hint / color_palette …)으로 새로 작성되었습니다.

  • image.flush() 및 픽셀 형식 상수(image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • 호환성을 깨는 변경: 레거시 수학 헬퍼 라이브러리와 여러 이미지 메서드가 제거되었고, draw_image() / LCD API가 재작업되었으며, yuv_to_*가 더 이상 128을 빼지 않습니다 — 호환성을 깨는 변경 사항을 참고하세요.

새로운 기능

  • audio — PDM 마이크 캡처를 위한 새로운 Portenta H7 audio 모듈: audio.init(), 논블로킹 audio.start_streaming(callback), 그리고 audio.stop_streaming() (주파수는 Hz 단위로 지정).

  • micro_speech — TensorFlow 음성 인식을 위한 MicroSpeech 클래스, audio_callback(), micro_speech()를 갖춘 새로운 모듈입니다. listen()은 이동 윈도우 평균을 사용하며, 결과를 레이블 목록으로 제한하기 위한 filter 키워드를 받습니다.

  • LCD — 병렬 RGB 디스플레이 지원, LCD_NONE / LCD_SHIELD / LCD_DISPLAY 타입, 다수의 framesize 상수, triple_buffer / framesize / refresh / bgr / deinit, 확장된 display, TFP410을 통한 HDMI 출력, FT5X06 터치스크린 지원을 갖춘 새로운 LCD 컨트롤러.

  • image.flush()image.flush() 메서드와 픽셀 형식 상수(image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG)를 추가했습니다.

  • image.draw_image() — 새로운 스케일링 파이프라인으로 새로 작성되었습니다: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette, hint, 그리고 image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST 상수, 새로운 알파 블렌딩 / 색상 테이블 / 스케일링 예제.

  • ImageReader.next_frame()에 실시간 재생 지연을 비활성화하는 pause 키워드가 추가되었습니다.

  • Portenta 오디오 예제(audio_fft.py, micro_speech.py)와 ExtInt 정지 모드 깨우기 예제를 추가했습니다.

기타 변경 사항 및 개선

  • 기본 제공 예제가 scripts/examples/Arduino/ 아래로 재구성되었으며, 이제 copy_to_fb=True로 이미지를 불러오거나 생성한 후 프레임버퍼가 즉시 갱신됩니다(수동 flush 불필요). Portenta 힙은 더 많은 정적 드라이버 상태를 수용하기 위해 약간 줄어들었습니다.

버그 수정

카메라 및 이미징:

  • 캡처된 이미지에서 빨강/파랑이 뒤바뀐 문제(RGB565 바이트 순서), 다른 그리기 코드와 일치시키기 위한 DMA2D 그리기 반올림, 재귀 할당(find_blobs())에서의 fb_alloc 손상을 수정하고, top_hat() / black_hat()을 이진 연산과 수학 연산이 모두 활성화된 경우로 제한했습니다.

디스플레이 및 오디오:

  • LCD 실드 출력과 Portenta 1채널 모노 오디오 모드를 수정했습니다.

Portenta:

  • 이더넷/SDRAM 문제를 우회(rst_eth를 high로 구동)하고 SDRAM 타이밍 설정을 수정했습니다.

하드웨어 및 보드 지원

  • Arduino Portenta H7 — 온보드 PDM 마이크(SAI / PDM2PCM) 오디오 캡처.

  • LCD — 새로운 병렬 RGB 디스플레이 컨트롤러(H7 빌드에서 LTDC 활성화), TFP410을 통한 HDMI 출력, FT5X06 터치스크린 LCD 지원.

호환성을 깨는 API 변경

v3.6.9과 v3.7.0 사이의 사용자 표시 API 변경. 범위: modules/의 Python C 모듈과 scripts/libraries/의 Python 라이브러리.

각 변경에는 그 영향이 태그로 표시되어 있습니다:

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

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

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

레거시 수학 헬퍼 라이브러리 제거 (minor)

mtx, rv, ulinalg, umatrix, vec 헬퍼 라이브러리가 ulab을 위해 scripts/libraries에서 제거되었습니다. 이들 중 하나라도 import하는 스크립트는 실패하므로 ulab으로 포팅해야 합니다.

커밋: 1f7da9272

remove_shadows() / chrominvar() / illuminvar() 제거 (minor)

image.remove_shadows(), image.chrominvar(), image.illuminvar()가 대체 없이 삭제되었습니다. 이 메서드들을 호출하는 스크립트는 해당 호출을 제거해야 합니다.

커밋: 3173c2bb3

image.draw_image() 시그니처 재작업 (minor)

image.draw_image()가 새로운 스케일링 파이프라인 위에 새로 작성되었습니다. 기존의 위치 인수 alpha / 단일 scale 인수와 이전의 위치 순서는 더 이상 적용되지 않습니다. 새로운 키워드 형식(x_scale= / y_scale= 또는 x_size= / y_size=, alpha=, color_palette=, hint= …)을 사용하세요.

커밋: 3439f8824

LCD 모듈 재작성 (minor)

lcd 모듈이 새로운 디스플레이 컨트롤러를 위해 새로 작성되었습니다. 이제 lcd.init()은 디스플레이 type(LCD_NONE / LCD_SHIELD / LCD_DISPLAY)과 새로운 키워드 인수를 받으며, 상수 / API 표면이 상당히 재구성되었습니다. 기존의 실드 전용 스크립트는 대부분 여전히 동작하지만 기본값과 동작이 변경되었으므로 — 새로운 type / framesize API에 맞춰 LCD 스크립트를 검토하세요.

커밋: 185538207

yuv_to_*가 더 이상 128을 빼지 않음 (behavior)

이제 image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab()이 128을 빼는 대신 Y 튜플 요소를 부호 없는 0–255 값으로 취급합니다. 이전과 동일한 색상을 얻으려면 호출자는 기존의 −128 바이어스 없이 Y를 전달해야 합니다.

커밋: dcf141192

마이그레이션 체크리스트

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

  1. mtx / rv / ulinalg / umatrix / vec 사용을 ulab으로 포팅하세요(수학 라이브러리 제거).

  2. image.remove_shadows() / chrominvar() / illuminvar() 호출을 제거하세요(제거된 이미지 메서드).

  3. image.draw_image() 호출을 새로운 키워드 시그니처로 업데이트하세요(draw_image 재작업).

  4. 새로운 lcd type / framesize API에 맞춰 LCD 스크립트를 검토하세요(LCD 재작성).

  5. Y를 yuv_to_*에 전달할 때 −128 바이어스를 제거하세요(yuv_to_* 변경).

그 밖의 모든 스크립트는 그대로 실행됩니다.