AWS Cognito에 대해서 간단하게 알아 봅시다.

이미지
AWS Cognito는 User Pool과 Federated Identities 서비스를 제공한다. 이 글에서는 AWS Cognito의 개념을 이해하고, 어떻게 활용하는 것이 좋을지에 대해 간단하게 정리해 본다.
우선 AWS Cognito는 무엇을까?
AWS Cognito는 모바일과 앱 앱에 사용자 가입 및 로그인 기능을 손쉽게 제공할 수 있는 기능을 제공한다. Cognito에서는 Facebook, Twitter 또는 Amazon과 같은 소셜 자격 증명 공급자, SAML 자격 증명 솔루션 또는 자체 자격 증명 시스템을 이용하여 사용자를 인증할 수 있는 옵션을 제공한다. 
따라서 사용자 관리, 인증 및 디바이스 간 동기화를 처리하는 솔루션의 구축, 보안 및 확장을 AWS Cognito에서 제공 받음으로써 서비스 구현에 집중할 수 있게 된다.
우선 AWS Cognito에서 제공하는 두 가지 기능을 정리해보자.  User PoolAmazon Cognito의 User Pool은 개발자가 웹 및 모바일 애플리케이션에 등록 및 로그인 기능을 쉽게 추가 할 수 있게 한다. 또한 사용자 디렉토리를 유지 관리하는 고유 한 ID 공급자 역할을 한다. 사용자 로그인 및 로그인을 지원하고 로그인 한 사용자의 신원 토큰을 프로비저닝한다.Federated Identities(또는 Identity Pool, ID Pool)Cognito Federated Identities를 통해 개발자는 사용자에 대한 고유 ID를 만들고 연합 ID 공급자로 인증할 수 있다. 제휴 ID를 사용하면 임시, 제한된 권한의 AWS 자격증을 획득하여 Amazon DynamoDB, Amazon S3 및 Amazon API Gateway와 같은 다른 AWS 서비스에 안전하게 액세스 할 수 있다.

위에 정의들은 AWS Cognito 웹페이지에서 누구나 볼 수 있을 것 같은데, 문제는 뭔가 서비스를 만들려고 하면 명확하게 이해되지 않을 수 있다. 
그래서 알기 쉽게 정리해 봤다.
User Pool(사용자 풀) 새로운 …

macOS의 terminal에서 CMake 등 C/C++ 빌드가 안될 경우 해결 방법 - command line developer tools 설치

최근 macOS High Sierra를 설치 후 CMake를 사용한 C++ 프로그램 빌드가 되지 않았다.
'time.h'가 없다는 빌드 에러가 상당히 당황스러웠다.
make [ 11%] Building CXX object CMakeFiles/SmartCamera.dir/src/EnvironmentInfo.cpp.o In file included from /Users/oz/Workspace/git/smurfhome/src/smartcamera/src/EnvironmentInfo.cpp:1: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ctime:48:10: fatal error: 'time.h' file not found
원인을 찾아 보니, macOS High Sierra로 업그레이드 되면서 Xcode가 새로 설치 되었는데, 기존에 설치된 command line developer tools가 삭제되어 발생했다.

따라서 이런 빌드가 오류가 나타나면 당황하지 말고 다음과 같이 command line developer tools을 설치하면 문제가 해결 된다.

먼저 터미널창을 열고, 다음과 같이 입력한다.
$xcode-select --install 설치 화면이 표시되면  '툴 설치'를 선택한다. 설치가 완료된 후 다시 빌드를 다시 하면 된다.

참고로 command line developer tools이 설치되지 않더라도, Xcode에서 C++ 프로그램은 개발이 가능하다.

How to build FFmpeg and OpenCV on Ubuntu MATE for Raspberry Pi 3

How to build FFmpeg and OpenCV on Ubuntu MATE for Raspberry Pi 3 OpenCV is often used to handle various computer vision, such as objects, faces, or motion recognition.

In OpenCV, there are many ways to get images. Basically, you can easily get images by using the camera attached to the device, but sometimes you need to open the media file or receive the data streaming over the network.

OpenCV does not directly support various video codecs or network protocols, so FFmpeg is used in this case.

This article describes how to build OpenCV in Raspberry Pi 3 that requires FFmpeg.
The build environment is as follows. Raspberry Pi 3Ubuntu MATE for Raspberry Pi 3cmake How to build The build order is as follows. FFmpegOpenCV When you build FFmpeg you have to be careful. If your target board is 32 bits, you must add the --enable-pic option. Build FFmpegcd ~/git git clone https://github.com/FFmpeg/FFmpeg.git cd FFmpeg ./configure --enable-libfreetype --enable-gpl \ --enable-nonfree --ena…

Ubuntu MATE for Raspberry Pi 3에서 FFmpeg와 OpenCV 빌드 방법

Ubuntu MATE for Raspberry Pi 3에서 FFmpeg과 OpenCV 빌드 방법  사물, 얼굴 또는 동작 인식 등 다양한 컴퓨터 비전을 처리하기 위해 OpenCV를 많이 사용한다.
OpenCV에서는 영상을 얻는 방법이 다양하기 하다. 기본적으로 기기에 장착된 카메라를 이용해서 쉽게 영상을 얻을 수 있지만, 떄로는 미디어 파일을 열거나 네트워크 너머에서 스트리밍으로 데이터를 받을 필요가 있다. 
OpenCV는 다양한 비디오 코덱 또는 네트워크 프로토콜은 직접 지원하지 않기 때문에 이런 경우에는 FFmpeg을 사용하게 된다. 
이 글에서는 FFmpeg이 필요하는 OpenCV을 Raspberry Pi 3에서 빌드하는 방법을 설명한다. 빌드 환경은 다음과 같다. Raspberry Pi 3Ubuntu MATE for Raspberry Pi 3cmake 빌드 순서 빌드 순서는 다음과 같다. FFmpegOpenCV 빌드시 주의할 점은 만일 타케 보드가 32비트일 경우는 반드시 --enable-pic 옵션을 추가해야 한다. FFmpeg 빌드cd ~/git git clone https://github.com/FFmpeg/FFmpeg.git cd FFmpeg ./configure --enable-libfreetype --enable-gpl \ --enable-nonfree --enable-libx264 --enable-shared --enable-pic make sudo make install OpenCV 빌드 cd ~/git git clone https://github.com/opencv/opencv.git cd opencv mkdir build cd build cmake .. make sudo make install




IBM Watson을 이용한 이미지 학습 및 인식하기

이미지
IBM Watson을 이용하여 특정 이미지 학습 후 인식하기 IBM Watson을 이용하면 다양한 AI 기능들을 사용할 수 있다.

현재 Watson은 Conversation, Language Translator, Personality Insights, TTS(Text to Speech), STT(Speech to Text) 및 Visual Recognition 등이 제공된다.(IBM Watson 기능들)

이번 글에서는 이미지에서 의미를 찾을 수 있는 Visual Recognition 기능을 살펴보고, 특정 이미지들을 학습하여 인식하는 과정을 소개한다.

Watson Visual Recognition의 자세한 소개는 아래 IBM Bluemix 사이트에서 참고한다.

Visual Recognition
Visual Recognition  IBM Bluemix에서 소개된 Visual Recognition 소개는 다음과 같다. 
Visual Recognition 시각적 컨텐츠에서 의미를 찾습니다! 장면, 사물, 얼굴 및 기타 컨텐츠에 대한 이미지를 분석합니다. 제공되는 기본 모델을 선택하거나 사용자 고유의 사용자 정의 클래스류를 작성할 수 있습니다. 콜렉션 내에서 비슷한 이미지를 찾습니다. 특정 장면을 이해하기 위해 이미지나 동영상 프레임의 시각적 컨텐츠를 분석하는 스마트 애플리케이션을 개발합니다.
기능 일반 분류이미지를 설명하는 클래스 키워드를 생성합니다. 고유의 이미지를 사용하거나 분석을 위해 공개적으로 액세스 가능한 웹 페이지에서 관련 이미지 URL을 추출합니다.얼굴 감지이미지에서 얼굴을 감지합니다. 또한 이 서비스에서는 얼굴의 나이 범위 및 성별에 대한 일반적인 표시도 제공합니다.시각적 훈련고유한 사용자 정의 시각적 클래스류를 작성합니다. 이 서비스를 사용하여 일반 분류에 사용할 수 없는 사용자 정의 시각적 개념을 인식합니다.비슷한 이미지 검색(BETA)업로드 후 시각적으로 비슷한 이미지를 찾기 위해 이미지 콜렉션을 검색합니다.
Visual Recognition 사용하…

C++11 call_once()을 사용하여 thread에 안전한 singleton 구현하기

C++11 call_once()을 사용하여 thread에 안전한 singleton 구현하기 Singleton 객체를 생성하는 방법은 다양하게 있다. template을 사용하는 방법, thread을 사용하는 방법 등.. 하지만 multi-thread 상태에서 singleton을 생성할 때는 상황에 따라서 인스턴스가 두 개 이상 생성될 수 있는 등 원하지 않는 동작을 할 경우가 있다.
1. Thread을 고려하지 않은 Singleton 생성 우선 다음 코드는 Thread을 고려하지 않고 Template을 사용한 Singleton 생성 방법이다.


위 코드는 Thread를 고려하지 않기 때문에 생성때 예상하지 못하는 오류들이 발생할 수 있다.
2. call_once()기반 thread에 안전한 Singleton 생성

간단하게 알아보는 CMake 활용법

최근 C++ 빌드 툴로 CMake을 사용하고 있다. CMake는 개인적인 평가로서는 문법이 강력하고, 이해하기 쉬우며, 확장성이 높은 것 같다.

CMake에 대한 기본전인 자료들은 구글을 통해 얻을 수 있을 것이다.

이 글에서는 프로젝트를 복잡하게 구성하면서 CMake을 사용하다보면

GitHub에서 다운로드 받은 소스가 CMake을 지원할 때 어떻게 환경 변수를 연동할 것인지?경로 설정은 어떻게 할 것인지?..
등의 어려움에 맞다뜨려진다. 이런 문제점들을 하나씩 해결하는 것이다.
1. 변수 변수를 사용한다는 것은 다양한 빌드 조건들을 유연하게 대응하려는 시도이기도 하고, 이미 만들어져 있는 빌드 환경에서 내가 필요한 조건들을 지정할 때 사용할 수 있다.
1.1. 변수 정의 변수를 정의할 때 CMake에서는 SET() 함수를 사용할 수 있다. 형식은 다음과 같다. SET ( <변수명><값> )
예를 들면 다음과 같이 정의할 수 있다. SET(LUNA_SW_PLATFORM