no image
윈도우10 Qt6/ Qt Creator13/ Opencv4.9 연동, 설정
Window Qt6 OpenCV 연동 cv2 연동 확인용으로, 별도의 빌드 없이 windows를 다운로드하고 extract 해준다. 윈도우는 시스템 환경 변수 path에 dll 폴더 위치를 넣는다. C:\Users\~~\opencv\build\x64\vc16\bin 환경 변수가 잘 들어갔는지 opencv_version을 입력해 확인한다. Qt를 설치할 때, 여러 옵션이 있는데 for desktop dev를 고르면 오른쪽과 같이 체크가 되는 듯하다. Custom으로 설치해도 무관한데 윈도우의 경우 MSVC 옵션들을 선택해 주자. Qt Creator(윈도우) 에서 MinGW(gcc/g++) 컴파일러로 cv2를 사용하려면 cv2를 MinGW로 빌드해줘야 한다. Qt creator에서 New Project를 만..
2024.04.15
no image
Segmentation/Detection 방법
Semantic Segmentation classification 신경망에서 FC layer 대신에 Fully Convolution을 거친다. Fully Convolution으로 마무리하면 위치 정보를 그대로 가지고 있고 입력 크기가 자유로워진다. (fc layer는 이전 레이어의 모든 뉴런과 연결되어 있고, 입력 size가 변경되면 가중치 수도 변경되기 때문에, 입력 size가 고정되어 있다.) 결과적으로 위치 정보를 가진 채로 classification을 할 수 있고, 해당하는 픽셀 영역에 어떤 물체가 있는지 알 수 있다. 다만, Conv을 거치면서 spatial dimension이 줄어들었기 때문에, 다시 늘려주기 위한 deconvolution, unpooling 등의 upsample 과정을 거친다..
2024.04.13
no image
c++ inline compile
클래스 정의에서 함수의 정의는 컴파일된 이후에 링커에 의해 하나의 실행파일로 묶이기만 하면 된다. //Car.h #ifndef __Car_h__ #define __Car_h__ class Car { private: int fuelGauge; public: void getFuelGauge(); void setFuelGauge(int fuel); }; #endif //Car.cpp #include "Car.h" #include inline void Car::getFuelGauge() { printf("now fuel : %d", this->fuelGauge); } inline void Car::setFuelGauge(int fuel) { this->fuelGauge = fuel; } //Main.cpp #i..
2024.04.08
no image
프로그래머스 21kakao_blind 순위검색(python)
https://school.programmers.co.kr/learn/courses/30/lessons/72412 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr from bisect import bisect_left def solution(info, query): a = {"java":"0", "cpp":"1", "python":"2"} b = {"backend":"0", "frontend":"1"} c = {"junior":"0", "senior":"1"} d = {"chicken":"0", "pizza":"1"} results = [] for i in..
2024.03.28
no image
열혈 C++ 프로그래밍) Part 1
C++은 함수 호출 시 매개변수 자료형이 안 맞아도 에러를 던지지 않고(경고만 함) 자동 형변환 되고 데이터 손실이 난다. 인라인 함수 inline int add(int a, int b) { return a + b; } inline 키워드를 사용해 함수를 정의할 수 있다. inline 키워드를 사용하면 해당 함수가 호출되는 대신 컴파일러가 해당 함수의 코드를 호출 지점에 직접 삽입하려고 시도한다. 이로 인해 호출 오버헤드가 제거되어 실행 시간을 단축할 수 있다. 하지만 코드 크기가 증가한다 그리고 컴파일러에게 인라인으로 처리하도록 제안하는 것으로 수용하지 않을 수도 있다. 매크로 함수 #define SQUARE(x) ((x) * (x)) ... void main(void) { cout
2024.03.04
no image
라플라스 변환, 전달 함수, 특성 방정식, DC gain
Convolution Convolution의 정의는 total 통증이다. Laplace transform final value theorem, 라플라스 변환/역변환 transfer function(전달 함수) 실제 장비로 정교한 임펄스 function을 만드는 건 어렵기에 임펄스 응답을 라플라스 하는 것은 어렵다. 그래서 전달 함수는 출력/입력으로 정의하는게 낫다. G(s) = Y(s)/U(s) 시간 도메인에서 y(t) 시간 도메인에서 y(t)는 라플라스 역변환을 이용하는 것이 간편하다. characteristic function (특성 방정식), DC gain
2024.03.01
no image
Shift Register - 74HC595
Shift Register FND(Flexible Numeric Display)를 다룬다고 가정해 보자. 한 자리 숫자만을 출력해도 8개의 핀이 필요하다. 이런 경우 시프트 레지스터를 활용하여 하나의 핀으로 8개의 output을 제어할 수 있다. (약간의 delay는 생긴다.) 74HC595 Q0 ~ Q7 : parallel output pins of register DS : Serial data input pin SHCP : shift register clock pin STCP : storage register(Latch) clock pin OE : output enable, Latch의 출력을 끌 수 있다. MR : master re-clear, 시프트 레지스터를 reset 할 수 있다. Shift ..
2024.02.19
no image
아두이노 DAC, PWM
Digital-to-Analog Converter (DAC) 아두이노는 DAC기능이 없어 연속적인 아날로그 값을 만들 순 없지만 PWM을 이용해 비슷한 기능을 할 수 있다. (UNO R4는 있는 듯) Pulse Width Modulation (PWM) LED 밝기 조절을 예시로 살펴보자. 어떻게 전압의 펄스 폭 조절이 밝기에 변화를 줄 수 있을까? => 펄스의 주기는 매우 빠르기 때문에 사람 눈으로 본다면 펄스 폭이 50%인 것은 밝기가 50%인 것과 같게 보인다. 아두이노의 AnalogWriteMega.ino example을 실행시켜보자. const int lowestPin = 4; const int highestPin = 6; void setup() { // set pins 2 through 13 a..
2024.02.18
no image
I2C Communication
Inter-Integrated circuit communication I, 2개를 따서 I2C 통신이라 부른다. 일대다 통신이 가능하다. 하나의 Master node와 여러 개의 Slave node 가 있다. Two-pin protocol SDA (Serial data): data transmission SCL (Seerial clock): clock transmission = 동기를 맞추는 역할을 한다. 위의 2개의 핀으로 통신한다. Timing diagram Free state - SCL과 SDA 둘 다 HIGH인 상태로 시작한다. Start condition - SDA가 LOW가 되면 Slave node 들은 데이터를 수신할 준비가 된다. I2C는 일대다 통신으로 Master가 통신할 slave n..
2024.02.17