v2.4.0

v2.4.0은 find_lines()를 Hough 변환 검출기로 다시 작성하고, find_line_segments(), find_datamatrices() 데이터 매트릭스 디코딩, sensor.set_vsync_output(), 이미지 슬라이스 읽기/쓰기, 그리고 더 높은 FPS를 위한 여러 새 스케일 프레임 크기를 추가합니다. find_lines(), match_descriptor(), skip_frames()가 변경되었습니다 — 아래의 호환성을 깨뜨리는 변경 사항을 읽어 보세요.

주요 사항

  • find_lines() — 선 객체를 반환하는 Hough 변환 선 검출기로 다시 작성되었습니다(이제 그레이스케일뿐만 아니라 RGB565에서도 동작합니다).

  • find_line_segments() — 유한한 선분을 검출합니다.

  • find_datamatrices() — 데이터 매트릭스 디코딩.

  • sensor.set_vsync_output() — 카메라 동기화를 위해 I/O 핀에서 VSYNC를 구동합니다.

  • 더 많은 프레임 크기 — 더 높은 FPS를 위한 여러 추가 스케일 해상도.

  • 호환성 변경: find_lines(), match_descriptor(), skip_frames()가 변경되었습니다 — 호환성을 깨뜨리는 변경 사항을 참고하세요.

새로운 기능

  • image.find_line_segments() — 무한하지 않은 선분을 찾습니다. 선 객체에 .length() 접근자가 추가되었습니다.

  • image.find_datamatrices() — 데이터 매트릭스 디코딩, 예제 스크립트 포함.

  • sensor.set_vsync_output(pin) — 카메라 동기화를 위해 GPIO 핀에서 VSYNC 신호를 출력합니다(OpenMV 2 / OpenMV 3).

  • 이미지 슬라이스 — 이제 이미지 서브스크립트 / 버퍼 프로토콜이 이미지 데이터의 슬라이스 읽기 및 쓰기를 지원합니다.

  • 더 높은 프레임 레이트를 지원하기 위해 여러 추가 스케일 해상도 / 프레임 크기 조합을 추가했습니다. 이제 clock.fps()는 2초마다 누산기를 재설정하므로 보고되는 FPS가 최근 레이트를 추적합니다.

기타 변경 사항 및 개선

  • 해상도가 VGA 이하일 때 OV7725는 QVGA로 윈도잉되며(높은 캡처 레이트에서 프레임 드롭이 줄어듦), PLL은 외부 클록을 낮춘 상태에서 6×로 설정되어(OpenMV 2 48 MHz, OpenMV 3 54 MHz) 센서 프레임 타이밍이 변경되었습니다.

버그 수정

이미징:

  • compress_for_ide() 버퍼 크기 오류(시작/끝 마커), QR 디코딩(추가로 업스트림 quirc 셀 비트맵 인덱싱 및 정렬 패턴 경계 수정 포함)을 수정했습니다.

센서 및 연결성:

  • OpenMV 2 센서 클록을 낮춰 더 높은 센서 PLL과 함께 동작하도록 했고(카메라 초기화/동기화), WINC socket.recvfrom()이 실제로 수신한 크기를 반환하도록 했습니다(오래된 값을 반환하는 대신 양수가 아닌 크기에서 오류를 발생시킴).

하드웨어 및 보드 지원

  • GPIO 핀의 VSYNC 출력 (OpenMV 2 / OpenMV 3)으로 sensor.set_vsync_output()을 지원합니다.

  • OpenMV 3pyb.UART UART1을 활성화했습니다.

API를 깨뜨리는 변경 사항

v2.3.0과 v2.4.0 사이의 사용자에게 보이는 API 변경 사항입니다. 범위: modules/의 Python C 모듈과 scripts/libraries/의 Python 라이브러리.

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

  • major — 해당 기능을 사용하는 대부분의 스크립트에 영향을 줍니다. 코드를 이식해야 합니다.

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

  • behavior — 동일한 API이지만 결과가 다릅니다. 튜닝된 스크립트를 다시 확인하세요.

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

find_lines()가 Hough 검출기로 다시 작성됨 (major)

image.find_lines()가 Hough 변환 검출기로 다시 작성되었습니다. 더 이상 (x1, y1, x2, y2) 튜플의 리스트를 반환하지 않습니다 — 선 객체(.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude())를 반환하며 — 이제 그레이스케일뿐만 아니라 RGB565에서도 동작합니다. threshold 인자가 0.0–1.0 부동소수점에서 정수 에지 크기 합으로 변경되었고, line.magnitude는 이제 정수이며, 새로운 theta_margin / rho_margin 키워드가 추가되었습니다. 튜플 언패킹 코드를 선 객체로 이식하고 threshold를 다시 튜닝하세요.

커밋: 31b7b5bf3, f4a9c6154

match_descriptor()가 매치 객체를 반환함 (minor)

image.match_descriptor()(ORB)는 이제 일반 8-튜플 대신 .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() 접근자를 가진 kptmatch 객체를 반환합니다. 객체는 여전히 서브스크립트/슬라이스가 가능하므로 위치 기반 인덱싱은 계속 동작하지만, isinstance(result, tuple)을 사용했거나(또는 튜플 메서드를 사용했던) 코드는 새 접근자를 사용해야 합니다.

커밋: e960546b6

sensor.skip_frames()가 이제 시간 기반임 (behavior)

sensor.skip_frames()time= 키워드(기본값 ~300 ms)를 받도록 재작업되었으며, 이제 고정된 프레임 수를 실행하는 대신 기본적으로 시간 기반으로 동작하여 시간이 경과하면 일찍 멈춥니다. 정확한 프레임 수에 의존하던 스크립트는 명시적인 횟수를 전달하거나 time=를 그에 맞게 설정해야 합니다.

커밋: a039b5d1c

마이그레이션 체크리스트

v2.4.0으로 깔끔하게 이식하기 위한 일반적인 작업은 다음과 같습니다:

  1. find_lines() 튜플 언패킹을 선 객체로 이식하고 정수 threshold를 다시 튜닝하세요(find_lines 재작성).

  2. match_descriptor() 결과를 튜플로 다루는 대신 kptmatch 접근자를 사용하세요(match_descriptor 변경).

  3. 고정된 프레임 수에 의존했다면 sensor.skip_frames()에 명시적인 횟수를 전달하거나 time=를 전달하세요(skip_frames 변경).

그 외 모든 스크립트는 수정 없이 그대로 실행됩니다.