OpenCV
: OpenCV (Open Source Computer Vision)는 실시간 컴퓨터 비전을 목적으로 한 프로그래밍 라이브러리입니다. 원래는 인텔이 개발하였으며, 실시간 이미지 프로세싱에 중점을 둔 라이브러리입니다.
OpenCV는 다양한 영상/동영상 처리에 사용할 수 있는 오픈소스 라이브러리로, BSD 라이센스 하에 배포되므로 학술적 및 상업적 용도로 무료로 사용할 수 있습니다.
파이썬과 함께 사용할 수 있으며, 컴퓨터 그래픽스와 컴퓨터 비전에 대한 프로그래밍에 활용됩니다.
- OpenCV의 주요 기능
- 이미지 처리: OpenCV는 다양한 이미지 처리 기능을 제공합니다. 예를 들어, 필터링, 히스토그램 처리, 컬러 변환 처리 등의 영상 처리 알고리즘을 구현할 수 있습니다.
- 객체 인식 및 특징 검출: OpenCV는 객체 인식 및 추적을 위한 다양한 알고리즘을 제공합니다.
- 머신 러닝 및 딥러닝: OpenCV는 머신러닝이나 딥러닝 프레임워크와의 통합을 지원하는 API를 제공합니다.
- 영상 추출 및 재구성: OpenCV는 VideoCapture 클래스를 통해 카메라와 동영상으로부터 프레임을 받아오는 작업을 처리합니다.
- 기본 자료구조, 행렬 연산, DFT, CML, 그리기 등: opencv_core 라이브러리는 이러한 기능을 제공합니다.
- 기계 학습 알고리즘: opencv_ml 라이브러리는 bayes 분류기, SVM, 결정트리, EM 등의 기계 학습 알고리즘을 제공합니다.
- 2D 특징 디스크립터 및 매칭자를 위한 래퍼 인터페이스 제공: opencv_feature2d 라이브러리가 이 기능을 제공합니다.
- 움직임 검출 및 물체 추적: opencv_video 라이브러리가 이 기능을 제공합니다.
- 기타: 이 외에도 OpenCV는 다양한 기능을 제공하며, 이러한 기능들은 컴퓨터 비전 애플리케이션 개발에 널리 사용됩니다.
- OpenCV 활용예시:
- 기계 학습 및 딥러닝: OpenCV는 기계 학습과 딥러닝 알고리즘을 구현하고 실행하는 데 사용됩니다.
- 이미지 향상: 카메라 앱에서 사진을 찍으면 더 선명하게 혹은 명암 차이를 주어 효과를 주는 기능 등에 OpenCV가 사용됩니다.
- 제품 검사 및 분류: 공장에서 컨베이어 벨트를 통해 움직이는 수많은 제품 중 불량을 검사하고 위치 확인 및 측정을 통해 자동으로 분류하는 자동화 공정 등에 OpenCV가 사용됩니다.
- 로봇 자동차: 2005년 다르파 그랜드 챌린지 경주에서 우승한 로봇 자동차 스탠리의 시각 시스템에서 OpenCV를 사용하였습니다.
- 곤충 추적: 곤충 등의 자취를 추적하는 소프트웨어인 SwisTrack은 OpenCV를 사용합니다.
- 이미지 처리: OpenCV는 이미지 파일을 읽고 쓰는 데 사용됩니다. 예를 들어, 이미지를 읽기 위해서는 imread() 함수를 사용하고, 이미지를 저장하기 위해서는 imwrite() 함수를 사용합니다.
- 기타: 이 외에도 OpenCV는 다양한 컴퓨터 비전 애플리케이션에서 사용됩니다. 예를 들어, 객체 인식, 모션 감지, 얼굴 인식 등에 활용됩니다.
- OpenCV 프로젝트 예시:
- 얼굴 인식: OpenCV의 Haar cascades나 DNN 모듈을 사용하여 실시간 얼굴 인식 시스템을 구현할 수 있습니다.
- 객체 추적: OpenCV의 다양한 추적 알고리즘을 활용하여 움직이는 객체를 실시간으로 추적하는 시스템을 만들 수 있습니다.
- 관심영역 지정: 이미지에서 특정 영역을 선택하고 그 영역에 대한 연산을 수행하는 프로젝트를 진행할 수 있습니다.
- 머신러닝과 OpenCV: OpenCV의 머신러닝 모듈을 활용하여 이미지 분류, 객체 인식 등의 작업을 수행하는 프로젝트를 진행할 수 있습니다.
- k-NN 알고리즘 활용: OpenCV의 k-NN 알고리즘을 활용하여 데이터 분류 문제를 해결하는 프로젝트를 진행할 수 있습니다.
- 이미지 필터링: OpenCV의 다양한 이미지 필터를 활용하여 이미지 향상, 노이즈 제거 등의 작업을 수행하는 프로젝트를 진행할 수 있습니다.
- 이미지 세그멘테이션: OpenCV를 사용하여 이미지에서 특정 객체를 분리하고 분석하는 프로젝트를 진행할 수 있습니다.
- 텍스트 인식: OpenCV와 Tesseract OCR을 결합하여 이미지에서 텍스트를 인식하는 프로젝트를 진행할 수 있습니다.
- 동영상 처리: OpenCV를 사용하여 동영상에서 객체를 인식하거나 동영상을 편집하는 프로젝트를 진행할 수 있습니다.
- 3D 재구성: OpenCV의 카메라 캘리브레이션과 스테레오 비전 기능을 활용하여 3D 재구성을 수행하는 프로젝트를 진행
*tip. OpenCV에서 제공하는 무료 강의도 있으니 참고해 보자. (https://opencv.org/university/free-opencv-course/?utm_source=google&utm_medium=cpc&utm_campaign=WW_course_OBC&utm_term=opencv%20course&gad_source=1&gclid=CjwKCAjwh4-wBhB3EiwAeJsppB1jnmSeRxPilsYs4OzFVTFTu6cltH1g4mrGQnw36WZ8rCtZrU7sDhoCq9MQAvD_BwE)
OpenCV Bootcamp
Our Free OpenCV Course is perfect for beginners & pros. OpenCV Python Free Course dives into computer vision & Python programming with hands-on projects & tutorials
opencv.org

Flutter
- final과 const의 차이
- final: final은 런타임에 상수를 설정합니다. 즉, 코드가 실행되면서 값이 결정되지만, 한 번 값이 설정되면 그 이후로는 변경할 수 없습니다. 예를 들어, DateTime.now()와 같이 런타임에 결정되는 값을 상수로 설정할 수 있습니다.
void main(){
final nowTime = DateTime.now();
}
- const: const는 컴파일 타임에 상수를 설정합니다. 즉, 코드가 실행되기 전에 값이 이미 결정되어 있으며, 이후로는 변경할 수 없습니다. 예를 들어, const로 선언된 변수는 컴파일 타임에 값을 할당받으며, 이 값은 프로그램 실행 도중에 변경할 수 없습니다.
void main(){
const pi = 3.14;
}
: 또한, const는 클래스의 static 필드에서만 사용 가능하며, 클래스가 인스턴스화되기 전, 컴파일 타임에 해당 필드의 값이 정해집니다.
class ApiService {
static const String baseUrl = "https://api링크";
static const String today = "today";
}
: 이렇게 final과 const는 각각 런타임과 컴파일(전체 소스 주기 중 한 번) 타임에 상수를 설정하는 데 사용된다. 쉽게 말하면 final은 실행 중 값이 결정되지만 const는 컴파일 시 값이 결정된다.
정리하자면 기본 String은 언제든지 바꿀 수 있다. 하지만 final은 코드가 실행되면서 값이 변 할 수 있지만 결정되고 나서는 변할 수 없다. 그리고 const는 코드 실행 전부터 값이 정해져서 바꿀 수 없다.
Apache Kafka
:실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산형 데이터 스트리밍 플랫폼입니다. 이는 높은 처리량과 확장성이 반드시 필요한 다양한 활용 사례를 지원합니다.
- 주요 기능
- 높은 처리량: 네트워크 제한 처리량에서 메시지를 전달하며, 지연 시간은 최소 2ms입니다.
- 확장 가능: 생산 클러스터를 수천 개의 브로커, 하루에 수조 개의 메시지, 페타바이트의 데이터, 수십만 개의 파티션까지 확장할 수 있습니다.
- 영구 저장: 데이터 스트림을 분산, 내구성, 장애 허용 클러스터에서 안전하게 저장합니다.
- 고가용성: 클러스터를 효율적으로 가용 영역에 확장하거나 지리적 지역 간에 별도의 클러스터를 연결합니다.
- 스트림 처리: 이벤트 스트림을 조인, 집계, 필터, 변환 등으로 처리하며, 이벤트 시간과 정확한 한 번 처리를 사용합니다.
- 활용 사례
- IT 운영팀: 데이터 수집, 로그 관리, 웹 사이트 활동 추적 등에 의존하는 IT 운영팀의 업무 수행에 매우 적합합니다.
- 사물 인터넷 (IoT): IoT에서 생성될 것으로 예상되는 대규모 데이터를 처리할 수 있도록 확장성을 염두에 두고 설계되었습니다.
- 전자상거래: 페이지 클릭, 좋아요, 검색, 주문, 장바구니 및 재고와 같은 데이터를 처리할 수 있습니다.
- Kafka와 쿠버네티스:
: 쿠버네티스는 Apache Kafka에 이상적인 플랫폼입니다. 개발자들이 Kafka 애플리케이션을 호스팅 하려면 확장 가능한 플랫폼이 있어야 하는데, 쿠버네티스가 바로 그 답입니다.
이처럼 Apache Kafka는 개발 프로세스 간소화, 혁신 추진, 시간 절약을 통해 새로운 기능과 애플리케이션 및 서비스 출시 기간을 단축하기 위한 이니셔티브의 중요한 부분이 될 수 있습니다.
Redis
: Remote Dictionary Server의 약자로, "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템입니다. 주로 애플리케이션 캐시나 빠른 응답 속도를 가진 데이터베이스로 사용되는 오픈 소스 인메모리 NoSQL 데이터 저장소입니다. 주로 실시간 애플리케이션, 캐싱, 메시징, 게임, 리더보드 등 다양한 분야에서 활용되고 있습니다.
- 주요 특징
- 인메모리 데이터 구조: 문자열, 해시, 리스트, 셋, 정렬된 셋, 스트림 등 다양한 데이터 구조를 지원합니다.
- 프로그래밍 가능성: Lua로 서버 측 스크립팅을 지원하며, Redis Functions를 이용해 서버 측 저장 프로시저를 지원합니다.
- 확장성: C, C++, Rust 등으로 Redis를 확장할 수 있는 모듈 API를 제공합니다.
- 지속성: 데이터셋을 메모리에 유지하여 빠른 접근을 가능하게 하며, 모든 쓰기를 영구 저장소에 지속할 수 있어 재부팅과 시스템 실패를 견딜 수 있습니다.
- 클러스터링: 해시 기반 샤딩을 통한 수평 확장성을 제공하며, 클러스터를 확장할 때 자동으로 파티션을 재분배합니다.
- 고가용성: 스탠드얼론 및 클러스터 배포에 대한 복제와 자동 장애 조치를 지원합니다.
- 활용 사례
- 실시간 데이터 저장소: Redis의 다양한 인메모리 데이터 구조는 낮은 지연 시간과 높은 처리량을 요구하는 실시간 애플리케이션의 데이터 인프라를 구축하는 데 사용될 수 있습니다.
- 캐싱 및 세션 저장: Redis의 빠른 속도는 데이터베이스 쿼리, 복잡한 계산, API 호출, 세션 상태 등의 캐싱에 이상적입니다.
- 스트리밍 및 메시징: 스트림 데이터 유형은 고속 데이터 삽입, 메시징, 이벤트 소싱, 알림 등을 가능하게 합니다.
Docker
: Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 그리고 개발, 배포, 실행을 간소화하기 위해 "컨테이너"라는 개념을 사용합니다. 다양한 기능들을 통해서 애플리케이션을 더 빠르고 안정적으로 개발하고 배포할 수 있습니다.
- 주요 특징
- 컨테이너: Docker 컨테이너는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 것과 동일한 소프트웨어를 패키지화하는 데 사용됩니다.
- 이식성: Docker를 사용하면 어떤 환경에서든 동일하게 실행할 수 있습니다.
- 버전 관리와 배포 용이성: Docker 이미지는 Docker Hub를 통해 버전 관리 및 배포가 가능합니다.
- 효율적인 자원 활용: Docker는 커널 공간과 호스트 OS 자원을 공유하므로 가상 머신보다 훨씬 적은 오버헤드로 실행됩니다.
- 활용 사례
- 마이크로서비스 아키텍처: Docker는 서비스를 독립적으로 배포하고 확장하는 데 이상적인 도구입니다.
- CI/CD 파이프라인: Docker는 지속적인 통합 및 지속적인 배포 워크플로우를 개선하는 데 도움이 됩니다.
- 개발 환경 표준화: Docker를 사용하면 개발자가 로컬 환경에서 애플리케이션을 실행 및 디버그를 쉽게 할 수 있다.
'AIoT' 카테고리의 다른 글
AIoT 정규 56일차 (0) | 2024.03.29 |
---|---|
AIoT 정규 55일차 (0) | 2024.03.28 |
AIoT 정규 53일차 (0) | 2024.03.26 |
AIoT 정규 52일차 (0) | 2024.03.25 |
AIoT 정규 51일차 (0) | 2024.03.21 |