C:\opencv\build\x64\vc15\bin을 시스템 변수 Path에 추가해줍니다.
여기서 Visual studio가 2017보다 구버전이면 vc14로 변경하여 추가해줍니다.
이제 환경변수 등록도 끝났으니 Visual Studio로 가봅시다~
프로젝트를 하나 생성해주시고
디버그 옵션은 64비트로 변경!
소스파일에 test.cpp를 추가해줍니다.
현재 상황!
이제 프로젝트 속성을 변경해줍니다.
구성 모든 구성으로 하시고 C/C++ 일반에 추가 포함 디렉터리에 C:\opencv\build\include를 입력해주세요
마찬가지로 모든 구성에서 링커 일반에 추가 라이브러리 디렉터리에 C:\opencv\build\x64\vc15\lib를 입력해주세요
구성을 Debug로 바꾸고 opencv_world430d.lib를 입력해주세요.
구성을 Release로 바꾸고 opencv_world430.lib를 입력해주세요.
그러면 OpenCV가 잘 설치되었는지 Test코드를 실행해보겠습니다.
웹캠 영상을 출력하는 코드에요!
/**
@file videocapture_basic.cpp
@brief A very basic sample for using VideoCapture and VideoWriter
@author PkLab.net
@date Aug 24, 2016
*/
#include <opencv2\opencv.hpp>
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;
int main(int, char**)
{
Mat frame;
//--- INITIALIZE VIDEOCAPTURE
VideoCapture cap;
// open the default camera using default API
cap.open(0);
// OR advance usage: select any API backend
int deviceID = 0; // 0 = open default camera
int apiID = cv::CAP_ANY; // 0 = autodetect default API
// open selected camera using selected API
cap.open(deviceID + apiID);
// check if we succeeded
if (!cap.isOpened()) {
cerr << "ERROR! Unable to open camera\n";
return -1;
}
//--- GRAB AND WRITE LOOP
cout << "Start grabbing" << endl
<< "Press any key to terminate" << endl;
for (;;)
{
// wait for a new frame from camera and store it into 'frame'
cap.read(frame);
// check if we succeeded
if (frame.empty()) {
cerr << "ERROR! blank frame grabbed\n";
break;
}
// show live and wait for a key with timeout long enough to show images
imshow("Live", frame);
if (waitKey(5) >= 0)
break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
그리고 F5를 눌러 실행시켜줍니다.
바로 잘 되면 성공!
하지만 opencv_world.dll 오류 경고가 뜬다면 다음과 같이 해결해주시면 됩니다.
프로젝트 폴더에
C:\opencv\build\x64\vc15\bin에 있는 opencv_world430.dll, opencv_world430d.dll 파일을 넣어줍니다.
스크럼의 목적은 사소한 반칙이나 정지 후에 빠르고, 안전하게 그리고 공정하게 플레이를 재개하기 위한 것이다. 각 팀에서 8명의 선수들이 세 줄로 서로 바인드하고, 상대측과 밀착하여 각 팀의 프론트 로의 머리가 서로 엇갈리도록 형성하는 것이다. 이와같이 하면 스크럼 하프가 볼을 투입할 수 있는 터널이 만들어져 프론트로 선수들이 그들의 두 발 중 하나로 후킹함으로서 볼 소유를 위해 경쟁할 수 있게 된다.
데브옵스란 소프트웨어의 개발(Development)과 운영(Operations)의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다. 데브옵스는 소프트웨어 개발조직과 운영조직간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다.
목적
- 제품 출시까지 걸리는 기간 단축
- 새로운 판의 더 낮은 실패율
- 픽스 간 짧아진 리드타임
- 복구 시 더 빠른 평균 시간
툴체인 : 코드, 빌드, 테스트, 패키지, 릴리즈, 구성, 모니터링
//이상 위키백과
장점
- 속도 : 작업속도 향상
- 신속한 제공 : 릴리즈 속도 향샹
- 안정성 : 품질 향상
- 확장 가능 : 자동화에 따른 시스템 효율적 관리
- 협업 강화
- 보안
데브옵스의 키워드는 빠름
소규모 업데이트를 자주 수행하여 고객요구를 빠르게 수용
또한 각 배포의 위험성을 낮추고 변화가 작아져 복합도 감소 -> 릴리즈 실패 확률 감소
마이크로 서비스 아키텍쳐를 통한 유연성과 혁신속도 향상 (대규모의 시스템을 간단하고 독립적 결합, 해제)
개발팀과 운영팀의 소통이 원활하지 않는 회사에서는 DevOps의 장점과 원리만 이해하고 적용하려 노력하면
장기적으로 큰 발전이 될듯
여기서 유의할 점은 개발팀이나 운영팀에게 업무가 가중되는 느낌이 들면 실패하는 데브옵스 적용
JTAG(Joint Test Action Group)으로 디지털 회로에서 특정 노드의 디지털 입출력을 위해 직렬 통신 방식으로 출력 데이터를 전송하거나 입력데이터를 수신하는 방식을 말함. IEEE 1149.1 표준임, 회로 설계에 따라 디지털 회로의 내부로 저송하거나 핀의 외부로 데이터를 출력할 수도 있고 상태를 읽을 수도 있음
임베디드시스템 개발 시에는 디버깅 장비가 대표적인 활용 예임, CPU의 기계어 코드를 실행하지 않고 MCU 내부의 플래시 메모리나 임베디드 장치에서 CPU의 외부 플래시 메모리에 코드를 쓰거나 읽을 수 있음
또한 디버거가 CPU 동작과 연동하여 특정 기계어 코드 위치에서 멈추고 상태를 읽어 내부의 상태를 알 수 있음
JTAG의 작동 방식은 칩 내부에 Boundary Cell을 만들어 이것이 외부의 핀과 일대 일로 연결되어 프로세서가 할 수 있는 동작을 중간의 Cell을 통해 인위적으로 수행할 수 있도록 하는 것임
인터페이스
1. TDI(데이터 입력) : Test 하기 위한 신호
2. TDO(데이터 출력) : Test 한 결과를 외부에서 모니터링 하기 위한 Pin
3. TCK(클럭)
4. TMS(모드) : Test 모드로 전환하기 위한 제어 신호
5. TRST(리셋)
-위키 백과
자 정리하자면 제품을 만들때 제품이 잘 동작하는지 테스트를 해야합니다.
그러면 핀 마다 잘 동작을 확인을 해야하는데 핀이 너무 작고, 숨어 있을 수 있기 때문에
이걸 표준으로 만들어 테스트하기 용이하게 만들어 놓은걸 JTAG이라고 합니다.
그리고 JTAG는 임베디드 시스템의 MCU 자체를 테스트 한다기 보단 보드 자체를 테스트 한다고 보시면 됩니다.
해당 핀에 신호가 잘 들어가는데 왜 동작이 이상한지, 아니면 코드에 문제가 있는지 등등을 확인할 수 있습니다.
또한 JTAG은 하드웨어 디버거에 속합니다. 개발자가 직접 CPU를 조절하며 디버깅이 가능하죠.
쉽게 말하자면 if문 안에 printf("if"); 같이 하여 확인하는 것이 소프트웨어 디버깅
실행, Break를 통해서 특정 변수의 값, Memory에 값이 잘 쓰였는지 확인하는 것이 하드웨어 디버깅입니다.
또한 JTAG를 통해 플래시 다운로드가 가능합니다.
Hex파일이나 Elf파일을 MCU에 다운로드가 가능합니다.
Boundary Scan에 대해서는 아직 잘 모르니 잘 설명해놓은 블로그 링크를 걸어두겠습니다.