728x90

Framework 21

[OpenCV] 안드로이드에서 속도 개선해보기

최근에 안드로이드와 iOS에서 openCV를 사용할 일이 생겼다. 환경설정까지는 다른 분께서 해주셔서 큰 신경 쓰지 않고, 바뀐 언어 환경에서 같은 로직을 적용해본 결과 생각보다 느렸다. 오랜만에 급하게 하다가 깜빡한 게 생각나서 기록하는 겸, 왜 느려졌는지 그 이유와 개선방법에 대해서 적어보려고 한다. 먼저 로직을 간단하게 적어보자면 이렇다. - 이미지를 받아온다. - ROI 관심영역을 추출한다. - 추출한 영역 내에서 픽셀마다 값을 변경한다. - 변경된 이미지를 내보낸다. openCV를 써본 사람이면 아주 쉽게 접하는 일이다. 안드로이드에서 간단하게 예시를 보여주자면 이렇다. val src = Mat() //grayScale 이라고 가정 val dest = Mat() for(rowIdx: Int in..

Framework/OpenCV 2023.09.21

[3D LUT] 에 대해 이해한 내용 적어보기

최근에 이미지 보정 관련하여 일이 있어서 조사해보던 중에 LUT 에 대해 알게 되었고, 궁금했던 부분과 공부한 내용에 대해 짧게 적어보려고 한다. 내가 궁금했던 내용들은 이렇다. LUT가 뭐지?? 3차원의 RGB 픽셀을 어떻게 LUT를 적용시키는지, 적용 방법 3D Cube 파일 LUT 적용 방법 CUBE 파일의 LUT_SIZE는 왜 홀수인지?? LUT(Look Up Table)가 뭐지? LUT는 Look Up Table의 약자이다. LUT는 말 그대로 룩업 테이블, 찾아 보는 테이블이라는 뜻으로 엑셀에서의 LOOKUP 함수를 안다면 이해하기 쉬운데, 더 이해하기 쉽게 이미지를 가져왔다. 그림을 참고해서 왼쪽의 테이블(Table)이 제공된 상황에서는 A07이라는 부품을 알기 위해선 찾아보기만 하면(Loo..

Framework/OpenCV 2023.08.14

[Nestjs] JWT 비대칭 토큰 발급하기

상황 여러 어플리케이션에서 권한 별로 편리하게 운영하기 위해, MSA 구조로 인증 서버를 분리하여 어플리케이션 별로 운영할 수 있도록 만드는 작업이 필요했다. 기존에는 인증 서버에서 토큰 발급에 필요한 SECRET KEY와 어플리케이션에서의 토큰 인증하는 SECRET KEY가 같아 보안적으로 이슈가 있을 것으로 생각되었다. 따라서 인증 서버와 어플리케이션의 키를 분리할 필요가 있다고 생각했고, 자연스럽게 비대칭 키 도입을 해보게 됐다. 추가로 JWT 토큰과 관련된 내용은 이미 많은 블로그에서 포스팅되었지만, 비대칭 키를 이용해 인증하는 방법은 많이 보지 못해 내 나름대로의 이해를 붙여서 글을 쓰게 되었다. 내가 생각하는 인증 서버의 절차는 아래와 같다. 유저가 인증 서버를 통해 로그인한다. 인증 서버는 ..

Framework/Nestjs 2023.08.01

[indices:admin/auto_create] is unauthorized for user

원인 https://github.com/deviantony/docker-elk 를 기반으로 사용하던 중에, 나의 경우는 logstash에서 새로운 index에 만들어넣도록 하였더니 이런 에러가 발생하였다. 해결방법 Github에서 받은 logstash의 경우 logstash-internal 이라는 유저가 등록되는데, 해당 logstash의 Role을 확인해보면 내가 생성한 index가 등록되지 않아서 생기는 문제로, 사용하고자 하는 인덱스를 추가하면 된다.

Framework/ELK Stack 2022.08.05

[IoT] Serial 통신에 대한 이해 및 주의 사항

시리얼 통신이란? 컴퓨터 과학에서 직렬(Serial) 통신은 병렬(Parallel) 통신과 대비되는 말이다. 왜냐하면 같은 데이터를 두고 전달하는 방법이 다르기 때문이다. 병렬인 경우 같은 시간에 데이터가 여러개 들어오는 반면, 직렬인 경우 같은 시간에 데이터가 1개씩 "연속적"으로 들어온다. (그래서 Serial이다) 위의 내용을 보았을 땐 당연하게 병렬이 좋겠지만, 하드웨어 설계나 비용 등의 경제성을 고려하면 직렬 통신을 사용하는 이유로 이어지게 되는데, 이런 이유로 IoT 분야에서는 직렬 통신을 더 애용하는 것 같다. 직렬 통신의 장점으로는 경제성이 있겠지만, 프로그래밍하는 입장에서는 데이터가 순차적으로 들어오는만큼 데이터에 대해 정해져있지 않으면 어디가 데이터의 시작이고 어디가 끝인지 알 수가 없..

[IOT] MQTT(Message Queue Telemetry Transport)란?

최근에 업무에서 MQTT를 도입하자는이야기가 나와 공부할 필요성을 느끼고 검색해보았다. MQTT에 대해 검색해보면 나오는 말 중 하나가 저전력이여서 좋다고 한다. 이게 프로토콜에 불과한데 왜 저전력이라는 말까지 사용되는지 이해하고자 더 공부해았고, 그 내용을 적어보려고 한다. 1. MQTT 란? MQTT는 Message Queue Telemetry Transport의 약자로, 메세지-큐 방식을 이용한다. 1) Message - Queue? Message는 사용자가 전달하고 싶은 말로, 흔히 메세지를 보낸다, 받는다 말을 할때의 메세지로 컴퓨터에서는 데이터를 메세지로 볼 수 있다. Queue(큐)는 FIFO(First Input, First Out), 선입선출, 먼저 들어온대로 나가는 구조를 말한다. 큐가..

[flask] flask-restx로 간편하게 Swagger 지원하기

1. pip install flask_restx 로 설치 2. from flask_restx import Namespace, Api, Resource 로 불러오기 3. 함수 내용을 Resource를 상속받은 객체로 변경 4. ns = Namespace('{endpoint}', description='') 로 선언 (blueprint 와 같은 기능) 4. @app -> @ns 로 변경 5. app 감싸기 app = Flask(__name__) api = Api(app) api.add_namespace(ns) app.run(host='0.0.0.0', debug=True) 6. swagger 결과 확인 기존 코드 예시 from flask import Flask app = Flask(__name__) @app..

Framework/Flask 2022.02.07

[FileBeat] Exiting: error unpacking config data: more than one namespace configured accessing 'output' 에러

원인 filebeat에서는 여러 개의 아웃풋을 가지면 안 된다. 나의 경우는 filebeat 에서 logstash와 elasticsearch를 동시에 출력으로 잡고있어서 에러가 발생했다. 해결방법 원하는 output이 어떤 곳인지 확인해보고, 하나만 출력하도록 하자. 참고 https://discuss.elastic.co/t/exiting-error-unpacking-config-data-more-than-one-namespace-configured-accessing-output-source-filebeat-yml/240640

Framework/ELK Stack 2021.12.20

[OpenCV] C++ Mat 채널 변경 (permute, transpose)

딥러닝은 보통 파이썬에서 TensorFlow나 PyTorch 라이브러리를 이용해 진행된다. 파이썬에서는 [B, C, H, W] 같은 형태로 결과물이 나오게 되지만, OpenCV C++에서는 [H, W, C] 의 형태를 지닌다. 그림에서 위는 OpenCV에서 픽셀을 인식하는 방법, 아래는 딥러닝에서의 결과로 어떻게 다른지 볼 수 있다. C++에서 딥러닝 기반의 영상처리를 진행하다 보면 [B, C, H, W] 형태의 결과를 C++ OpenCV 형식 [H, W, C]에 맞게 변경이 필요할 때도 있다. 배치 사이즈는 1이라는 가정 하에서, 채널을 변경하는 방법은 아래와 같다. model_result 라는 포인터가 모델 아웃풋을 가리키고 있다는 가정 하에 채널 덩어리를 한채널씩으로 합치면 된다. float* mo..

Framework/OpenCV 2021.12.08
728x90