Wednesday, July 18, 2018

Windows 10 High DPI 에서 Java application의 Font 조절

  • Summarize
    • 1) Find java.exe you installed. 
    • 2) Right click -> Properties
    • 3) Go to Compatibility tab
    • 4) Check Override high DPI scaling behavior.
    • 5) Choose System for Scaling performed by:
* Do the same to javaw.exe.

Tuesday, October 24, 2017

SNP 3120 네트워크 카메라 설정하기

SNP 3120 Network Camera @Ubuntu 16.04

장치 초기화

  • 기존 설정된 네트워크 카메라의 IP주소를 모르기 때문에, 장치 초기화(Reset) 필요. 
    • 하단부의 버튼을 10초 정도 누르고 있으면, 초록색 LED가 빠르게 깜빡이면서, 뭔가 재작동 하는 듯한 동작을 한다. 
    • 초기 암호
      • admin: 4321
    • 초기 IP주소
      • 192.168.1.100

네트워크 환경 설정

  • 해당 카메라와의 네트워크 통신을 위해, 클라이언트의 IP 환경 바꾸기
$ sudo ifconfig enp0s31f6 192.168.1.200 netmask 255.255.255.0 broadcast 192.168.1.1
$ ping 192.168.1.100
  • 웹브라우저에서 캡처 영상을 보거나 카메라 설정을 위한 관리 페이지 접근을 위해서, Micorsoft Silverlight 설치 필요. 
    • 하지만, MS Silverlight 가 더이상 개발 중단되면서 우분투 OS 자체를 지원하지 않음. 이에 대한 대안으로 pipelight라는 패키지를 설치해서 호환성을 이용하도록 함.
$ sudo add-apt-repository ppa:pipelight/stable
$ apt-get update
$ sudo apt-get install --install-recommends pipelight-multi
$ sudo pipelight-plugin --update
$ pipelight-plugin --enable silverlight
    • Plugin silverlight5.1 is now enabled
    • (혹시 5.0 버전을 사용한다면) $ pipelight-plugin --disable silverlight --enable silverlight5.0
      • 현재 시점에서 크롬 및 파이어폭스 최신 버전에서 더이상 Silverlight를 지원하지 않는다. 
        • 즉, 최신 버전의 브라우저에서는 User Agent Overrrider 또는 Switcher 플러그인 모두 소용 없음. 해결 방안으로는 Firefox v52 ESR 버전을 다운로드 받아서 강제 실행해야 한다. 
        • 이제, 브라우저 주소창에 다음 명령을 입력하여 설치된 플러그인 목록을 확인해 보자. 
          • about:plugins
        • Firefox를 구동하여, Silverlight의 동작을 확인할 수 있는 TEST 페이지 방문.
        • http://192.168.1.100 접근시 카메라 설정 가능함.

      RTSP 스트림 확인

        • RTSP 환경으로 스트림 영상 받아보기
          • VLC Media Player로, 네트워크 카메라로부터의 스트림 영상을 확인해 볼 수 도 있다.
            • rtsp://admin:4321@192.168.1.100/profile1/media.smp
          • python 환경에서 받아보기 위해서는, OpenCV 라이브러리 설치가 필요함.
            • 일단, python에서 다음의 명령으로 현재 설치된 OpenCV가 지원하는 라이브러리를 확인해 본다.
              • import cv2
              • print(cv2.getBuildInformation())
            • $ sudo apt-get install ffmpeg libavresample-dev libavutil-dev libavcodec-dev libavformat-dev libswscale-dev
            • 그러나, conda의 opencv, conda menpo 채널의 opencv3, apt-get을 통한 libopencv 라이브러리 설치 모두 OpenCV에 연동된 FFmpeg이 같이 컴파일되어 있지 않아 실시간 영상을 받아오거나 화면에 뿌릴 수 없음. 이에 OpenCV 소스를 직접 다운로드 받아 빌드한 뒤 cv2.so 파일을 만들어서 이용해야 함.

        Monday, October 23, 2017

        분산 파일 시스템 다루기 @CentOS

        배경

        • CentOS 환경에서 복수의 하드디스크로 DFS(분산 파일 시스템) 환경 구성하기

        HDD 설정

        • HDD 확인
          • $ vi /proc/partitions
            • 가용한 모든 파티션을 확인
          • $ df -T
            • 현재 마운트된 파티션 및 종류 확인
          • $ ls /dev/disk/by-id/
            • 가용한 모든 디스크 확인
          • $ sudo fdisk -l
            • 현재 디스크 상태 확인
            • 또는 $ sudo fdisk -l /dev/sdb
        • partitioning 
          • 2TB 이상 디스크는 fdisk에서 파티셔닝 불가; parted 사용 필요
          • $ yum install parted
            • parted 설치
          • $ parted -l
            • 현재 파티션 정보 확인
          • $ parted /dev/sdb
            • 파티션 설정
            • $$ mklabel
              • gpt
            • $$ print
            • $$ unit TB
            • $$ mkpart primary 0.0TB 4.0TB
            • $$ print
            • $$ quit
        • 디스크 타입 포맷
          • $ sudo mkfs.ext4 /dev/sdb
            • mkfs.ext4는 root 권한에서(sudo -i 또는 /sbin을 path에 설정하여) 수행 가능.
        • 포맷된 디스크를 리눅스 특정 위치(=mounting point)에 마운트
          • 디스크를 마운트 시킬 때 noatime, nodirtime 방식으로 처리하는 것이 성능 개선.
            • 파일 access가 발생하는 시간(atime)을 매번 기록하면 성능 저하되므로.
          • $ cd /
          • $ sudo mkdir -p data/1
          • $ sudo mount /dev/sdb /data/1
          • $ sudo mkdir -p /data/1/dfs/dn
          • $ sudo chown -R ksb:ksb /data/1/dfs/dn
          • $ df -kh
            • 마운트된 상태 및 사용량 확인
          • (부팅 시 자동 로딩) $ blkid 
            • (디스크 확인) $ ls -l /dev/disk/by-uuid
        • 최종 결과 확인
          • $ cat /etc/fstab
            • 마운트된 상태 확인
              • 마운트가 되어있지 않다면 UUID 확인해서 추가해야함.
          • $ reboot

          참고

          • 파일시스템
            • ex3
              • Red Hat Enterprise Linux 5 기본 파일 시스템
              • 2.3TB 이상을 지원하지 않음.
              • 서브 디렉토리 최대 개수 32,000
            • ex4
              • Red Hat Enterprise Linux 6 기본 파일 시스템
              • 최대 16TB 지원
            • xfs
              • 16TB 이상의 파일도 지원
          • 여러개 디스크 하나로 묶기
            • LVM(Local Volumn Management)
              • 각 디스크별로 LVM 물리 볼륨 설정한 뒤
              • 볼륨 그룹 생성해서 LVM 물리 볼륨 선택
              • LVM 논리 볼륨 생성한 뒤 마운트 지점 설정
          • Hadoop
            • 64MB 블록 단위로 파일 보관
            • HDFS2.0부터는 Active-Standby 지원
            • Name Node의 경우, 자체적인 3배수 복제를 통해 고가용성 지원 --> 물리적 Disk 백업 불필요
            • 리눅스의 LVM 사용 금지
            • JBOD (just bunch of disks) vs RAID
            • RAID 구성
              • Name Node는 RAID 5 (또는 여유가 된다면 10)
              • Data Node는 JBOD >> RAID 0
          • RAID
            • 0 = Striping
              • 단점: 한쪽 디스크가 깨지면, 전체 데이터를 사용하지 못하게 됨. 
              • 참고 블로그1
              • $ mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc
                • 2개의 하드 디스크를 raid level 0으로 md0이라는 이름으로 생성.
              • (확인) $ mdadm -D /dev/md0
                • (RAID 비활성화) $ madam -S /dev/md0
              • (포맷) $ mkfs.ext4 /dev/md0
              • (마운트) $ mkdir /mp | mount /dev/md0 /mp
              • (적절한 접근 권한 설정) $ sudo chmod -R 755 /media/New/hdfs/data
              • (적절한 접근 권한 설정) $ sudo chown -R user:user /media/New/hdfs/data
              • (부팅시 자동 마운트) $ mdadm -D -s /dev/md0 > /etc/mdadm.conf
              • (fstab에 정보 추가) $ vi /etc/fstab
          • 하둡에 새로운 하드 디스크 추가시
            • hdfs-site.xml 파일에 dfs.data.dir 부분에 새로운 마운트를 콤마로 구분하여 입력하기.
              • 예: /data/1/dfs/dn, /data/2/dfs/dn
            • 특정 data node만 사용하는 하드디스크라면 해당 data node 만 재시작. 만약, 전체 클러스터가 공유하는 하드디스크라면, dfs 자체를 재시작.

          Friday, October 20, 2017

          Narrowband-IoT (NB-IoT) 개념

          NB-IoT

          • 개념
            • = Narrowband-IoT = 협대역 사물인터넷
              • 한번 충전해서 몇 년 정도는 꾸준히 데이터를 보내줄 수 있도록.
              • (이미, GSM/LTE 망에서 수백 kbps 이하의 데이터 전송 속도와 10km 이상의 광역 서비스를 지원하지만) 더 넓은 지역을 더 오래 커버하기 위해.
            • 기존 이동통신망을 통해 저전력 광역망(Low Power Wide Area Network, LPWAN)을 지원하는 협대역 사물 인터넷 표준
          • 특징
            • 에릭슨에 따르면, NB-IoT는 단 200kHz 대역폭으로 IoT 기기 20만 대를 지원.
            • 기존 통신망의 틈새 대역으로도 충분하니 통신망 가용/충돌 걱정 필요 적음.
            • 배터리 교환 없이 최대 10년간 작동하는 IoT 모듈을 만들 수 있다고 함.
            • 유사 경쟁 기술에 비해 장점: 2016년 표준 제정 완료.
              • 저전력 IoT 기술은 NB-IoT 외에도 LoRaWAN, 시그폭스(Sigfox) 등이 있지만 이들은 호환성이나 표준 인증 관련해서 논란에 휩싸여 있음.
            • 통신업체 상용화 움직임 시작.
              • 미국 버라이즌과 T모바일, AT&T 등이 NB-IoT를 지원하는 것으로 알려져 있음.
          • 응용
            • 기존 네트워크를 활용해 넓은 지역을 커버하고 전력 소비가 적기 때문에 수도 검침, 위치 추적용 기기 등 넓은 지역에 걸쳐 다수의 기기를 설치하는 초저전력 IoT 사업 모델에 적합.
              • 스마트 주차 미터기나 이동수단 트래킹, 스마트 도둑 알리미 서비스
          • 저전력 장거리(LPWA) 네트워크 기술 비교
            • NB-IoT (3GPP)
              • 전파도달 15km; 면허대역; 150kbps; 배터리 10년
              • KT, LG유플러스
            • LoRa (비표준)
              • 전파도달 11km; 비면허대역; 10kbps; 배터리 10년
              • SKT
            • Wi-SUN (IEEE 802.15)
              • 전파도달 8~10km; 비면허대역; 300kbps; 배터리 15년
              • 짧은 시간내에, 데이터 전송량이 많고 측정 주기가 짧은 경우(예: 검침 분야)에 유용
              • 지자체 자가망 구축에 유리.
            • Sigfox

          Monday, August 21, 2017

          Docker 다루기

          Docker

          개념

          • Immutable Infrastructure
            • 호스트OS와 서비스 운영환경(서버 프로그램, 소스 코드, 컴파일된 바이너리)을 분리하고, 한번 설정한 운영 환경은 변경하지 않는다.
          • docker 이미지(실행파일) 자체는 변하지 않는다.
            • cf. 하이퍼바이저 기반 가상머신(Virtual Machine)의 이미지는 계속 변화한다.
          • docker 컨테이너를 또 다른 이미지로 만들 수도 있다.

          설치 및 삭제

          Editions

          • EE
            • 2017년 3월 2일 Docker Enterprise Edition이 announce됨
              • Basic
              • Standard, Advanced: advanced 컨테이너 관리 및 Security Scanning 기능 추가
          • CE
            • 종래 오픈소스 Docker는 Community Edition으로.
              • 매달 release: Edge 버전
              • 분기별 release: Stable 버전

          Versions

          • YY.MM 방식으로.

          How to Install @ Ubuntu 16.04 (Xenial)

          • 방안1. repository 구축
          • 방안2. 패키지(.deb) 다운로드
            • 업그레이드 필요시, 다시 다운로드 받아서 설치 필요.
            • pool/stable/ 폴더에서 amd64 선택 후 원하는 버전 선택.
              • amd64 = x64 = x86-64
              • docker-ce-17.06.1 (2017.08.18)
          • 방안3. Script 구동.

          How to uninstall

          • 패키지 삭제
            • $ sudo apt-get purge docker-ce
          • 이미지, 컨테이너, 설정파일 모두 삭제
            • $ sudo rm -rf /var/lib/docker

          사용법

          • 현재 user를 docker group에 추가
            • Docker daemon connect permission denied 문제 해결 방법
              • $ sudo usermod -a -G docker $USER
              • reboot 또는 {log out 후 다시 log in}
          • 설치 확인
            • $ docker version
          • 이미지 불러오기
            • $ docker images
            • $ docker search Ubuntu
            • $ docker pull xxxx
          • 이미지(실행파일) 실행 후 컨테이너(프로세스) 수행
            • $ docker run –it Ubuntu:14.04 /bin/bash (실행하고 그 안으로 들어감)
              • -i : 입출력 보여주도록
              • -t : 가상 터미널 환경 이용
          • 컨테이너 관리
            • $ docker ps (실행 중인 컨테이너만 보여줌)
            • $ docker ps –a (이미 종료된 것도 보여줌)
            • $ docker start (실행만 하고 들어가지 않음)
            • $ docker attach (실행한 컨테이너 안으로 들어갈 때)
            • ctrl + p + q : 실행중인 컨테이너에서 빠져나오기.
            • $ docker rm -f xxx (실행 중인 컨테이너 지우기)
            • $ docker rmi xxx (이미지 자체를 완전히 지우기)
          • 도커 내에서 GUI 이용하는 프로그램 구동하려면, (예: eclipse)
            • $ docker run 의 인자로 다음을 추가
              • -e DISPLAY=$DISPLAY \
              • -v /tmp/.X11-unix:/tmp/.X11-unix \

          참고

          Scale-invariant feature transform (SIFT) 개념

          Scale-invariant feature transform

          • computer vision에 있어, 이미지의 local feature를 식별;묘사하는 알고리즘
            • 1999년 David Lowe가 특허 출원.
              • Distinctive image features from scale-invariant keypoints (Lowe, 2004)
            • low-level feature 기반 영상 비교에 활용됨
              • 이미지 밝기(intensity) 정보의 low-level gradient가 scale-space에서 어느 방향으로 향하는 것인가만을 살펴보는 방식
              • 즉, gradient 방향성에 대한 히스토그램 특성을 128차원 벡터로 표현
          • 이미지를 feature vector 집합으로 transform.
            • each of which is invariant to image translation, scaling, and rotation, partially invariant to illumination changes and robust to local geometric distortion
          • 다음 4개 step을 통해, 특정 object에 대한 descriptor를 생성
            • Scale-space extrema를 찾기
              • difference of gaussian (DoG)를 이용하여, 의미없는 잡음을 걸러내어 강인한 feature(=extrema)을 찾아냄; 이후 이미지의 scale을 바꿔가면서 동일한 작업을 수행.
              • 즉, 입력 이미지의 scale이 달라지더라도 동일하게 코너점(코너성이 로컬하게 극대이면서 임계값 이상인)으로 검출되는 점을 찾기. -< image pyramid에서 Laplacian(2차 미분값의 합)을 이용하여 급격한 밝기 변화가 일어나는 곳을 찾아냄.
            • Key-point localization & filtering
              • 의미있는 정보들만을 추출.
            • Orientation 할당
              • gradient 방향에 따른 histogram 이용.
            • Descriptor 생성
          • 단점
            • 경계값의 연결, 물체의 일부분이나 전체에 대한 mid/high-level feature에 대해서는 식별할 수 없음.
            • 속도가 느림
            • 원래의 SIFT는 흑백 영상에만 적용 가능; 이후 HSV-SIFT, OpponentSIFT, HueSIFT, W-SIFT, rgSIFT 등이 제안됨.

          Other

            Saturday, August 19, 2017

            Variational Autoencoder 개념

            Variational Autoencoder

            Paper

            Original paper

            Tutorial paper

              References and tutorials

              • Manifold hypothesis
                • Generative model 및 deep learning 자체가 기반하고 있는 개념; 즉, 고차원의 실제 데이터($X$)를 저차원의 표현(representation, $Z$)으로 나타낼 수 있음.
              • Auto Encoder
                • encode: Input -> Hidden
                  • 입력 데이터가 적은 수의 뉴런으로 압축(encoding, dimensionality reduction)된다고 간주되며, 의미있는 특징을 뽑아내는 과정으로 이해됨.
                  • (PCA가 선형적인 한계를 가지는 반면,) AE는 non-linearity 및 뛰어난 차원 축소 능력을 가진다.
                • decode: Hidden -> Output
                • label이 필요없이, 입력 데이터 만으로 파라미터 값을 결정하는 un-supervised learning.
                • hidden layer가 여러 계층 누적된 구조를 stacked autoencoder라고 부름.
                  • 누적 계층을 인해 capacity가 늘어나면서, 훨씬 다양한 함수 표현이 가능하다고 함. 또한, 해당 구조를 학습하기 위해서, greedy layer-wise training(각 계층별로 단계적으로 탐욕스럽게 학습)을 수행함.
              • Variational Inference
                • 복잡한 densities를 단순하게 근사하는(approximating) 기법 
              • Kullback Leibler (KL) divergence
                • 두 개의 분포, P와 Q가 일치할 때가 zero이고, 일치하지 않으면 항상 양수(non-negative).
              $$D_{KL}(P||Q) = \int p(x)log\frac{p(x)}{q(x)}$$

              Concept

              • X에 대한 Z의 연산식에 확률 $P_{\theta}(X|Z)$을 추가 적용해 보자! 즉, X와 Z를 random variable로 다루자.
                • 즉, 종래의 Auto Encoder가 단순히 Linear Regression에 의해 X를 구했다면, VAE는 Probability를 함께 이용해보자는 것임.
                  • 이러한 확률 모델을 기반으로, confidence bounds를 이용할 수 있음
              • 이제 MLE를 활용해서 각 Z에 대한 X를 잘 찾아내보려고 하는데(즉, $p_{\theta}(x)$를 극대화하기 위해), 다음 식에서처럼 intractable posterior를 구하기 어렵다.
              $$ \arg\max_\theta \left [ p_{\theta}(x) = \int_{z}p_{\theta}(x, z) = \int_{z}p_{\theta}(x|z)p_{\theta}(z) \right ] $$
              • 이제 variational inference를 이용하여 복잡한 확률분포를 단순한 확률분포로 근사치를 계산하자.
              $$q_{\phi}(z|x) \approx $ p_{\phi}(z|x)$$
              • log MLE에 대한 식을 풀어보면 다음과 같다(논문의 식1, 식2). 따라서, evidence $p_{\theta}(x)$의 lower bound를 구할 수 있으며, 이제는 ELBO를 최대화한다. 이 때, 제일 아래 식의 $q_{\phi}(z|x)$에 관한 monte carlo sampling에 의해 estimation을 구할 수 있다고 함. 한걸음 더 나아가면, 논문의 식3을 통해 ELBO에서 KL-divergence term을 한번 더 분리해 냄으로써, 보다 variance를 줄일 수 있다고 함.

              Windows 10 High DPI 에서 Java application의 Font 조절

              Reference:  How do I run Java apps upscaled on a high-DPI display?  @superuser.com Summarize 1) Find java.exe you installed.  2) Righ...