5.34. 마무리

image 모듈은 카메라가 노출하는 가장 큰 API이며, 이 장에서는 그 개요만 다루었습니다. 이미지가 메모리에 어떻게 표현되는지, 카메라가 개별 픽셀을 어떻게 읽고 쓰는지, 캡처한 프레임에 어떻게 그리는지, 산술적·기하학적으로 어떻게 변환하는지, 어떻게 임계값으로 분류하고 필터링하는지, 그로부터 측정값과 검출 결과를 어떻게 추출하는지, 인쇄된 기호를 어떻게 디코딩하는지, 한 이미지를 다른 이미지와 어떻게 비교하는지, 그리고 결과를 카메라로 어떻게 주고받는지를 다루었습니다.

이 툴킷은 의도적으로 폭넓습니다. 소형 임베디드 카메라에서 실행되는 고전적 컴퓨터 비전 파이프라인은 머신러닝 모델이 있는 경우, 무언가가 그 모델에 도달하기 전에 대부분의 작업을 수행합니다 – 임계값 처리가 입력을 정리하고, 필터가 노이즈를 제거하며, 영역이 탐색 범위를 좁히고, 블롭 및 선 검출기가 후보를 국지화하며, 유사도 점수가 후보가 흥미로운지를 결정하고, I/O 계층이 다음 단계를 실행하는 무엇이든에 결과를 넘깁니다. 이 장의 각 페이지는 그 연산 중 하나를 다루었으며, 주어진 애플리케이션에 적합한 파이프라인은 문제가 요구하는 순서대로 그것들을 조합한 시퀀스입니다.

5.34.1. 파이프라인 패턴

대부분의 자명하지 않은 카메라 애플리케이션은 동일한 개요를 따릅니다. 센서에서 프레임을 캡처 합니다. 그것을 전처리 합니다. 형식을 변환하고, 히스토그램을 평활화하고, 노이즈를 흐리게 합니다. 관심 영역이나 특징을 국지화 합니다. 블롭 검출, 선 검출, 템플릿 매칭, 코드 디코딩 등입니다. 찾은 것을 분석 합니다. 기하학적 측정, 유사도 점수, 통계 등입니다. 분석을 바탕으로 무엇을 할지 결정 합니다. GPIO를 트리거하거나, 페이로드를 보고하거나, 캡처 후 로그를 남기거나, 프레임을 ML 모델에 넘깁니다. 결정이나 캡처한 산출물을 출력 합니다. 저장하거나, 인코딩하거나, 전송하거나, IDE 미리보기를 위해 프레임에 다시 그립니다.

어떤 장의 페이지도 모든 단계를 다루지는 않았습니다. 이 장은 파이프라인이 조합하는 구성 요소 를 다루었습니다. 어떤 구성 요소를 어떤 순서로 사용할지 고르는 것은 애플리케이션 스크립트의 몫입니다.

5.34.2. 이 장이 이끄는 곳

image 모듈은 이미지를 이미지로서 다룹니다 – 픽셀, 영역, 그리기, 검출 등입니다. 캡처한 데이터에 대한 많은 작업은 그 틀에 맞지 않습니다. 임의의 수치 배열에 대한 통계 계산, 원시 센서 데이터에 대한 벡터화된 산술 실행, image 모듈 메서드가 뒷받침하지 않는 사용자 정의 행렬 변환 적용, 특정 텐서 레이아웃을 요구하는 머신러닝 모델을 위한 데이터 준비 – 이 모두는 이미지 처리 라이브러리가 아니라 수치 배열 라이브러리의 일입니다.

다음 장이 바로 그것을 다룹니다. 카메라의 MicroPython에 함께 제공되는 ulab.numpy 모듈은 NumPy의 하위 집합이며, 두 개의 다리가 그것을 image 모듈과 연결합니다. to_ndarray() 는 프레임의 픽셀을 수치 작업을 위해 ndarray 로 복사하고, Image 생성자는 그 결과로부터 새 이미지를 만들기 위해 ndarray 를 받아들이며, 이는 표시하거나 저장하거나 image 라이브러리로 다시 넣을 준비가 됩니다. 두 모듈은 서로 조합됩니다 – 각자 상대가 하지 않는 일을 하며, 함께 임베디드 비전 애플리케이션에 필요한 수치 및 이미징 작업을 아우릅니다.