Golang Logrus Hook을 이용한 mutisink 로깅

Logrus? golang에서 사용하는 대표적인 logging 패키지인 logrus는 stdout, stderr등 다양한 output 및 커스터마이징이 가능한 formatter등 구조화된 로깅을 지원한다. 구조화된(structured) 로깅? 로그를 단순한 텍스트의 연속이 아닌 특정 데이터 세트(날짜, 사용자, 각종 필드)로 처리할 수 있도록 특정한 메시지 포맷을 구현하는 방식이다. 기본 사용법 간단하게 콘솔창에 로그를 찍는 예제는 다음과 같다 package main import ( "os" "time" log "github.com/sirupsen/logrus" ) func main() { log.SetOutput(os.Stdout) log.SetFormatter(&log.TextFormatter{ FullTimestamp: true, TimestampFormat: time.RFC822, }) log.SetLevel(log.InfoLevel) log.Info("Info message") log....

June 7, 2022 · 4 min · 730 words · ralpioxxcs

카메라 캘리브레이션 - 좌표변환

좌표 정규화 투영 카메라 parameter를 알고 있다고 가정하고, normalized 좌표는 다음 계산식을 통해 영상 좌표로 변환된다. $$ x_{img} = x_{norm}*f_x + c_x \newline y_{img} = y_{norm}*f_y + c_y $$ 반대로, 식을 바꿔 image plane 좌표 또한 normalized 좌표로 변환될 수 있다. $$ x_{norm} = (x_{img}-c_x)/f_x \newline y_{norm} = (y_{img}-c_y)/f_y $$ fx, fy는 focal length, 초점거리, cx,cy는 principal point 즉, 주점이라고 부른다. 이 요소들을 3x3 행렬로 만든것을 camera matrix 혹은 intrinsic paramter라고 한다....

April 5, 2022 · 3 min · 434 words · ralpioxxcs

카메라 캘리브레이션 - 좌표계

카메라 캘리브레이션 3차원의 장면이 카메라를 통해 2차원의 평면으로 구현될 때, 각각의 3차원 상의 점들은 카메라의 위치, 방향 같은 기하학적인 요소와 이미지 센서의 초점 거리, 렌즈의 왜곡 등 여러 내부적인 요소(parameters) 들에 의해 결정된다. 이 내부 요소들을 통해 렌즈의 왜곡, 3D상의 물체에 대한 크기 및 면적, 카메라의 위치등을 계산할 수 있으며, 이 값들을 구하는 과정을 카메라 캘리브레이션 이라고 부른다. 좌표계 좌표계 카메라 캘리브레이션에서는 주로 4가지의 좌표계가 사용된다 월드 좌표계 (3D) 픽셀 좌표계 정규 좌표계 카메라 좌표계 월드 좌표계 사물의 위치를 나타내는 좌표계로 3차원(X,Y,Z)을 사용하는 좌표계이다....

April 5, 2022 · 2 min · 237 words · ralpioxxcs

C/C++ <-> Go 콜백함수 구현하기

Cgo Cgo는 Go에서 C언어를 사용할 수 있게해주는 Go의 feature중 하나이다. 이 기능을 이용해 C언어와 Go언어사이의 콜백함수를 만들어 볼 것이다. 주의할 점은 Cgo에서 읽을 수 있는것은 C스타일의 심볼을 갖는 함수 뿐이다. 순수 C언어로만 작성된 라이브러리라면 문제가 없겠지만 C++ 베이스의 함수를 이용하고 싶기 때문에 해당 함수를 한번 wrapping해주는 형태로 만들어 볼 것이다 기본 사용법 함수를 wrapping 해보기 전, 기본적인 사용법을 다시 보자 package main /* #include <stdio.h> void CFoo() { printf("Hello from C\n"); } */ import "C" import "fmt" func main() { fmt....

November 22, 2021 · 3 min · 496 words · ralpioxxcs

쉘 스크립트 삽질

배경 최근에 간단한 쉘 스크립트 하나를 짜면서 겪은 문제가 하나 있다. ssh로 연결된 특정 보드의 이더넷 네트워크 인터페이스의 설정을 변경해주는 작업이었다. 적용할 보드가 한두개가 아니라서 해당 작업을 간편하게 하기위해서 HOST(노트북)에서 해당 작업을 수행하는 스크립트를 실행시키면 ssh를 통해 보드내 설정을 바꿔주도록 했다. 딱히 어려울것 없는 작업이라 sshpass, scp, ssh, sed 명령어 조합을 사용하였다. 로컬 터미널에서 위의 명령어들을 쓰면서 잘 바뀌는것을 확인했고 그 로직을 그대로 쉘 스크립트를 작성하였다… 하지만 문제는 로컬 터미널에서만 테스트 한 점이었다....

September 27, 2021 · 2 min · 287 words · ralpioxxcs