v5.1.0#

v5.1.0은 기능 릴리스입니다. 프레임 버퍼 아래 창은 히스토그램에서 실시간 뷰의 집합 – 보드 정보, 메모리, 통계, 그리고 스크립트가 게시하는 값을 위젯, 그래프, 스펙트럼, 깊이 맵으로 바꾸어 파일로 기록하는 새로운 채널 뷰 – 으로 성장하고, 프레임 버퍼는 다중 센서 카메라를 위한 소스 선택기를 얻으며, IDE는 보드, 펌웨어, 예제, 모델, 스텁의 타사 저장소를 로드하는 법을 배우고, 비디오 녹화는 H.264로 전환됩니다. 새 보드와 센서가 지원되고, v5.0.0 이후의 모든 변경 사항에 대한 전면 감사를 통해 펌웨어 도구가 강화되었으며, 몇 가지 동작이 OpenMV Studio에서 가져와졌습니다. Qt Creator 14.0.2를 기반으로 하며 펌웨어 v5.0.1을 번들합니다.

주요 내용#

  • 창 뷰 – 히스토그램 창의 제목 표시줄에 선택기가 추가되어 창을 히스토그램, 보드 정보(연결된 카메라의 하드웨어, 버전, 기능), 메모리(MicroPython 힙과 모든 UMA 풀의 실시간 그래프, 피크 추적 포함), 통계(디버그 프로토콜의 패킷, 오류, 채널별 이벤트 카운터), 채널 뷰 사이에서 전환합니다.

  • 채널 뷰 – 스크립트가 디버그 프로토콜을 통해 이름 붙은 데이터 및 컨트롤 채널을 게시하면 IDE가 이를 실시간으로 렌더링합니다. 카메라에 값을 되돌려 쓰는 레이블, 토글, 슬라이더, 스핀 박스, 라디오 버튼, 라인 에디트, 선택기, 푸시 버튼, 텍스트 블록; 패닝, 줌, 마커, 트리거, 히스토리, 스펙트럼 분석기를 갖춘 파형 그래프; 그리고 카메라 자체의 팔레트, 세 가지 스케일링 필터, 톤 매핑을 갖춘 깊이 맵입니다. 어떤 그래프나 맵이든 학습 데이터 수집을 위해 CSV, WAV, NumPy 또는 Edge Impulse JSON 및 CBOR 파일로 기록할 수 있으며 – 채널 전체를 위한 모두 기록도 포함됩니다. 스크립트가 멈춰도 마지막 값은 화면에 남아 있습니다.

  • 프레임 버퍼 소스 선택기 – 이미지 센서가 둘 이상인 카메라는 프레임 버퍼의 제목 표시줄에 어느 센서를 IDE로 스트리밍할지(또는 스트리밍을 끌지) 선택하는 선택기를 표시하고, JPG 토글은 JPG / RAW 스트리밍 모드 선택기가 되었으며, 창 제목에는 각 프레임이 도착한 형식이 표시됩니다.

  • 타사 저장소 – 공급업체는 보드, 펌웨어(릴리스 및 개발 채널), 예제, 머신러닝 모델, .pyi 스텁의 저장소를 게시할 수 있습니다. IDE는 이를 URL 또는 설치 프로그램이 넣어 둔 폴더에서 설치하고, 자체 콘텐츠와 병합하며, 최신 상태로 유지하고, 공급업체를 우선순위에 따라 정렬할 수 있게 합니다. Preferences → OpenMV → Third Party Repositories에서 관리합니다.

  • 새 하드웨어 – OpenMV N6 Classic 보드(부트로더 드라이버, udev 규칙, ROM-DFU 복구 항목 포함)와 FLIR Lepton 3.1R 및 UW 센서.

  • H.264 녹화 – 프레임 버퍼 레코더와 비디오 변환기가 이제 MPEG-4 Part 2 대신 H.264로 인코딩하며, 키 프레임 간격을 고정하여 녹화물의 탐색이 깔끔하고, 프레임률은 정수로 맞춰집니다.

  • 감사 수정 – v5.0.0 이후의 모든 커밋을 회귀 여부에 대해 두 차례 검토했으며, 특히 펌웨어, 부트로더, ROMFS 경로에 주의를 기울였습니다. 발견된 결함은 이번 릴리스에서 수정되었습니다(버그 수정 참조).

새 기능#

  • 보드 정보, 메모리, 통계 뷰를 히스토그램 창에 추가했으며, 다크 테마와 라이트 테마 모두에서 여백 없는 스타일과 선택 가능한 텍스트를 지원합니다 (cdea506655b, 7629a588db9, e21bd94a395, b55dcc412f6, fc744920011, e7dc3bf0092, 448e21db0bd).

  • 채널 뷰 – 전체 컨트롤 어휘(레이블, 토글, 슬라이더, 스핀 박스, 라디오, 라인 에디트, 선택, 푸시 버튼, 텍스트), 스펙트럼 분석기(Hann, Hamming, Blackman, 직사각형 창, 평균화, 피크 홀드, 로그 주파수)와 상승 및 하강 에지 트리거, 마커, 히스토리, 플롯 내보내기를 갖춘 파형 그래프; Depth, Rainbow, Ironbow, Event 팔레트, 최근접 / 쌍선형 / 쌍삼차 스케일링, 스크립트 범위 / 자동 범위 / 평활화 톤 매핑, 일시 정지 버튼, 호버 판독, 선언된 범위와 프레임의 최소 / 최대 / 평균을 표시하는 헤더, 이미지 저장을 갖춘 깊이 맵; 선택적인 Edge Impulse 레이블, 긴 캡처를 위한 파트 분할, 모두 기록을 갖춘 CSV, WAV, NumPy, Edge Impulse JSON / CBOR 기록; 프로토콜 환경 설정의 채널 폴링 간격 (5b4f31a6b3a, d1252a24f14, bfd7fd72f94, d1c2ab02a5f, 4808b8ffe26, dfc323b4ec7, 61c077df9a5, 8c2cd6cf1f1, 1534225fcee).

  • 프레임 버퍼 소스 선택기와 형식 판독 – 다중 센서 카메라에서 스트리밍할 센서를 선택하거나 끌 수 있고, 수신된 프레임 형식이 창 제목에 표시되며, JPG 토글은 이제 JPG 모드 / RAW 모드 선택기입니다 (e76284bde9e, c2baff8d60c, afece31cb6a, 76448d7b9dd).

  • 타사 저장소 – 내장 보드 목록과 병합되는 파일 기반 펌웨어 저장소, Preferences 페이지를 갖춘 네트워크 업데이트, 공급업체별 개발 펌웨어 채널, 사용자가 제어하는 공급업체 우선순위, File → Examples에 병합되는 공급업체 예제, Model Zoo에 병합되는 공급업체 모델, 코드 완성에 공급되는 사용자 지정 .pyi 스텁, 공급업체가 내장 콘텐츠를 가릴 때의 재정의 경고, 공급업체 보드에 대한 라이선스 검사 (21a63a74949, b5512efe949, b15afdac479, 1fe693f0b61, ae11ffeffc4, cf47a37ba65, 100bdeb530b, 252924901f7, c75a81f2a4a, 3e7f077a738, 5c5aa3e657c, e3f36adbdcb, b04da8ee888).

  • 실행 전 주석 제거 – 스크립트를 카메라로 보내기 전에 주석을 제거하여, 주석이 많은 스크립트에서 카메라 RAM을 절약합니다. 줄은 유지되므로 트레이스백의 줄 번호는 여전히 편집기와 일치합니다 (677546ee033).

  • 인라인 오류 표시 – 스크립트가 예외로 종료되면 편집기가 문제가 된 줄을 빨간색으로 표시하고 그 옆에 오류 텍스트를 보여줍니다. 이 표시는 파일을 편집하거나, 다시 실행하거나, 연결을 해제하면 사라집니다 (677546ee033).

  • ROMFS 편집기로 끌어다 놓기 – 바탕 화면에서 끌어다 놓은 파일은 Add File과 동일한 스크립트 컴파일과 모델 변환을 거쳐, 놓은 폴더로 들어갑니다 (677546ee033).

편집기, 터미널, UI 개선#

  • 히스토그램을 카메라의 RGB565 테이블 대신 전체 8비트 RGB로 계산하며, 공유 플롯 팔레트, 알파 블렌딩된 채우기, 더 어두운 격자선을 사용합니다 (238e099373e, f126e8f34c0, cebbf0c9e2c).

  • 숨겨진 창 뷰는 작업하지 않음 – 다른 뷰가 표시 중이거나 창이 접혀 있는 동안 히스토그램은 계산과 다시 그리기를 건너뛰고, 다시 표시될 때 따라잡습니다. 크기가 0인 다시 그리기는 무시됩니다 (c8730df8399).

  • 예제 스크립트가 import 뒤에 빈 줄을 두고 열리며, 번들 예제도 같은 방식으로 다시 포맷되었습니다 (1f88f617ec5, 87c8f7d41c7).

  • 코드 완성에 비공개 이름 표시 – 내장 언어 서버가 카메라의 모듈에서 사용하는 _ 접두사 멤버를 더 이상 걸러내지 않습니다 (23ab5b38bb3).

  • macOS – 환경 설정의 프로토콜 컨트롤 그룹 상자가 더 이상 비좁지 않고, 항목 뷰가 Cocoa 접근성 충돌로부터 보호되며, Apple Silicon 사용자에게는 “Allow accessories to connect” 보안 설정에 대해 경고하고, RT1062 사용자에게는 Input Monitoring이 허용되지 않았을 때 경고합니다(펌웨어 업데이트에 필요). 두 경고 모두 연결 후에 표시됩니다 (7d7b69367bf, 69fe7ffc913, 742cb4d8c0b, 8890eb77834, 89646292e8d).

  • 뷰어 모드 단축키 – 뷰어 모드(및 일반 IDE)를 망가뜨리던 잘못된 단축키가 비활성화되었고, 뷰어 모드가 더 이상 지워진 단축키를 전체 IDE의 설정에 저장하지 않습니다 (251b422f642, 0d153671c1d).

  • 알 수 없는 센서는 칩 id로 이름이 지정되어 상태 표시줄에 표시되므로 식별하여 센서 테이블에 추가할 수 있습니다 (df561775b54).

펌웨어, 보드, 도구#

  • OpenMV N6 Classic 지원: 보드 항목, Windows DFU 드라이버 및 설치 프로그램 코드, Linux udev 규칙 (4ff4a1f239d, bdd6c96ef47, 25fcdc13c6a, 7730b699f60).

  • FLIR Lepton 3.1R 및 UW 센서 지원 (12c03024f3c).

  • IMX 부트로더 핸드오프 – 미리 준비된 캐처가 RT1062의 부트로더가 열거되는 즉시 이를 붙잡아, 부하가 걸린 호스트에서 1초의 기회를 놓칠 수 있었던 프로브마다 프로세스를 생성하는 루프를 대체합니다 (3d8b63c6859).

  • 펌웨어 zip – Load Custom Firmware가 romfs만 있는 번들과 ROMFS가 없는 번들을 받아들이며, 이미 부트로더 모드에 있는 IMX 보드에 대해서도 사용자 지정 또는 개발 펌웨어가 스테이징됩니다 (b6f16f54c1a, 94d5fd5c30e).

  • 개발 / 사용자 지정 펌웨어, ROMFS 편집기 이미지, 비디오 도구 임시 파일을 위한 전용 스테이징 디렉터리로, 다른 프로세스가 남긴 오래된 파일이 실수로 플래시되거나 변환되는 일이 없습니다 (939154501af, a288fe712e7, 5c8c717adec).

  • H.264 비디오 – 녹화와 변환이 고정된 키 프레임 간격으로 H.264를 인코딩합니다. 정수에 가까운 녹화 프레임률은 그 정수로 맞춰지므로 플레이어가 29.97이 아닌 30 FPS로 보고합니다 (6ad1968341d, d62c110e155, bab488a54fe).

  • 리소스 zip 체크섬 – IDE의 리소스 업데이트가 버전과 함께 게시된 SHA-256으로 검증됩니다 (677546ee033).

  • OpenMV 서버 요청 시 정직한 User-Agent 사용 (c4279c0213e).

버그 수정#

v5.0.0 이후의 모든 변경 사항에 대한 두 차례의 검토에서 다음 사항을 발견하여 수정했습니다 (ccea3b17d01, 71826200611):

  • 펌웨어 및 부트로더 경로 – 이미 부트로더 모드에 있는 보드에 Load Custom Firmware로 zip을 올리면 대신 릴리스 빌드가 플래시되었고, Alif 복구 경로는 이제 릴리스를 플래시하는 대신 사용자 지정 빌드를 거부하며, 벽돌이 된 N6 Classic이 일반 N6 부트로더와 펌웨어로 복구되었고, 오래된 타사 리소스 루트가 벽돌이 된 내장 보드를 공급업체 파일로 이끌 수 있었으며, IMX 캐처가 충돌 후에도 플래시를 진행할 수 있었고 플래시로더를 기다리는 동안 Cancel을 무시했으며 준비 중 취소 후 시리얼 포트를 열어 둔 채로 두었고, N6 Classic 부트로더에 udev 규칙이 없었으며, Windows 드라이버 설치 프로그램의 허용 종료 코드에 오타가 있었습니다.

  • ROMFS 편집기 – ROMFS 읽기 중 Cancel을 누르면 “Failed to unpack ROMFS!”가 보고되고 아직 부트로더에 있는 카메라를 10초간 기다렸으며, 쓰기 중 Cancel은 ROMFS가 부분적으로만 기록된 채 조용히 끝났고, 쓰기 중 dfu-util 오류가 성공으로 보고되었으며, 후속 대화 상자에서 Cancel을 누르면 모든 편집이 버려졌고, Auto Reconnect가 열려 있는 편집기 아래에서 연결할 수 있었으며, 연결된 상태에서 Edit ROMFS가 불필요하게 먼저 연결을 끊었다가 다시 연결했고, 변환기 임시 디렉터리가 누수되었습니다. 취소된 작업 후에는 이제 부트로더에 DFU를 떠나도록 요청하여 카메라가 스스로 돌아옵니다.

  • 타사 저장소 – zip 항목은 추출 전에 검증되고(경로 탐색이나 심볼릭 링크 없음), 파트 설치와 재설치는 새 복사본이 자리 잡을 때까지 이전 복사본을 유지하며, 거부된 공급업체 보드가 더 이상 겹치는 내장 보드까지 함께 제거하지 않고, 누락된 PID 마스크는 런타임에 아무것도 매칭하지 않았으며, 기본 예제 / 모델 인덱스 행이 더 이상 같은 이름의 공급업체 파일을 가로채지 않습니다.

  • 프레임 버퍼 및 센서 – GENX320 이벤트 센서(칩 id가 0x80000000 이상)가 프레임 버퍼를 비활성화했고, 저장된 센서 선택이 재시작 후 유지되지 않았으며, 이전의 “disable frame buffer” 환경 설정이 마이그레이션되지 않았고, 스트림 소스 명령은 프로토콜 버전에 따라 제한되며, 히스토그램 페이지가 숨겨진 동안 초점 측정값이 멈췄고, 연결 해제 후에도 프레임 형식이 제목에 남아 있었습니다.

  • 연결 흐름 – macOS 경고가 펌웨어 업그레이드 프롬프트의 “Yes”를 삼킬 수 있었고, Model Zoo가 항상 접힌 상태로 열리며 선택이 복원되지 않았으며, 카메라가 10초 이상 연결되어 있었을 때 카메라 드라이브의 단일 드라이브 대체 경로에 도달할 수 없었습니다.

  • 채널 뷰와 레코더 – 악의적인 프레임 크기가 크기 검사를 오버플로할 수 있었고, Edge Impulse 레코더가 청크마다 재할당했으며 이제 파트당 64 MB로 제한됩니다. 이름에 구분자가 포함된 스키마가 레코드 목록을 넘어 인덱싱할 수 있었고, 중복 레코드가 실행 중인 레코더를 고아로 만들었으며, 뷰가 고정된 동안에는 쓰기가 무시됩니다. 채널 목록은 이제 등록 해제 및 소프트 리부트 이벤트 시 새로 고쳐집니다.

  • 비디오 – 사용자가 입력한 홀수 너비가 libx264 빌드에서 H.264 인코딩을 깨뜨렸고, 취소되거나 실패한 .bin 변환이 다음 실행에 섞여 들어가는 프레임을 남겼습니다.

  • 프로토콜 – 프로토콜 감지 전에 실행되는 읽기 플러시가 제한됩니다(이슈 #336) (77cd13af76f); 카메라 드라이브 연결이 더 이상 다른 볼륨과의 경쟁에서 지지 않습니다 (9877480c304).

  • 시리얼 포트 정보 래퍼의 -Wdeprecated-copy 경고 (abcfaa8af5e).

현지화#

플랫폼 및 도구 지원#

  • Qt Creator 기반: 14.0.2.

  • OpenMV IDE 버전이 5.1.0으로 올라갔습니다.

  • 번들 펌웨어: v5.0.1 (펌웨어 변경 로그 참조).

  • 새 보드 및 센서: OpenMV N6 Classic; FLIR Lepton 3.1R 및 UW.

호환성이 깨지는 변경 사항#

기존 프로젝트에는 없습니다. 프레임 버퍼 제목 표시줄의 JPG 토글은 이제 JPG 모드 / RAW 모드 선택기이며, 이전의 “disable frame buffer” 설정은 새 소스 선택기의 Off 항목으로 마이그레이션됩니다. 스크립트는 실행 전에 주석이 제거되므로, 런타임에 자신의 소스 텍스트를 읽는 데 의존하는 스크립트는 그렇게 해서는 안 됩니다.