콘텐츠로 건너뛰기
Home » 21세기소년 » Page 5

21세기소년

21세기소년 / IT / 정보기술 / 인터넷 / 프로그래밍 / 미래 / 과학 / 과학지식 / 물리 / 화학 / 천문 / 생물학 / 이과생이나 관심가질 법한 자질구레한 이야기들

Vision을 이용한 얼굴 인식 – 고급편

Vision을 이용해서 이미지 속에서 얼굴을 인식하는 방법을 살펴본 바 있는데, 당시 글에서 VNDetectFaceLandmarksRequest 를 사용했었다. 사실 얼굴이 들어있는 영역만 찾기 위해서는 VNDetectFaceRectsRequest 를 사용하는 것으로도 충분한데, face landmarks를 찾는다는 것은 얼굴의 주요 요소들 – 눈, 코, 입, 윤곽선 등-을 찾아낸다는 의미이다. 

이 글에서는 VNDetectFaceLandmarksRequest를 사용해서 실제로 얼굴의 각 요소를 추적하는 예제를 소개해 보겠다. 

더 보기 »Vision을 이용한 얼굴 인식 – 고급편

URLSession을 통한 간단한 업로드 – Swift

URLSession(NSURLSession)을 기반으로 URLSessionDataTask를 이용하면 HTTP를 통해서 서버와 간단한 데이터를 주고받을 수 있다.  Data Task를 이용하는 케이스는 흔히 키-값 쌍의 정보를 URL로 인코딩해서 주소에 포함하고 서버로부터 응답을 받는 식으로 처리하는 것이 일반적이다. 서버로 데이터나 파일을 업로드하는 경우에는 URLSessionUploadTask 클래스를 사용하는데, 이를 이용한 파일 업로드를 어떻게 구현하는지 살펴보자. 사실, 그리 크지 않은 크기의 파일 데이터는 데이터태스크를 이용해도 무방하다. POST 전송을 통한 파일 업로드 HTTP 규격에는 메소드(METHOD)라는 항목이 포함된다. 가장 많이 쓰이는 메소드는 GET과 POST인데, GET은 서버로부터 페이지를 요청할 때 쓰는 것이고 (뭔가를… 더 보기 »URLSession을 통한 간단한 업로드 – Swift

ZMQ 멀티파트메시지

멀티파트 메시지는 하나의 메시지 프레임 내부에 여러 개의 독립적인 메시지 프레임이 들어 있는 것을 말한다. 이는 하나의 프레임에서 처리하기 힘든 데이터 조각들을 모아서 처리할 때 유용하다. 예를 들어 바이너리 파일 데이터를 전송하려는 경우에는 보내는 쪽이나 받는 쪽이나 전송하는 데이터가 이진데이터라는 것을 알고 있다 가정하여 바이트 스트림을 전송할 수 있다. 하지만 이렇게 하면 실제 데이터 외부에 있었던 정보, 이를 테면 파일 이름이나 생성한 날짜 같은 메타 정보를 전달하기가 어려워진다. 이런 경우 여러 정보들을 멀티 파트 메시지로 묶어서 하나의 프레임으로 전송하면 필요한… 더 보기 »ZMQ 멀티파트메시지

ZMQ – Poller 사용하기

PUB-SUB 패턴이나 PUSH-PULL 패턴을 사용하면 데이터를 발생시키는 1개 (혹은 여러 개의) 노드로부터 데이터를 전달받는 N개의 노드들이 돌아가는 방식의 네트워크를 구성할 수 있음을 지난 글에서 보았다. 이 때 각각의 클라이언트 노드들은 루프를 돌면서 큐에 들어온 메시지를 순서대로 처리하게 된다. 만약 개별 클라이언트가 한 번에 처리해야 할 메시지의 최대 개수가 정해져 있다면 while 무한 루프가 아닌 for 루프를 통해서 유한한 루프를 돌 수 있을 것이다. 그 외에도 메시지의 내용으로부터 동작이나 중지를 결정할 수 있는 경우에도 그 스스로 동작을 멈출 시점을 결정할 수… 더 보기 »ZMQ – Poller 사용하기

(SQLite3) INSERT문 – 테이블에 값 삽입하기

INSERT 문은 테이블에 새로운 값을 추가할 때 사용하는 명령이다. 패턴에 따라서 몇 가지 형식으로 사용된다.

  1. INSERT INTO table DEFAULT VALUES; : 테이블의 각 칼럼에 적절한 디폴트 값이 있다면 디폴트 값을 적용해서 새 Row를 추가한다. 디폴트 값에는 명시적으로 DEFAULT를 써서 선언한 값이나 자동으로 증가하는 인덱스 번호값 혹은 NULL이 사용될 수 있다.
  2. INSERT INTO table VALUES (val1, val2, val3, ... ); : 테이블의 모든 칼럼에 대해서 값을 던져주고 해당 값으로 새 레코드를 등록한다. 이 때 VALUES 뒤에 나오는 괄호의 값들은 테이블의 전체 칼럼 수와 같은 개수여야 하며, 테이블 스키마에 정의된 칼럼의 순서와 각각 매치되어야 한다.
  3. INSERT INTO table (col1, col3, col7) VALEUS (val1, val2, val3); : 1, 2의 혼합으로 칼럼의 일부에 대해서만 값을 제공하여 레코드를 생성한다. 여기에 명시되지 않은 칼럼들은 디폴트값으로 생성되기 때문에 NOT NULL이거나 디폴트가 정의되지 않았다면 에러가 난다.
더 보기 »(SQLite3) INSERT문 – 테이블에 값 삽입하기

파이썬 연습문제 – 누워있는 드럼통에 들어있는 기름의 부피

반지름이 R cm이고 높이가 H cm 인 드럼통에 기름이 들어있다. 이 드럼통 내의 기름의 높이가 A라 할 때 기름의 부피를 구하는 것은 원기둥의 부피를 구하는 것이므로 그리 어렵지 않다. 그런데 드럼통이 세워져 있지 않고 수평으로 누워서 설치되었을 때, 기름의 높이가 B 이면, 이 때 드럼 통 내의 부피를 계산해보자. 간단한(?) 적분 문제인데, 여기서는 구분구적법을 적용해서 근사치를 구해볼 것이다.
더 보기 »파이썬 연습문제 – 누워있는 드럼통에 들어있는 기름의 부피

ZMQ의 기본 개념들

일전에 간단하게 ZMQ에 대한 기본적인 내용을 살짝 정리한 글이 있는데, 사실 ZMQ 자체를 알게 된 게 소켓 통신에 대한 내용을 알아보려 검색하다가 흘러흘러 닿은 것이었더 관계로 글 자체가 공식 문서에서 예제 몇 개를 따온 수준이었다. 이후에 조금 더 알아보니 ZMQ는 단순한 소켓 프로그래밍 API를 대체하는 것 외에 거의 같은 코드베이스로 분산처리라든지 네트워크 소켓외에도 프로세스간 스레드간 통신에 사용될 수 있는 정말 활용폭이 넓고 괜찮은 라이브러리라고 생각됐다. ZMQ 자체는 간단한 개념이며, 기본적으로 사용하는 방식이 소켓과 크게 다르지 않아서 학습 곡성도 매우 낮은데,… 더 보기 »ZMQ의 기본 개념들

bisect – 이진탐색 알고리듬

이진탐색은 데이터가 정렬된 상태일 때, 특정한 값을 매우 우수한 성능으로 탐색할 수 있는 알고리듬으로 실제로도 널리 이용된다. 이진탐색은 정렬된 데이터에서 특정한 값을 찾을 때 사람이 하는 것과 유사하게 처리되는데, 리스트의 한 가운데 지점의 값을 비교하여 찾는 값이 그보다 작으면 왼쪽에 그보다 크면 오른쪽에 있다는 것으로 탐색 범위를 매 시행마다 절반으로 줄여나가기 때문에 특히 규모가 큰 데이터에서 빠르게 조회가 가능하다는 장점이 있다.1 이전에 이진 탐색 알고리듬 적용을 위한 이진 탐색 트리 클래스를 작성하는 내용으로 포스팅을 발행한 적이 있는데, 파이썬은 bisect라는 내장… 더 보기 »bisect – 이진탐색 알고리듬

LCD 패널 방식으로 숫자를 표시해보기 (파이썬)

LCD 처럼 숫자를 표시하는 코드를 만들어 보자 크기와 출력할 숫자를 입력받는다. 크기는 LCD 표시 요소 하나의 크기를 가리킨다. (크기는 1~10,  숫자는 0~99,999,999)  가로선은 -, 세로선은 | 문자를 통해서 표현하며, 사이즈만큼 길이가 길어진다. 따라서 하나의 문자를 표시하기 위해서는 가로는 size + 2, 세로는 size * 2 + 3 만큼의 공간이 필요하다. 예시 – 출력: 0123456789. size: 3 — — — — — — — — | | | | | | | | | | | | | | | |… 더 보기 »LCD 패널 방식으로 숫자를 표시해보기 (파이썬)