2017의 게시물 표시

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

[IoTivity, #1] OCF 표준을 따르는 소프트웨어 플랫폼인 IoTivity 란?

이미지
1. IoTivity란? IoTivity는 끊김없이 장치 간 연결을 가능하게 하여 사물(Thing)의 인터넷에 대해 새로운 요구들을 해결하는 개방형 소스 소프트웨어 프레임 워크이다.
2. IoTivity 2.1. IoTivity 초기화 및 설정 아래 내용은 https://wiki.iotivity.org/initialize_setting 내용을 바탕으로 작성되어 있으며, 개발자 측면에서 개인적인 의견과 작업 내용을 추가 했다.
Resource API 스택은 여러 개의 얇은 소프트웨어 레이어로 구성됩니다. Android, iOS 또는 Microsoft Windows와 같은 자유로운 환경에서 IoTivity 스텍은 개발자에게 C 및 C ++ API를 제공하므로 개발자는 이를 사용하여 추가적인 네트워크 프로토콜 및 무선 기술기반의  IP 네트워크  통해 제한된 장치 또는 제한되지 않은 장치 모두와 대화 할 수 있다.
IoTivity 아키텍처 의 기본 개요는 다음과 같다.


다음 그림은 OS 스텍이 C 또는 C++ 함수을 사용하여 다른 레벨로 접근할 수 있는 것을 보여준다.

C++ SDK : OCPlatform::ConfigureC SDK : OCInit



1) Setup 먼저 IoTivity를 개발할  OS에 빌드가 되지 않았다면, 아래 가이드를 참고하기 전에 먼저 빌드가 필요하다.

2) C SDK IoTivity의 기본 레이어는 C 라이브러리이다.

Example
초기화를 위해 기본 예제는 다음 소스를 참고한다.
iotivity/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp
Source Code
이 코드가 C++로 작성되었다 하더라고, 여기서는 C API를 호출하고, 초기화보다 더 많은 것을 진행하지만, 이 예제에서는 몇 개의 OC 함수들만 설명할 것이다.

a) API

필요한 함수들의 목록이다.

함수 위치 --> iotivity/resource/csdk/stack/include/ocstack.h:

OC…

Git 저장소를 병합하는 방법(How to merge repositories in Git)

GIT 저장소를 다른 저장소에 병합하는 방법 Git? Git은 컴퓨터 파일의 변경 내용을 추적하고 여러 사람들일 공유하는 파일에 대해 협업할 수 있도록 파일의 변경을 제어하는 버전 제어 시스템이다. 기존에 CVS, SVN 등 다양한 버전 제어 시스템들이 나왔지만, 최근에는 Git으로 통일되는 것 같다. Git은 분산 리비전(개정) 관리 시스템으로서 속도, 데이터 무결성 및 분산 된 비선형 작업 진행을 지원하는 것이 목표이다. 
Git은 Linux 커널 개발을 위해 2005년 리누스 토발즈(Linus Torvalds)가 개발 되었으며, 다른 커널 개발자들도 초기 개발에 기여했다.
대부분의 다른 분산 버전 제어 시스템과 마찬가지로 Client-Server 버전 제어 시스템과는 다르게 중앙 서버와 관계없이 모든 컴퓨터의 Git 디렉토리는 파일 변경 이력(버전)을 추적할 수 있는 분산형 저장소이다.
Client-Server 버전 제어 시스템으로 많이 사용했던 SVN(Subversion)은 네트워크 연결이 안될 경우 독립적인 위치에서 동시에 개발이 진행될 때 코드 병합과 이력 관리에 많은 어려움이 있었다. Git은 이런 기본적인 문제점들을 해결하면서 보다 진보적인 방법들을 제공한다. 
인터넷 검색을 통해 보다 세부적인 내용과 더불어 다양한 기능들에 대해 찾아 보기 바란다.
서로 다른 저장소를 한 곳에 병합하는 방법 프로젝트 특성에 따라 한 개 이상의 저장소들에서 개발이 진행되다가 저장소의 병합이 필요할 때가 있다. 특정 디렉토리를 생성하여 복사해서 추가하면 되겠지만, 이련 경우에는 기존 저장소의 수정 이력(버전) 정보는 포기해야 한다. 
쉽게 기존 저장소의 수정 이력 정보를 포함하여 저장소를 병합하는 방법이 있다.
우선 다음과 같이 세 개의 저장소가 있다고 가정한다.
git/project1git/project2git/project3
project2와 project3를 project1에 병합하는 방법은 다음과 같다.
사전 고려사항저장소가 병합되면 디렉토리 위치에 따라 …

머신러닝(Machine Learning, 기계학습)과 딥러닝(Deep Learning, 심층학습)의 차이는 뭘까?

AI(Artificial Intelligence, 인공지능)에 대한 관심이 높아지면서 머신러닝(Machine Learning, 기계학습)과 딥러닝(Deep Learning, 심층학습) 차이가 무엇인지 궁금해졌다.
1. 머신러닝(Machine Learning) 머신러닝에 대해 위키피디아의 정의를 보면 다음과 같다.

Machine learning is the subfield of computer science that, according to Arthur Samuel in 1959, gives "computers the ability to learn without being explicitly programmed."

번역) 머신러닝은 아서 사무엘(Arthur Samuel)이 1959년에 언급한 '명시적으로 프로그래밍 된 것 없이 배울 수 있는 능력을 컴퓨터가 갖게 하는 컴퓨터 과학의 하위 분야이다.

참고로 아서 사무엘은 머신러닝을 "기계가 일일이 코드로 명시하지 않은 동작을 데이터로부터 학습하여 실행할 수 있도록 하는 알고리즘을 개발하는 연구 분야"라고 정의하였다.

2. 딥러닝(Deep Learning) 딥러닝에 대해 위키피디아의 정의를 보면 다음과 같다.
Deep learning (also known as deep structured learning or hierarchical learning) is the application of artificial neural networks (ANNs) to learning tasks that contain more than one hidden layer.
번역) 심층학습(심층구조학습 또는 계층적 학습이라고도 알려져 있음)은 하나 이상의 숨겨진 계층을 포함하는 학습 작업들에 인공 신경망(ANN)을 적용하는 것이다.
달리 표현해보면 큰 틀에서 사람의 사고방식을 컴퓨터에게 가르치는 머신러닝의 한 분야라고 할 수 있다.
주요 연구 결과로는 2012년 스탠포드대학의 앤드류 응과 구글이 함…

Visual Studio 2017 설치 후 IoTivity 빌드 방법

최근 Github에서 개인 프로젝트로 진행 중인 IoT Platform인 Luna 에 Public Cloud 연동과 AI 기능을 추가하여 기능을 확장 중이다. 그리고 Embedded 개발자들이 쉽게 IoT Device를 개발할 수 있도록 도움을 주고 싶어 OCF 표준을 따르는 IoTivity 역시 Luna에 추가 중이라 Linux, macOS 및 Windows 환경에서 빌드 및 시험하고 있다.

IoTivity는 x86 Linux와 Raspberry Pi3에서는 쉽게 빌드하고 간단하게 시험 후 IoTivity 분석을 위해 Visual Studio 2017 환경에서 IoTivity 빌드를 시도 했는데 생각보다 쉽지가 않았다.

처음에는 VS2017 직접 솔류션 파일과 프로젝트 파일을 만들기도 했지만, 짧은 시간에 끝내기가 힘들어 우선 IoTivity Wiki에 있는 빌드 가이드를 따르기로 했다.

IoTivity Wiki를 통해 빌드 가이드 정보를 얻을 수 있지만 나름 시간을 투자해야 성공할 수 있었다. 그래서 VS2017 환경에서 다양한 시도를 통해 IoTivity 빌드를 성공하여 그 경험을 공유한다.

참고자료들IoTivity Wiki: How to Build IoTivityIoTivity Wiki: Windows Build InstructionsOCF란?
준비사항Visual Studio 2017 설치Visual C++ 2015 Build Tools 설치Github에서 IoTivity 클론 및 일부 파일 형식 변환Python27(32비트), Scons 및 7-Zip 설 1. VS2017 설치 먼저 Visual Studio 2017를 설치한다. IoTivity Wiki에서는 VS2015 기반으로 빌드 방법을 안내하고 있지만, 새로운 툴을 사용해야 개발자라는 느낌을 가질 수 있어서.. VS2017를 준비한다. ^^
2. Visual C++ 2015 Build Tools 설치 IoTivity Wiki에서는 VS2017 설치 때 옵션을 vs140 을 주면 된다고 하지만,…

HW 문제가 있는 MacBook Pro에 대한 애플 AS 정책의 아쉬움

HW 문제가 있는 MacBook Pro에 대한 애플 AS 정책의 아쉬움
2012년8월에 구입한 MacBook Pro는 다음과 같은 HW 문제가 있었고, 2016년부터 가끔 현상이 있었지만, macOS가 바뀌는 시점이라서 드라이버 이슈로 생각했습니다. 하지만 최근 2017년 3월부터 현상이 지속적으로 나타나서 이슈를 찾아보니 HW 불량으로 무상 수리 프로그램 대상이었지만, 2016년 12월 이내 또는 구입한지 4년 이내라는 AS 기간이 지나서 80만원 이상을 지불하고 유상 수리를 받아야 합니다.
애플은 온라인에서 제품을 판매할 때 Apple ID로 판매합니다. 그리고 거의 모든 제품들을 처음 설치할 때는 Apple ID 를 만들거나 기존 Apple ID을 사용하기 있어서 모든 제품은 애플의 iCloud에서 관리됩니다. 따라서 이런 문제가 있는 제품들은 제품 구매자들에게 개별 메일 통보가 가능합니다.
따라서 제품에 문제가 있을 때는 사전에 고객에게 문제점들을 미리 공지하여 수리를 받도록 할 필요가 있을 것 같습니다. 하지만 ‘극소수’의 제품이라는 조건을 걸어 고가의 제품임에도 불구하고 메일 또는 메시지 통보를 하지 않은 애플 정책이 아쉬웠습니다. 
아래 글을 잘 읽으시고 만일 같은 제품을 가지고 있는 분들은 구입한지 4년 이내에 꼭 수리를 받기 바랍니다. 또한 기존에 수리를 하셨다면 환불 처리를 받기 바랍니다. 저는 계속 이 문제를 가지고 애플과 이야기 할 생각입니다.
1. 비디오 문제에 대한 MacBook Pro 수리 확대 프로그램 이란? 아래 내용은 애플에 제공하는 '비디오 문제에 대한 MacBook Pro 수리 확대 프로그램' 내용을 일부만 정리했습니다. 자세한 정보는 https://www.apple.com/kr/support/macbookpro-videoissues/ 에서 참고하세요. 1.1. 개요Apple은 극소수의 MacBook Pro 시스템에서 비디오가 왜곡되거나, 나오지 않거나, 예기치 않게 시스템이 재시동되는 문제가 나타날 수 있음을 확인했습…