*********************************
기술 명세서
*********************************
.. contents:: Table of Contents
---------
시스템 아키텍처
===============
전체 시스템을 구성하는 주요 컴포넌트와 상호작용 방식을 정의한다.
─ ◆ ─
시스템 설계
===============
아키텍처가 정해지면 실제 개발에 필요한 구체적인 기술적 결정과 설계를 하며, "어떻게 만들 것인가?"에 대한 질문에 초점을 맞춘다.
─ ◆ ─
그래프 아키텍처
===============
Video Processing
-------------------
.. raw:: html
─ ◆ ─
데이터 흐름
============
.. raw:: html
.. raw:: html
─ ◆ ─
소프트웨어 아키텍처
==================
소프트웨어의 개념적 구성 요소와 그 상호 관계를 체계적으로 정의하고, 모듈화 및 계층화를 통해 구조적 일관성을 확보함으로써 장기적인 안정성과 확장성을 보장하는 고수준의 설계 원칙을 수립한다. 또한, 이를 기반으로 최적의 개발 플랫폼 및 기술 스택을 선정할 수 있는 기준을 제공한다
계층 구조
----------
.. raw:: html
.. list-table::
:header-rows: 1
:widths: 25 75
* - **계층**
- **역할 및 설명**
* - Application
- 사용자 App이 실행되는 계층, Task 또는Thread 로 구성, IP(process)C 또는 IT(thread)C 로 수행
* - Application Framework
- App 개발을 위한 기본 구조 및 표준 을 제공하는 틀 ( 일정한 구조와 규칙 제공 )
* - Middleware
- App과 OS 사이에서 중재 역할 수행 ( 데이터 변환, 통신 관리, API 호출 등 )
* - HAL
- H/W와 S/W 간의 추상화된 I/F 계층 ( 하드웨어 종류와 상관없이 일관된 API 로 제어 )
* - OS
- App과 H/W를 관리하는 운영체제, 프로세스 / 메모리 / 파일 시스템 / 네트워크 / 입출력 제어 역할 수행
* - Device Driver
- H/W 장치를 제어하는 계층, OS와 H/W 간 I/F 역할 수행
* - Interrupt Handler
- H/W 인터럽트를 처리하는 모듈
* - Linux Kernel
- OS의 핵심 부분, CPU/ 메모리 / 파일 시스템 등 자원 관리와 App 과 H/W 간 직접적인 I/F 제공
─ ◆ ─
소프트웨어 기술 스택
==========================
제품을 개발하는 모든 과정에서 활용되는 기술 스택을 정의한다. 소프트웨어를 개발, 실행, 배포 할 수 있는 기반 환경과 개발에 사용하는데 사용되는 기술 조합이다.
.. raw:: html
.. list-table::
:header-rows: 1
:widths: 20 80
* - **SW 개발 플랫폼**
- **설명**
* - .. raw:: html
Language
- 애플리케이션 및 시스템 소프트웨어 개발에 사용되는 주요 프로그래밍 언어
* - .. raw:: html
Framework
- 카메라 및 영상 처리를 위한 미들웨어 및 프레임워크
* - .. raw:: html
Development ( SDK )
- 임베디드 OS 커스터마이징 및 시스템 빌드를 위한 도구
* - .. raw:: html
DevOps ( CI/CD )
- CI/CD 자동화, 소스 코드 관리, 코드 품질 관리 및 프로젝트 관리 도구
─ ◆ ─
소프트웨어 설계
===============
소프트웨어 설계 원칙에 따른 소프트웨어 개발 및 실행 기반 환경 플랫폼의 주요 구성 요소와 계층 구조에 대한 설계도이다.
계층 구조
----------
.. raw:: html
.. list-table::
:header-rows: 1
:widths: 30 70
* - **핵심 구성 요소**
- **역할 및 설명**
* - Camera App
- 카메라 기능을 제공하는 애플리케이션 ( 사진 촬영, 영상 녹화, 미리보기 등 )
* - Picamera2
- Python 기반의 고수준 카메라 라이브러리 ( libramera 활용 )
* - GStreamer
- 멀티미디어 프레임워크로, 인코딩(H.264) 등을 위한 플러그인 ( v4l2src, libcamerasrc 등 ) 제공
* - V4L2
- 리눅스 커널의 비디오 장치 인터페이스로, 카메라의 원시 데이터를 애플리케이션에 전달하는 역할 수행
* - libcamera
- 최신 리눅스 카메라 스택으로, 복잡한 카메라 파이프라인을 관리하고 V4L2보다 더 정교한 기능 제공
* - USB
- USB 카메라 및 기타 주변 장치와의 인터페이스를 제공하는 리눅스 드라이버
* - VideoCodec
- 영상 및 오디오 데이터를 압축 / 디코딩하는 하드웨어 엔진
─ ◆ ─
소스 코드 구조
--------------
.. raw:: html
─ ◆ ─
소프트웨어 플랫폼 아키텍처
=======================
.. raw:: html
─ ◆ ─
임베디드 플랫폼
===============
.. list-table:: 임베디드 플랫폼 사양
:header-rows: 1
:widths: 5 20
* - HW
- Description
* - FPGA
- Xilinx Zynq-7000 XC7020-CLG400
* - SoM
- Raspberry Pi 4 CM4 Lite
* - Camera I/F
- Cypress FX3 USB 3.0 Controller
─ ◆ ─
개발 플랫폼
============
.. list-table:: 개발 플랫폼 사양
:header-rows: 1
:widths: 5 20
* - DevKit ( HW )
- Description
* - FPGA
- AMD Zynq™ 7000 SoC ZC702 EVB'd + SW Platform ( SDK IDE, etc )
* - SoM
- Raspberry Pi 4 Model B B'd + SW Platform ( SDK, IDE, etc )
* - Camera I/F
- EZ-USB™ FX3 Camera B'd + ( SDK, IDE, etc )
.. list-table::
:header-rows: 1
:widths: 5 20
* - DevKit ( SW )
- Description
* - FPGA
- Off. SDK ( Vitis SW Platform )
* - SoM
- Off. SDK ( Raspberry Pi OS + Raspberry Pi Imager )
* - Camera I/F
- Off. SDK ( EZ-USB™ FX3 SDK )
─ ◆ ─