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 3 —
pyb.UARTUART1을 활성화했습니다.
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를 다시 튜닝하세요.
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으로 깔끔하게 이식하기 위한 일반적인 작업은 다음과 같습니다:
find_lines()튜플 언패킹을 선 객체로 이식하고 정수threshold를 다시 튜닝하세요(find_lines 재작성).match_descriptor()결과를 튜플로 다루는 대신kptmatch접근자를 사용하세요(match_descriptor 변경).고정된 프레임 수에 의존했다면
sensor.skip_frames()에 명시적인 횟수를 전달하거나time=를 전달하세요(skip_frames 변경).
그 외 모든 스크립트는 수정 없이 그대로 실행됩니다.