분산처리프레임워크를활용한 대용량영상고속분석시스템 2015.07.16 SK C&C 융합기술본부오상문 (sangmoon.oh@sk.com)
목차 I. 영상분석서비스 II. Apache Storm III.JNI (Java Native Interface) IV. Image Processing Libraries 2
1.1. 배경및필요성 I. 영상분석서비스 현재대부분의영상관리시스템에서영상분석은 CCTV 에서처리하고있으나, 시스템규모증가, 해상도증가등에따라서버 side 분석아키텍처에대한필요성이높아지고있음. CCTV PSIM CCTV PSIM CCTV CCTV S CCTV Client CCTV Client 영상분석 @ CCTV 제약사항 과거영상분석 / 검색 Inter CCTV 분석 UHD(4K) CCTV 영상분석기능 Upgrade Vendor Lock-in 영상분석 @ 서버 (S) 요구사항 대용량영상데이터처리 성능극대화 : 준실시간 이기종 연계 이기종 Engine 활용 : Video Management System PSIM : Physical Security Information Management S : Video Analytics Service 3
1.2. 서버 Side 영상분석서비스아키텍처 I. 영상분석서비스 분산처리아키텍처를활용하여분석성능을극대화하고, 연계구조를표준화하여이기종 연계및이기종 엔진활용가능 분석 Task1-1 engine client 분석요청 1 분석 Job1 partitioner 분석 Task1-2 분석 Task1-3 connector 영상 1 영상 2 영상 3 client 분석요청 2 coordinator partitioner 분석 Job2 partitioner 분석 Task2-1 분석 Task2-2 engine connector 영상4 영상5 영상6 영상7 영상8 영상9 Job = ΣTask 수십 ~ 수백대규모 Cluster에 Task 분산처리 Partitioner : Job -> Tasks Processor : Task 수행 engine connector Search Job Partitioner Search Task Processor Engine Connector 4
1.3. Feature : 분산처리 I. 영상분석서비스 영상분석 / 검색요청을다수의 Task 로분할하여다수의장비들로구성된 Cluster 에서분산처리 요청분할예제 : 분석요청 (CCTV 4 대, 대상시간 3 시간 ) 12 개의 Task( 각각 CCTV 1 대, 대상시간 1 시간 ) service.analysis({"cctv1", "cctv2", "cctv5", "cctv7"}, "10:00", "13:00", event) ---> 1.analysis("cctv1", "10:00", "11:00", event) ---> 2.analysis("cctv1", "11:00", "12:00", event) ---> 3.analysis("cctv1", "12:00", "13:00", event) ---> 4.analysis("cctv2", "10:00", "11:00", event) ---> 5.analysis("cctv2", "11:00", "12:00", event) ---> 6.analysis("cctv2", "12:00", "13:00", event) ---> 7.analysis("cctv5", "10:00", "11:00", event) ---> 8.analysis("cctv5", "11:00", "12:00", event) ---> 9.analysis("cctv5", "12:00", "13:00", event) ---> A.analysis("cctv7", "10:00", "11:00", event) ---> B.analysis("cctv7", "11:00", "12:00", event) +---> C.analysis("cctv7", "12:00", "13:00", event) 분석성능목표 : 단독처리 : 30 분 100 개 Task 로분산처리 : 1 분 Task 개수 분석시간 ( 분 ) 1 30 5 8 10 5 50 1.5 100 1 분석시간 40 30 20 10 0 0 20 40 60 80 100 Task 개수 5
1.4. Feature : 이기종 연계및이기종 엔진활용 I. 영상분석서비스 침입탐지 Engine 1 얼굴인식 Engine 2 차량탐지 / 분류 Engine 3 1 Connector 2 Connector 1 2 6
1.5. 서버 Side 영상분석서비스활용방안 I. 영상분석서비스 사건등과관련한차량 / 인물추적을위해서광범위한지역의 CCTV 과거영상을검색하는작업이현재는사람에의한 (manual) 분석에의존하고있으나, 자동화가적용되면효율성과활용도가대폭개선될것임 CCTV 해상도향상 (HD -> UHD) 에따라사물 / 인물인식정확도가대폭상승할것으로예상 시내도로망의시간대별, 이동방향별차량대수및차량속도정보를추출하여분석하고개선안을 도출 신설도로계획, 신호간격최적화등에활용 백화점, 대형마트, 편의점등의매장내부소비자동선을 CCTV 영상으로부터추출하여분석 소비자이동경로분석, 층별 / 위치별체류시간분석, 히트맵 (Heat Map) 분석 상품배치, 상점배치, 광고배치, 이동경로개선 공항, 항만, 주요국가 / 공공시설등의출입자안면정보를추출하여위험인물, 범죄용의자, 입 / 출국금지대상자리스트와비교 CCTV 해상도향상및영상분석기술발전으로안면인식정확도가대폭개선될것으로예상 7
1.6. 활용기술및 Software I. 영상분석서비스 분석 Task1-1 engine client 분석요청 1 분석 Job1 partitioner 분석 Task1-2 분석 Task1-3 connector 영상 1 영상 2 영상 3 client 분석요청 2 coordinator partitioner 분석Job2 partitioner 분석 Task2-1 분석 Task2-2 engine connector 영상4 영상5 영상6 영상7 영상8 영상9 < 분산처리 Framework> Apache Storm engine <Java-C Interface> JNI connector <Image Processing> OpenCV, FFmpeg 8
2.1. Stream Processing Software II. Apache Storm Hadoop 을중심으로한대용량데이터처리기술의발전및확산과함께, 실시간처리를위한 Stream Processing Software 들이주목받고있으며, Open Source Software 영역에서는 Apache Storm, Apache Spark 등이강세를보이고있음. a fast and general engine for large-scale data processing. https://github.com/apache/spark a free and open source distributed realtime computation system https://github.com/apache/storm a distributed stream processing framework https://github.com/apache/samza a general-purpose, distributed, scalable, fault-tolerant, pluggable platform https://github.com/apache/incubator-s4 Market Guide for Event Stream Processing (14 August 2014) : http://www.gartner.com/document/2823418 Hype Cycle for In-Memory Computing, 2014 (29 July 2014) : http://www.gartner.com/document/2810817 9
2.2. Apache Storm : Concepts II. Apache Storm Spout Source of streams Bolt Processing Stream Data Topology Logic 10
2.3. Apache Storm : Feature & Use-cases II. Apache Storm Features Use-cases 11
2.4. 영상분석서비스 on Apache Storm II. Apache Storm Search Req. Search Job Spout Search Task Bolt Processor Engine Connector Partitioner Search Task Bolt Engine Search Task Merge Bolt Processor Connector Search Task Bolt Engine Processor Connector 12
3.1. Java C/C++ Interface III. JNI JDK Built-in Transfer Java objects between Java module and C module Provide C/C++ API to... Create, inspect, and updates Java objects. Call method on Java objects Load classes and obtain class information Automatic mapping from Java to native functions. Automatic conversion between C and Java strings Runs on most platforms which support Java https://github.com/twall/jna Generate JNI code from the wrapper class using annotation Provide presets for OpenCV, FFmpeg, CUDA and a lot more https://github.com/bytedeco/javacpp 13
3.2. JNI Components III. JNI video_mgr_adatper.h getnextframe() VideoMgrAdapter getnextframe() video_mgr_adapter.cpp getnextframe() video_mgr.h move_forward() move_backward() get_frm_header() get_frm_data() video_mgr.dll 14
3.3. JNI Programming Tips III. JNI 15
4.1. OpenCV, FFmpeg IV. Image Processing Libraries Library to access, process, and analysis images and videos. C/C++, Java, Python API BSD license https://github.com/itseez/opencv Library to process and convert video and audio Encoding/decoding, muxing/demuxing C API LGPL, GPL https://github.com/ffmpeg/ffmpeg 16
? SK C&C 융합기술본부 오상문 (sangmoon.oh@sk.com)