영상인식

    RTSP란

    1. RTSP란 RTSP(Real Time Streaming Protocol)은 실시간 스트리밍 프로토콜이다. RTSP는 스트리밍 미디어 서버를 제어할 목적으로 설계된 네트워크 제어 프로토콜로써, 실시간으로 음성이나 동영상을 송수신하는 통신규약이며, 인터넷 프로토콜의 응용계층에서 동작하는 특성을 갖고있음. RTSP는 리얼네트웍, 넷스케이프, 컬럼비아 대학교에서 개발되었으며, 표준화한 RTSP 2.0이 2016년에 출판되었다. IPTV등의 보급을 통해 외부에서 촬영된 영상을 TV로 볼 수 있고, IP 카메라의 경우 모바일에서 카메라 영상을 확인할 수 있게 되었다. RTSP의 특징 - 다지점 스트리밍 응용을 위한 기반구조 - HTTP와 유사한 클라이언트 및 서버로 동작 - 다지점, 다수 개수의 콘텐츠 세션의..

    Gstreamer란

    Gstreamer란 GStreamer는 스트리밍 미디어 애플리케이션을 만들기 위한 프레임워크이다. GStreamer의 개발 프레임워크를 사용하면 모든 유형의 스트리밍 멀티미디어 응용 프로그램의 작성과 오디오나 비디오, 그 밖의 다양한 종류의 데이터 흐름을 처리할 수 있으며 대기 시간이 많이 요구되는 고급 오디오 응용 프로그램을 설계하기 위한 좋은 프레임워크이다. GStreamer에는 MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod 등을 포함하여 매우 다양한 형식을 지원할 수 있는 미디어 플레이어를 구축하기 위한 구성 요소가 이미 포함되어 있다. GStreamer의 주요 장점은 플러그인 가능한 구성 요소를 임의의 파이프라인에 혼합 및 일치시킬 수 있으므로 본격적인 비디오..

    Nvidia deepstream tracker 라이브러리 (IOU/KLT/Nvdcf )

    IOU - CPU로만 계산을 수행하고 가볍게 작동하지만 트래커의 id가 자주 바뀌게 되고, 빠르게 움직이는 장면에서 사용하기 적합하지 않다는 특징을 가짐. KLT - 마찬가지로 CPU만 사용하지만 CPU의 사용량이 IOU보다 많고 그림자 등의 노이즈 등에 간섭을 받을 수 있으나 단순한 배경과 뚜렷한 객체가 존재한다면 합리적인 결과를 기대할 수 있는 특징을 가짐. Nvdcf –CPU와 GPU를 동시에 사용하며 그림자나 기타 간섭에도 IOU나 KLT보다 확실하게 객체를 추적하고, 객체의 id가 잘 변하지 않는다는 장점이 있지만 object detection 모델이 이미 GPU에서 사용되고 있는데 GPU를 함께 사용하게 되니 처리 속도가 느리고, 처리되는 총 스트림 수를 줄인다는 특징을 가짐. https://..

    Deepstream 이란

    딥 러닝을 활용한 비디오 분석 응용 프로그램의 고 성능 개발을 손쉽게 할 수 있도록 만든 NVIDIA의 라이브러리이다. 높은 수준의 C++ API와 고성능 런타임 (High Performance Runtime)을 통해 GPU 가속 Transcoding 과 딥러링 추론 기능을 빠르게 통합하여 보다 반응이 빠른 AI 기반 서비스를 제공할 수 있도록 한다. 이는 Intelligent Video Analytics의 보다 손 쉬운 개발을 지원하며 개발자들은 딥스트림을 사용해 실시간으로 동영상 프레임을 처리하고, 이해하며 분류 작업을 진행할 수 있다. 또한 매우 높은 수준으로 요구되는 처리량(Throughput) 및 반응 시간(Latency)에 대한 요건을 충족시킬 수 있다. 이러한 DeepStream SDK는 A..

    Deepstream rstp통신을 위한 파이프라인 조정

    기존 YOLOv3의 config.txt 파일이다. [application] enable-perf-measurement=1 perf-measurement-interval-sec=5 #gie-kitti-output-dir=streamscl [tiled-display] enable=1 rows=1 columns=1 width=1280 height=720 gpu-id=0 #(0): nvbuf-mem-default - Default memory allocated, specific to particular platform #(1): nvbuf-mem-cuda-pinned - Allocate Pinned/Host cuda memory, applicable for Tesla #(2): nvbuf-mem-cuda-dev..

    Deepstream Yolov3 사용기

    deepstream을 설치하고 opt/nvidia/deepstream/deepstream-5.1/sample/config/deepstream-app 폴더의 source1_csi_dec_infer_resnet_int8.txt 를 구동했다. 사람과 간단한 자동차 인식정도는 되는데 YOLO모델이 존재하기에 구동을위해 하루의 시간을 다 보냈고, 인터넷에서 자료를 모으고 있다. 기본예제를 구동하기 위해서 https://voidint.com/category/nvidia/deepstream/ DeepStream Archives - voidint.com DeepStream 프레임워크의 기본 구조는 모두 GStreamer에 기반한 것들입니다. GStreamer Concepts 을 살펴보고 기본적인 구성 요소들과 각 구성..

    SDK란?

    소프트웨어 개발 키트(영어: Software Development Kit, SDK)는 일반적으로 소프트웨어 기술자가 사용하여 특정한 소프트웨어 꾸러미, 소프트웨어 프레임워크, 하드웨어 플랫폼, 컴퓨터 시스템, 게임기, 운영 체제 등을 위한 응용 프로그램 등을 만들 수 있게 해주는 개발 도구의 집합이다.[1][2][3] 응용 프로그램을 만들기 위해서는 특정한 SDK를 다운로드 받아야 하는데, 안드로이드 앱 개발을 위해서는 Java를 포함한 SDK, iOS 개발을 위해서는 Swift가 포함된 iOS SDK, MS Windows를 위해서는 .NET을 포함한 .NET Framework SDK가 필요하다. 또한 구글이나 페이스북같이 분석과 활동에 대한 데이터를 제공하기 위해 SDK가 앱에 설치되어 있는 경우도있다..

    Jetson nano와 같은 Edge device를 사용하는 이유

    Edge device란? 입력데이터를 가까이서 처리할 수 있는 컴퓨터 다수의 카메라에서 들어오는 고용량의 데이터를 들어오는 동시에 실시간으로 처리함으로 운영, 부대 비용을 줄일 수 있음. https://www.youtube.com/watch?v=jxSbu-lDFFs&t=916s

    GStreamer

    GStreamer 란? GStreamer는 스트리밍 미디어 애플리케이션을 만드는 프레임워크이다. 조금 더 부연하자면 GObject 기반 자료형 체계와 C 프로그래밍 언어로 만들어진 파이프라인 기반 멀티미디어 프레임워크다. 오픈 소스 소프트웨어이며 단순 오디오 및 비디오 재생, 저장, 스트리밍 및 다양한 멀티미디어 처리를 프로그래머가 관리 구성 요소를 만들 수 있다. 프레임워크의 기본적인 디자인은 파이프라인을 디자인하여 다양한 플러그인 기능을 사용한다. 크로스 플랫폼이 고려되어, Linux, OS X, iOS, MS Windows, Android 등 다양한 플랫폼에서 작동하고, LGPL 라이선스를 따르고 있다. GStreamer 특징 GStreamer 프레임워크는 오디오와 비디오에 대한 처리를 쉽게 설계할..

    CUDA(쿠다)

    CUDA는 그래칙 카드를 이용한 GPGPU의 통합 개발 환경 제공을 목적으로 함. NVIDIA사에서 GPGPU에 대한 흐름을 먼저 인식하고 그래픽 카드를 범용적인 용도로 사용할 때 발생하는 어려움을 해결하기 위한 노력을 시작하였다. 이전의 그래픽 카드는 3D처리를 위해 다양한 기능이 추가되었지만 모두 그래픽 처리를 위한 것으로 범용적인 용도로 쓰이는 것들은 아니었다. 이런 문제를 해결하기 위해 NVIDIA사는 기존의 GeForce 시리즈를 그래픽 전용처리를 위한 구조에서 유연성을 향상시켜 범용적인 프로그램을 처리할 수 있도록 변경하였다. 그리고 GPU를 이용한 범용적인 프로그램을 개발할 수 있도록 '프로그램 모델', '프로그램 언어', '컴파일러', '라이브러리', '디버거', '프로파일러'를 제공하는 ..

    YOLO 두바이 운전 영상 객체인식

    TFOD 환경설정부터 객체인식 동영상으로 돌리는 것 까지 다 해봤다. 영상을 보기 위해서는 아래의 mp4파일을 다운로드 해야한다. 동영상은 https://www.youtube.com/watch?v=TE2tfavIo3E 두바이의 도로주행 모습이다. 화질이 좋을수록 객체인식이 잘되고, 차만 나오는게 아니라 트럭, 신호등, 사람, 표지판 등을 잘 인식한다.

    TensorFlow Object Detection 환경구축

    TFOD를 사용하기 위한 환경설정을 처음부터 끝까지 진행해보도록 하겠습니다. 1. 가상환경 설정 및 텐서플로우 설치 - conda(cmd)에 코드 작성 (저는 리마인드용이라 tfod_self로 만들었지만 보시는분들은 tfod로 만드셔도 무방합니다) conda create -n tfod_self python=3.8 conda activate tfod_self pip install tensorflow==2.2.0 python import tensorflow as tf 2. document폴더에 텐서플로우 폴더를 만들어 git 설치함. cd Documents (문서 폴더로 이동) mkdir Tensorflow (텐서플로우 파일 생성) git 설치 git clone https://github.com/tensor..

    YOLO ( You Only Look Once )란 무엇인가

    YOLO란 You Only Look Once의 약자로, 다른 모델들에 비해 빠를 처리속도를 보여 실시간으로 객체탐지가 가능하다. SSD와 같이 하나의의 이미지 데이터를 여러개의 이미지 데이터로 나누어 분석하는것이 아닌, 전체의 이미지를 이용해 학습하고 예측하기 때문이다. (배경의 노이즈 부분에서 물체를 인식하는 오류가 발생할 확률이 낮음) 모델의 구조는 아래와 같다 YOLO의 신경망은 확실히 SSD와 다르게 간단한 신경망으로 구성되어있는 모습을 볼 수 있다. 입력한 이미지 데이터는 7x7x30의 데이터로 변환된다.( 가로세로 7개의 격자로 나뉜 30개의 행렬 데이터. 격자로 구분된 셀을 그리드셀이라고 부른다. ) 1. 하나의 이미지 데이터를 입력하면 물체들을 찾아 bounding box와 가장 높은 확률..

    SSD(Single Shot Multibox Detector)란 무엇인가

    Object Detection의 방법 중엔 SSD와 YOLO가 있다. 두 방식은 서로 엎치락 뒤치락 하며 계속해 발전해왔다. 두가지 Object Detection에 대해 설명하기 전, 공통으로 사용되는 개념인 IOU( Intersection over Union )에 대해 먼저 설명해야 하는데, IOU란 두 영역이 겹칠때, 얼마만큼이 겹쳐졌는지에 대한 값이다. 겹치는 부분이 많을수록 값은 커지며, 겹치는 부분이 적다면 값이 적어진다. ( 교집합의 개념이며, 0 ~ 1 로 나타냄 ) 즉, IOU = (두 영역의 교집합) / (두 영역의 합집합) 이다. SSD란 Single Shot Multibox Detector의 약자로, 하나의 이미지데이터에 들어있는 여러 사물들을 찾는다. 즉, Input은 이미지 데이터..

    TFOD( Tensorflow Object Detection )

    TFOD는 하나의 Object가 아닌 여러개의 Object를 Detection할 수 있다. TFOD 환경 만들기 https://durian9s-coding-tree.tistory.com/151 TensorFlow Object Detection 환경구축 TFOD를 사용하기 위한 환경설정을 처음부터 끝까지 진행해보도록 하겠습니다. 1. 가상환경 설정 및 텐서플로우 설치 - conda(cmd)에 코드 작성 (저는 리마인드용이라 tfod_self로 만들었지만 보시는분 durian9s-coding-tree.tistory.com Protobuff란 jeong-pro.tistory.com/190 Protocol Buffer 원리로 배우는 고성능 직렬화, 역직렬화 전략! Protocol Buffer 예제 테스트(구글이..

    Semantic Segmentation( feat. E-net )

    Semantic Segmentation이란 물체들을 분할해서 표시하되 같은 물체들을 묶어서 분할하는 방법이다.( 같은 색으로 처리해 표현.) 즉, 한 이미지 데이터에 여러개의 객체를 구분하기 위해 Semantic Segmentation기법을 이용한다. 그 중 OpenCV DNN module인 E-net을 사용해 프로그래밍해보겠다. E-net은 Blob이미지 데이터를 입력받는다. Blob은 동일한 방식으로 전처리된 동일한 너비, 높이 및 채널수를 가진 이미지를 말한다. 순서 1. 이미지를 Blob 이미지 데이터로 변환. 2. E-net모델을 사용해 Semantic Segmentation한다. 3. softmax방식을 이용하기 때문에 클래스의 개수만큼의 데이터가 나오는데 하나의 이미지 데이터로 처리. (ar..