Pixel Intensity(화소 강도)

공대생의 팁 2019.01.13 01:57


 이미지 처리에 있어 해당 이미지의 기초 단위인 화소는 매우 중요한 요소라 할 수 있습니다. Pixel intensity란 특정 화소의 밝은 정도를 나타낸다고 할 수 있겠습니다. 직관적인 예제를 보도록 합시다.



 위 그림은 Grayscale 관점에서 Pixel intensity를 나타낸 것입니다. 검은색의 경우 low값을 나타내고 흰색의 경우 high값을 나타내고 있으며 그 중간인 회색의 경우 middle값을 가지고 있음을 볼 수 있습니다.

 만약 각 픽셀이 0에서 255 사이의 값을 가진다 하였을 때 검은색은 0을, 흰색은 255, 회색은 0~255 사이의 값을 가질 것으로 예상할 수 있습니다.


 아래의 그림은 15×15 크기의 이미지입니다.



 각 픽셀의 intensity는 아래와 같은 숫자로 나타내게 됩니다. 위에서 보았듯이 검은색에 가까울수록 값은 0에 가깝고 흰색에 가까울수록 255에 가까운 값이 나타남을 알 수 있습니다. 



 여기까지 설명을 들으셨다면 pixel intensity의 개념에 대해 어느 정도 감이 잡혔으리라 생각합니다. 이번에는 grayscale과 같은 단색이 아닌 흔히 쓰이는 RGB 컬러 사진을 보도록 하겠습니다.



 우리들이 흔히 사용하는 이미지는 빨강,초록,파랑의 3개의 색을 조합하여 색을 만듭니다. 각각의 색상 또한 grayscale처럼 색깔의 강도를 조절함으로서 다양한 색을 나타낼 수 있게 되는 것이지요.

 RGB 이미지는 마치 3개의 grayscale로 이루어져 있다고 생각할 수 있습니다. 즉 픽셀 1개당 3개의 값을 가진 벡터 (r, g, b)로 표현할 수 있으며 각 값은 0에서 255 사이의 값을 갖고 있는 것입니다.


 그렇다면 위 이미지의 pixel intensity를 histogram을 통해 확인해보도록 하겠습니다. 이를 위해 Matlab을 사용하여 histogram을 그려보았습니다.


1
2
3
4
5
6
7
8
9
10
11
img = imread('sample.png')
 
Red = imag(:,:,1);
Green = img(:,:,2);
Blue = img(:,:,3);
 
[yRed, x] = imhist(Red);
[yGreen, x] = imhist(Green);
[yBlue, x] = imhist(Blue);
 
plot(x, yRed, 'Red', x, yGreen, 'Green', x, yBlue, 'Blue');
cs


 위 코드를 Matlab에서 실행하면 다음과 같은 그래프를 얻을 수 있습니다.


 위 이미지와 만들어진 histogram을 비교해본다면 각 column에서 가장 많이 차지하는 색상을 어느정도 비슷하게 나타내고 있음을 확인할 수 있습니다.


 특정 이미지에서의 pixel intensity는 의학 분야에서 상당히 중요하게 사용되고 있습니다.



 신체검사 등을 할 때 컴퓨터단층촬영을 한 모습입니다. 각 단면의 pixel intensity의 차이값으로 환자의 몸에 어느 부분에서 문제가 발생하였는지 쉽게 확인할 수 있습니다.

 또한 최근에는 Vision 분야가 발전함으로서 카메라에 들어오는 image를 처리하여 정보를 얻는 등의 방법으로 유용하게 사용되고 있습니다.


Nonparametric methods(비모수적 접근법)

공대생의 팁 2018.12.31 15:17


 우리가 통계 자료를 사용함에 있어서 평균 μ과 표준편차 σ를 사용합니다. 여기서 μ와 σ라는 두 개의 parameter(모수, 매개변수) 를 사용하여 특정 분포에서 원하는 결과를 추론하는 과정을 Parametric method(모수적 접근법)이라 할 수 있습니다. 즉 μ와 σ는 우리들이 원하는 결과값을 얻음에 있어 사용되는 도구라 할 수 있겠습니다.


 반면 Nonparameteric method(비모수적 접근법)은 어떠한 parameter를 사용하지 않거나 매우 제한된 조건을 사용하여 원하는 결과를 얻는 과정이라 할 수 있습니다. 만약 주어진 데이터가 정규분포와 같은 모양을 하고 있지 않아 parametric method를 사용함에 적절하지 않을 경우 Nonparametric method는 이를 대체할 수 있는 좋은 방법이라고 할 수 있겠습니다.


 Nonparametric method를 사용함에 있어 다음과 같은 장점들이 있습니다.


1. 엄격한 모수적 추론을 요구하지 않는다.

2. 모수적 추론을 거의 사용하지 않아 분포를 추론함에 있어 더 많은 수단을 사용할 수 있다.

3. 평균과 표준편차와 같은 파라미터를 사용하지 않는다.

4. 최소한의 추론만 사용하므로 부적절하게 사용될 경우가 적다.

5. 데이터가 약한 측정척도로 측정되더라도 적용이 가능하다.

6. 이해하기 쉽다.

7. 계산이 빠르고 쉽게 수행된다.

 

반면, 다음과 같은 단점을 가지고 있습니다.


1. Parametric method를 사용하는 것이 더 효율적인 데이터의 경우 Nonparametric method가 더 비효율적일 수 있다.

2. 샘플이 커질 경우 직접 계산하는 것이 어려워진다.

3. 상당히 중요한 값이 항상 계산되지 못한다.


 최근 AI의 요소 중 하나인 Neural Network의 경우 Parametric method와 Nonparametric method가 모두 사용되는 경우라 할 수 있겠습니다. 따라서 AI를 연구함에 있어 두 요소를 모두 고려해야 하는 것이 상당히 중요하며 이를 적절히 해결할 수 있다면 좋은 결과를 만들어낼 수 있을 것으로 기대할 수 있겠습니다.



출저 : https://www.researchgate.net/publication/322677728_INTRODUCTION_TO_NONPARAMETRIC_STATISTICAL_METHODS

Model bias(모형 편향)

공대생의 팁 2018.12.30 18:15


 모형편향(Model bias)란 관측된 출력에서 시뮬레이터 결과로부터 나오는 시스템에서의 편차를 의미합니다. 이 현상은 모형 불충분성(Model inadequacy) 또는 모형 불일치(Model discrepancy)라 하며 대다수 환경 모델에 영향을 줍니다.


 모형편향의 원인을 이해하는 것은 모델을 예측함에 있어 이를 평가하는 데에 필수적인 요소라 할 수 있습니다. 모델을 예측함으로서 더 적합한 모델을 만들거나 가장 대포적인 입력 정보를 얻음으로서 좀 더 좋은 모형을 만들 수 있다는 것입니다.

 




출저 : https://www.sciencedirect.com/science/article/pii/S1364815214003247

Davies-Bouldin Index(DBI)

공대생의 팁 2018.12.20 00:29


 Davies-Bouldin Index(DBI)는 Group 내에서의 Distribution과 비교하여 다른 Group간의 분리 정도의 비율로 계산되는 값으로 모든 두 개의 Group 쌍에 대해 각 Group의 크기의 합을 각 Group의 중심 간 거리로 나눈 값으로서 표현되는 함수입니다.


 DBI는 계산이 빠르고 쉬우며 일관성 있는 값을 제시해주는 장점을 가지고 있어 K-means++ 알고리즘과 같이 특정 Group를 분류하는 것을 목적으로 하는 알고리즘의 성능을 정량적으로 비교하는 방식으로 주로 사용됩니다.


 해당 알고리즘을 사용하여 얻은 Group의 결과가 유효할수록 같은 Group 내의 Distribution은 작아져 Group의 크기는 작아지고, 서로 다른 Group간의 거리가 커지므로 DBI값이 작을수록 해당 알고리즘은 유효한 결과를 갖는다고 판단할 수 있겠습니다.


 다음으로 DBI의 수식에 대해 설명해보도록 하겠습니다.



 위 식은 Davies-Bouldin index의 정의입니다. 여기서 Ri는 다음과 같이 정의됩니다.



 즉, Rij의 최대값을 의미하며 i 와 j는 다른 값이어야 한다는 의미입니다. 여기서 Rij는 다음과 같이 정의됩니다


 여기서 Si는 i번째 scatter로 하나의 Group을 의미하며 M은 Si와 Sj의 distance를 나타냅니다. S는 다음과 같이 정의됩니다.

 


 이때 Ti는 cluster i의 벡터 갯수를 나타냅니다 쉽게 말해 하나의 Group에 속해있는 점들의 갯수를 말합니다. 그리고 Ai는 cluster i의 중심 좌표값을 의미합니다. q=1의 경우 Si는 유클리드 거리, q=2의 경우, 각 cluster의 중심에서의 각 샘플 사이의 거리를 표준편차로 나타낸 것이라 할 수 있겠습니다.



 다음으로 M값에 대해 알아보도록 하겠습니다. aki는 n차원 벡터인 ai의 k번째 요소입니다. 이 때 ai는 i번째 cluster의 중심값이라 할 수 있습니다. 즉 이 식안 i번째와 j번째 cluster의 중심 사이의 거리를 나타낸다 할 수 있겠습니다. p = 1일 때, city block 거리(맨하탄 거리)로 표현되며, p = 2일 때, 유클리드 거리로 나타내집니다.


 cluster인 C가 다음과 같은 조건을 만족한다고 가정해봅니다.



 이 때 S는 다음 조건을 만족합니다.


 

 다음으로 R은 다음 조건을 만족합니다.



 다음으로 간단한 예제를 통해 Davies-Bouldin Index에 대해 이해해보도록 합니다.

 



 다음과 같이 점 4개가 주어졌다고 가정하였을 때 점 (1,1)과 점 (1,3)을 중심으로 하였을 때, 각 Group의 중심은 (1,3)과 (3,3)으로 나타낼 수 있겠습니다.





 반면, 점(1,1)과 점(5,1)이 중심이 되었을 때 각 Group의 중심은 (1,2)와 (5,2)로 나타내어집니다.



 위에서 구한  두 가지의 경우들에 대해 각각 DBI값을 구해보겠습니다. p = q = 2라 가정하였을 때, 첫 번째의 경우에서 DBI는 2가 되며 두 번째의 경우에서 DBI는 0.5가 됩니다. 이 결과를 보았을 때 DBI의 값이 작은 두 번째의 경우가 cluster를 좀 더 자세히 구분했다고 말할 수 있겠습니다.




  






출저 : https://ieeexplore.ieee.org/abstract/document/4766909

cflags와 libs의 정보를 보는 방법 - pkg-config

공대생의 팁 2018.12.11 00:14


 종종 gcc 혹은 g++를 사용하여 빌드를 할 때, 이러한 옵션을 사용하는 경우가 있습니다.


$ g++ -o result example.cc -Llibs


 위와 같이 자신의 환경에서 사용된 라이브러리를 사용하기 위해서는 위의 -Llibs를 알아야 할 필요가 있습니다. 이를 알아낼 수 있는 방법으로 pkg-config를 사용하는 방법이 있습니다.

 pkg-config를 사용하여 자신의 컴퓨터에 설치된 라이브러리들을 확인할 수 있습니다. 다음과 같은 명령어를 입력해주시면 되겠습니다.


$ pkg-config  --list-all


 다음으로 자신이 확인해보고자 하는 cflag와 lib를 확인해보도록 하겠습니다. Vision 라이브러리로 가장 많이 사용되는 OpenCV를 기준으로 설명해보도록 하겠습니다.


$ pkg-config opencv --cflags


>> -I/usr/include/opencv


$ pkg-config opencv --libs



위에서 나오는 출력결과를 이용하여 gcc 혹은 g++의 컴파일 옵션으로 위의 libs를 추가해주신다면 컴파일이 정상적으로 동작하는 것을 확인하실 수 있습니다.

[SLAM] Odometry의 정의

공대생의 팁 2018.11.23 15:58


 Odometry란 단어 그대로 주행기록계라는 의미로서 엔코더를 통한 회전수와 IMU(관성 측정 장비)로 기울기 등을 측정함으로서 움직이고 있는 사물의 위치를 측정하는 방법을 의미합니다.


 Odometry는 ROS에서 odom frame으로 구현되며 위에서 설명한 엔코더 혹은 IMU를 사용하여 위치를 추정할 수 있습니다. 부득이하게 Visual SLAM을 사용하여 위의 센서를 사용하지 못할 경우 카메라를 통해 관측한 값을 토대로 Odom을 추정하는 방법을 사용할 수도 있습니다.




 Odom frame을 설계함에 있에 일반적으로 위와 같은 구조로 Frame을 설계합니다. map 은 여러 개의 odom을 가질 수 있으나 odom은 단 하나의 map을 가질 수 있습니다. 즉 1 개의 map 위에 다수의 로봇이 존재할 경우 odom은 로봇의 개수 만큼 존재한다고 할 수 있겠습니다.


earth

 earth frame은 여러 대의 로봇들이 서로 다른 map 위에서 존재할 수 있도록 해줍니다. 로봇들이 한 빌딩의 각 층에 위치하여 서로 다른 map을 가지고 있을 경우 earth frame은 모든 map frame을 통해 각 층의 정보를 가질 수 있게 해줍니다.


map

 map frame은 world fixed frame으로서 earth frame에 고정된 프레임이라 할 수 있습니다.  odom frame이 움직일 때 drift가 발생하여 로봇의 위치가 미세하게 바뀌는 경우가 발생합니다. map frame은 연속적이지 않기 때문에 시뮬레이션을 돌릴 때 마치 로봇이 갑자기 순간이동 한 듯 움직이는 경우를 볼 수 있습니다. 이러한 단점이 있지만 map frame은 장기간 global reference에는 매우 유용한 frame입니다.


odom

 odom frame은 world fixed frame으로서 또한 earth frame에 고정된 프레임이라 할 수 있습니다. 로봇의 위치가 drift로 인해 odom frame이 장기간 global reference에서는 사용에 있어 의미가 없을 수 있으나 odom frame은 로봇의 위치를 연속적으로 나타낼 수 있어 로봇이 갑자기 순간이동을 하는 듯한 모습을 보이지 않고 부드럽게 움직일 수 있도록 해줍니다.

 즉 odom frame은 단기간 local reference에서 로봇의 위치를 정확하게 파악하는데는 매우 유용한 frame이라 할 수 있겠습니다.


base_link

 base_link frame은 로봇 자체의 위치를 나타내는 frame이라 할 수 있습니다. base_link frame의 위치를 odom 혹은 map frame을 사용하여 위치를 추정하는 방법으로 로봇의 위치를 파악할 수 있습니다.

Stability-Plasticity dilemma(안정성-가소성 딜레마)

공대생의 팁 2018.11.22 01:46


 인공지능의 방식 중 하나인 Neural Network에 대해 공부하다 보니 종종 자세히 알아보고자 하는 용어들이 나와 나올 때 마다 조금씩 정리를 해두고자 합니다.

 Neural Network에서 흔히 쓰는 용어들 중 하나인 Stability-Plasticity dilemma(안정성-가소성 딜레마)란 인공신경망이 기존에 학습된 내용을 유지하면서도 새로운 내용을 학습해야할 때 발생하는 딜레마라 할 수 있겠습니다. 먼저 아래의 그림을 통해 간단히 설명해 보도록 하겠습니다.



그림1. Strong version of the synaptic stability hypothesis

그림2. Weaker version of the synaptic stability hypothesis


 그림1과 그림2는 모두 Neural Network의 Stability(안정성)에 중점을 둔 것을 나타낸 것입니다. 그 중 첫 번째의 경우 왼쪽에서 오른쪽으로 시간이 지남에도 각 Node 사이의 Weight(가중치)가 변하지 않고 유지됨을 알 수 있습니다.

 반면 두 번째의 경우 몇몇 Node와 Weight가 약해졌다가 이후 다시 원상태로 돌아오는 모습을 보이고 있습니다. 이러한 Neural Network의 경향이 Stability라 할 수 있겠습니다.


그림3. Synaptic plasticity hypothesis


반면, Neural Network의 Plasticity(가소성)에 중점을 둔 경우 핵심 노드는 그대로 유지되고 있으나 학습이 진행되면서 기존의 Weight가 변하면서 각 Node와의 연결 weight가 변화하는 것을 볼 수 있습니다. 이 때 각 Node에 저장된 메모리는 유지되고 있으나 weight가 변화하면서 저장된 값에 변화가 생겨 기존의 값이 손상된 것을 볼 수 있습니다. 이러한 Neural Network의 경향이 Plasticity라 할 수 있겠습니다.


 이러한 Neural Network의 특징인 기억의 유지(stability)와 새로운 기억의 생성(Plasticity)은 Stability-Plasticity dilemma로 표현할 수 있겠습니다. 학습된 기억을 지속적으로 유지하는 것도 중요하지만 새로운 내용을 학습함에 있어서는 weight를 조정함으로서 약간의 변형이 불가피합니다. 즉, Stability와 Plasticity 어느 한 쪽으로만 비중이 크게 된다면 이는 좋은 인공신경망이 아니라는 의미가 되겠지요. 그렇기에 Stability-Plasticity dilemma는 인공신경망이 학습하는 대상이 무엇인가에 따라 비중을 조절하면서도 어느 한 쪽이 우월해서는 안된다는 것입니다.

ubuntu apt update 실행시 404 Not Found 에레 발생시 해결방법

공대생의 팁 2018.11.17 00:27


 Ubuntu를 잘 사용하던 도중 업데이트를 하기 위해 "$sudo apt update" 명령어를 실행하였을 때 아래와 같은 에러가 발생하는 경우를 보았습니다.



 이와 같은 에러가 발생하는 이유는 크게 2가지로 생각하실 수 있습니다.


1. Ubuntu 운영체제의 지원기간이 종료되었을 때, LTS버전의 경우 5년간 지원되나 그 이외의 버전의 경우 지원기간이 짫기 때문에 지원이 종료되어 위와 같은 상황이 발생하는 경우가 있습니다.

2. ppa launchpad 사이트에 연결되었던 패키지가 지원이 종료되었을 경우


 이 경우 다음과 같은 방법으로 해결하실 수 있습니다.

1. Ubuntu 운영체제를 최신 버전으로 업그레이드하여 지속적인 업데이트를 지원받습니다.

2. ppa launchpad 사이트에서 더이상 패키지의 지원이 되지 않거나 접속 이상으로 업데이트가 되지 않는 경우 Setting을 통해 수정해줍니다.


시스템설정(Setting)→소프트웨어&업데이트(Software&Update) 메뉴에 들어가신 후 '기타 소프트웨어'탭을 선택하신 후 Terminal창의 결과에서 실행이 되지 않았던 부분에 Check를 해제한 후 다시 한 번 업데이트를 시도하면 정상적으로 소프트웨어를 업데이트 하실 수 있습니다.





우분투 16.04에서 한영키,한자키가 Alt,Ctrl로 동작할 때 해결법

공대생의 팁 2018.11.12 16:43


 노트북에 우분투를 설치한 후 한글 입력을 위해 한/영키를 눌렀을 때 몇몇 노트북의 경우  Alt키를 누른 것과 같이 동작하는 경우가 있습니다. 이는 우분투가 영문판을 기준으로 해당 위치의  키가 한/영키와 한자키가 각각 Alt, Ctrl키로 인식하고 있기 때문입니다. 이를 해결하기 위해 다음과 같은 과정으로 해결하실 수 있습니다.


1. 키보드 입력기를 fcitx로 변경


 시스템 설정 →언어지원에서 키보드 입력기로 fcitx와 ibus등이 있습니다. 이 중 fcitx로 설정합니다. ibus 또한 추가 설정을 통해 사용이 가능합니다.



 2. gnome-tweak-tool 설치


apt 명령어를 사용하여 gnome-tweak-tool을 설치합니다.


$sudo apt install gnome-tweak-tool


 3. gnome-tweak-tool을 실행하여 입력 방식 변경


 다음과 같이 Terminal에 명령어를 입력합니다.


$gnome-tweak-tool


 이후 아래 화면과 같은 화면이 나오면 '입력' 메뉴를 선택하신 후 '한국어 한/영, 한자 키' 메뉴를 클릭한 다음 자신의 컴퓨터의 환경에 원하는 구성을 선택해줍니다.



 위와 같은 설정을 하셨다면 이제 자신의 노트북에서도 한글 입력 및 한자 변환이 가능해졌음을 확인하실 수 있습니다.




C++ 클래스 객체를 stream으로 통신 및 전달방법 - Boost Serialization(1) [직렬화된 클래스 만들기]

공대생의 팁 2018.10.20 17:36


 객체지향의 언어를 사용함에 있어 가장 큰 장점으로 class를 사용하여 Constructor나 Inheritance(상속)등을 사용할 수 있어 프로그래밍을 하는 데 있어 한결 더 편리해진다는 점입니다.


 물론 Object(객체)를 하나의 프로그래밍에서만 사용한다면 큰 어려움이 없으나 Object를 binary 파일로 저장한다던가 통신 등을 통해 다른 프로세스로 전달을 해야할 경우 이를 stream으로 전달하여야 하나 이는 int나 float와 같은 Primitive 변수만 전달될 수 있다는 단점이 있습니다.


 이를 해결한 방법으로서 Object를 Serialization(직렬화)하여 stream으로 Object의 값을 전달하거나 저장할 수 있게 된 것입니다.


https://commons.wikimedia.org/


 Serialization을 하는 이유는 자신이 가지고 있는 Object가 상대에게는 어떤 방식으로 표현되어 있는지 알 수 없기 때문에 이를 전달하기 전에 Object가 가지고 있는 값을 직렬화시켜 Object의 값을 받고자 하는 쪽에서 분별할 수 있게 만들어줍니다. 직렬화 된 값이 상대에게 도착한 후에는 이를 다시 역직렬화(Deserialization)를 거쳐 자신이 갖고 있었던 Object값으로 다시 만들어줍니다. 즉, '4'나 'c'와 같이 간단하게 구성된 값이나 글자를 받을 수 있도록 만드는 것을 직렬화(Serialization)이라 할 수 있습니다.


 C++ 라이브러리 또한 객체를 사용하기 때문에 이를 지원할 수 있는 Boost 라이브러리를 지원합니다. 이를 사용하기 위해 다음과 같이 설치합니다.


$ sudo apt install libboost-all-dev


 다음으로 아래와 같은 간단한 예제를 통해 Boost의 Serialization의 방식에 대해 이해해보도록 합니다.


class_fileio.cc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
#include<iostream>
#include<fstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
 
using namespace std;
 
class tst{
public:
    friend class boost::serialization::access;
 
    tst(string sName, int sage, float spi)
        :Name(sName), age(sage), pi(spi)
    {}
 
    tst(){
    }
 
    string Name;
    int age;
    float pi;
 
    template<class Archive>
    void serialize(Archive& ar, const unsigned int version){
        ar & Name;
        ar & age;
        ar & pi;
    }
 
 
};
 
 
int main(){
 
    tst T("Tab", 31, 3.1415);
    tst* pT = new tst("Bat", 13, 2.5);
 
    ofstream output("output.txt", ios::binary);
 
    boost::archive::text_oarchive oa(output);
    oa << T;
    output.close();
 
    ifstream input("output.txt", ios::binary);
    boost::archive::text_iarchive ia(input);
 
    tst TT;
    ia >> TT;
 
    cout << TT.Name << endl;
    cout << TT.age << endl;
    cout << TT.pi << endl;
 
    ofstream pout("pout.txt", ios::binary);
    boost::archive::text_oarchive poa(pout);
    poa << pT;
    pout.close();
 
    ifstream pin("pout.txt", ios::binary);
    boost::archive::text_iarchive pia(pin);
 
    tst* pTT;
    pia >> pTT;
 
    cout << pTT->Name << endl;
    cout << pTT->age << endl;
    cout << pTT->pi << endl;
 
    return 0;
}
cs


다음으로 위의 작성된 코드를 컴파일합니다.


g++ class_fileio.cc -lboost_serialization


 실행하면 다음과 같은 결과를 확인하실 수 있습니다.



 결과를 보면 알 수 있듯이 Class의 값이 포인터인 경우에도 동작이 잘 수행되고 있음을 직접 확인하실 수 있습니다. 이제 자신이 만든 클래스로도 stream을 통해 전송할 수 있음을 확인할 수 있습니다!



Ubuntu에서 Chrome 실행할 때 마다 Keyring을 묻는 팝업창이 나타날 때 해결방법

공대생의 팁 2018.10.19 10:34


 평소 문제 없이 써오던 중 설정을 다시 하기 위해 우분투를 다시 설치한 후 크롬을 실행하였는데 다음과 같은 팝업창이 크롬을 처음 실행할 때 마다 나타나고 있었다.



  이 현상은 우분투를 자동로그인으로 설정하였을 때 나타나는 현상으로 우분투를 비밀번호를 입력하는 식으로 설정하면 위의 팝업창이 나타나는 현상을 해결할 수 있다.


 만약 우분투의 자동로그인 설정을 유지하고 싶다면 gnome-keyring을 제거해준다.


$ sudo apt remove gnome-keyring


  • KKH 2019.09.06 12:25 ADDR 수정/삭제 답글

    지우니까 우분투가 그래피컬 모드로 안되고 multi-user 모드로만 되네요;; remove 했어서 install 해도 똑같이 떠요 ㄷㄷ..

  • 문제있음 2019.10.30 13:51 ADDR 수정/삭제 답글

    ubuntu 18.04 에서 pkcs#7 signature not signed with a trusted key 에러 나면서 부팅 안됩니다. 하지마세요

    문제시
    https://greedywyatt.tistory.com/122

Compiling OpenCV without QT (QT 설정을 제외하고 OpenCV 컴파일 방법)

공대생의 팁 2018.10.11 21:14


 Recently there was a big problem while using LSD SLAM as ROS. When I installed LSD SLAM with ROS Kinetic, 'DebugWindow DEPTH' is not reponding with no image. I found that you must install the OpenCV library separately.


 First, download the latest version of OpenCV.


$ wget https://github.com/opencv/opencv/archive/3.4.3.zip


 Second, unzip the downloaded file.


$ unzip 3.4.3.zip


 Third, download and install cmake-gui


$ sudo apt install cmake-qt-gut


 After that, make a build folder and Prepare to use cmake-gui.


$ cd opencv-3.4.3

$ mkdir build

$ cd build

$ cmake-gui ../


 If you proceed as far as this, you will see the following screen.



 Now click the "Generate" button.



Then you can see the result above. Please uncheck "WITH_QT" and click "Generate" again. Then you finish the work.

 Finally compile and install your program!


$ make -j4 && sudo make install