[ROS] 얼굴인식(face recognition): Raspberry Pi + face_recognition

지난 글에서는 얼굴 탐지에 대한 기능을 구현해 보았습니다: [ROS] 얼굴탐지(face detection) 얼굴 탐지는 카메라(이미지)에서 얼굴에 해당하는 부분을 사각형 부분으로 탐지하는 기술을 말합니다. 이번 글에서는 같은 환경에서 누구인지 판별할 수 있는 얼굴 인식(face recognition) 기능을 구현해 보도록 하겠습니다. Step 1. Main Structure 얼굴 인식 기능은 연산 처리가 많기 때문에 computing resources를 많이 사용하는 기능입니다. 그래서 이번에는 cloud…

[ROS] 얼굴탐지(face detection): Raspberry Pi + libfacedetection

라즈베리파이의 카메라를 통해서 얼굴 인식을 하는 기능을 ROS로 구현해 봅시다.   Step 1. Camera Module 필자는 라즈베리파이용 카메라인 “파이카메라”를 구입하였습니다. 파이카메라는 라즈베리파이의 가운데 부분에 연결해야 합니다. 라즈베리파이 보드를 잘 보면 하얀 글씨로 “CAMERA”라고 printing 되어 있는 부분입니다.  라즈베리파이와 카메라 모듈을 안정적으로 연결하면 성공입니다. ROS에서 카메라 입력을 위하여 “uvc_camera”를 사용하였습니다.   Step 2. face detection 필자의…

[ROS] 설치하기: Raspberry Pi + Ubuntu Mate + ROS Kinetic

Start: ROS를 시작해 봅시다 재료(설치 환경)는 다음과 같습니다. Raspberry Pi 3 Model B Ubuntu Mate 16.04.2 (Xenial) ROS kinetic version ROS의 버전은, 2007년 스탠포드 대학 인공지능 연구소에서 시작된 “Switchyard”가 초기 버전이며, 그 이후 2010년 “Box Turtle”을 기점으로 알파벳 순서로 버전이 업데이트 되고 있습니다. 필자는 “Kinetic” 버전을 설치하였습니다.   공식 홈페이지에서 버전에 관한 정보를 제공하고 있습니다. (http://wiki.ros.org/Distributions)…

[C++] explicit (명시적 생성자 호출)

explicit은 명시적 생성자 호출을 위한 키워드입니다. 이를 반대로 말하면, explicit 키워드를 사용하지 않으면 암시적 생성자 호출이 이루어 진다는 이야기입니다.   아래 예제 코드를 살펴 봅시다. class A { public: A (int i) : m_i (i) {} private: int m_i; }; void printA (A a) { cout << a.m_i << endl; } int main () {…

[C++] recursive_mutex

Multi Thread 환경에서는 하나의 자원을 여러 thread가 동시에 접근할 수 있어서 그에 따른 문제가 발생할 수 있습니다. 그래서 Multi Thread 환경에서는 “상호배재”를 적용해야 합니다. “상호배재”는 Mutex를 비롯하여 여러 방법으로 적용할 수 있는데, 이전 글에서 정리해 놓았습니다. Semapore, Mutex, Spin-Lock 차이점   c++ 표준 라이브러리 에서는 recursive mutex 기능을 지원합니다. mutex는 mutex lock을 실행한 thread가 자원의…

[C++] lock_guard

c++ 에서 mutex를 lock/unlock 하는 방법은 여러 방법이 있습니다. 기본적으로 C++ 표준 라이브러리의 lock(), unlock() 함수를 호출하여 제어하는 방법이 있습니다. #include <iostream> #include <thread> #include <mutex> std::mutex mtx; void function () { mtx.lock(); std::cout << “thread lock” << ‘\n’; mtx.unlock(); } int main() { std::thread t1(function); std::thread t2(function); t1.join(); t2.join(); } 하지만, 이 경우에는 lock과…

[ROS] 설치하기: Raspberry Pi + Ubuntu Mate + ROS Lunar

Start: ROS를 시작해 봅시다 재료(설치 환경)는 다음과 같습니다. Raspberry Pi 3 Model B Ubuntu Mate 16.04.2 (Xenial) ROS lunar version ROS의 버전은, 2007년 스탠포드 대학 인공지능 연구소에서 시작된 “Switchyard”가 초기 버전이며, 그 이후 2010년 “Box Turtle”을 기점으로 알파벳 순서로 버전이 업데이트 되고 있습니다. 필자는 “Lunar” 버전을 설치하였습니다. 공식 홈페이지에서 버전에 관한 정보를 제공하고 있습니다. (http://wiki.ros.org/Distributions) 혹시…

라즈베리파이(Rasbperry pi)로 모터 제어하기 – L298N

라즈베리파이는 Model 3 B 기준으로 설명하겠다.   WiringPi 라즈베리파이에서 pin 제어를 위해서는 WiringPi 라는 라이브러리를 이용하면 편리하다. 다음은 wiringPi 설치법이다. sudo apt-get update //optional sudo apt-get upgrade //optional git clone git://git.drogon.net/wiringPi cd wiringPi git pull origin ./build   라즈베리파이는 외부 통신을 위하여 다양한 인터페이스를 가지고 있다. 이러한 인터페이스들을 wiringPi에서는 다시 매칭하고 있다. 아래는 그 내용이다….

Samsung ARTIK

라즈베리파이(Raspberry Pi) 라고 혹시 들어본적이 있는가? 아니면 아래 그림과 같은 Hardware Board를 본 적이 있는가?   이것은 영국의 라즈베리파이 재단에서 만든 초소형 컴퓨터로, 손바닥만한 크기에 $35(한화 약 4만원) 밖에 하지 않지만 무려 1.2GHz Quad Core CPU에 1GB RAM을 가지고 있는 컴퓨터이다. (Donkey Kong과 같은 추억의 mini game은 무리없이 잘 돌아간다)   아듀이노, 바나나파이 등 라즈베리파이와 같은 다양한…

[C++] AES Encryption in C++

개요 암호화 알고리즘은 여러 가지가 있다. 그 중 암호화 깊이가 높아서 쉽게 풀리지 않는 알고리즘 중 AES 암호화를 소개하려 한다. 2001년, 미국 표준 기술 연구소(NIST)가고급 암호화 표준(Advanced Encryption Standard, AES) 이라는 이름으로 새로운 알고리즘을 공모 하였고, 이 때 Rijndael(레인달) 알고리즘이 채택되어 AES 암호화가 생겨 났다. (WIK)   AES는 DES와 마찬가지로 블록 암호화 방식이며, 다음과 같은 Mode를…