레이블이 라이브러리인 게시물을 표시합니다. 모든 게시물 표시
레이블이 라이브러리인 게시물을 표시합니다. 모든 게시물 표시

금요일, 9월 23, 2016

[Python] Datetime을 활용한 날짜 처리

금요일, 9월 23, 2016

1. 개요
Python의 기본 모듈 중 하나인 Datetime을 활용해, 날짜 정보를 얻고 처리하는 방법을 살펴보도록 한다.

2. 날짜 정보 얻기
우선 Python 콘솔에 다음과 같이 입력하여 Datetime 모듈을 import한다.
>>> from datetime import datetime
그러면 now()라는 함수를 사용하여 현재 시간에 해당하는 객체를 받아올 수 있다.
>>> today = datetime.now()
>>> today
datetime.datetime(2018, 8, 15, 15, 53, 52, 616455)
>>> print(today)
2018-08-15 15:53:52.616455
이렇게 생성된 객체에 포함된 year, month, day, hour, minute, second 등을 통해 입맛대로 원하는 정보만 string 타입으로 가져올 수 있다.
>>> print('%s년 %s월 %s일, %s시 %s분 %s초' % (today.year, today.month, today.day, today.hour, today.minute, today.second))
2018년 8월 15일, 15시 53분 52초
반대로, 이러한 세부 정보를 직접 입력하여 특정 날짜에 대한 객체를 받아올 수도 있다.
>>> tomorrow = datetime(2018, 8, 16, 15, 53, 52, 616455)
>>> tomorrow
datetime.datetime(2018, 8, 16, 15, 53, 52, 616455)
>>> print(tomorrow)
2018-08-16 15:53:52.616455
만약 연, 월, 일 외에 시간 정보가 필요하지 않을 경우, date() 함수를 사용해 시간 정보가 삭제된 date 객체를 얻을 수 있다.
>>> today_date = today.date()
>>> today_date
datetime.date(2018, 8, 15)
>>> print(today_date)
2018-08-15
>>> tomorrow_date = tomorrow.date()
>>> tomorrow_date
datetime.date(2018, 8, 16)
>>> print(tomorrow_date)
2018-08-16

3. 날짜 연산하기
날짜 데이터를 연산하기 위해서 Datetime 모듈은 timedelta라는 객체를 제공한다. timedelta라는 것은 날짜 사이의 차이를 의미한다. 이 객체를 사용하기 위해서 다음과 같이 timedelta를 import한다.
>>> from datetime import datetime, timedelta
timedelta의 기본 단위는 날짜, 즉, day이다. 예를 들어, timedelta(3)은 3일의 차이를 의미한다.
>>> timedelta(3)
datetime.timedelta(3)
>>> print(timedelta(3))
3 days, 0:00:00
즉, 현재 날짜에 3일 뒤 날짜를 구하고자 한다면, 다음과 같이 코드를 작성하면 된다.
>>> today + timedelta(3)
datetime.datetime(2018, 8, 18, 15, 53, 52, 616455)
>>> print(today + timedelta(3))
2018-08-18 15:53:52.616455
만약 연산의 기준을 day가 아닌 시, 분, 초 등으로 설정하고 싶다면, timedelta를 생성할 때 인자로 hours, minutes, seconds 등을 사용하면 된다. 예를 들어, 현재 날짜로부터 3일 5시간 15분 30초 이후의 시간을 구하고 싶다면 다음과 같이 입력하면 된다.
>>> today + timedelta(days = 3, hours = 5, minutes = 15, seconds = 30)
datetime.datetime(2018, 8, 18, 21, 9, 22, 616455)
>>> print(today + timedelta(days = 3, hours = 5, minutes = 15, seconds = 30))
2018-08-18 21:09:22.616455
날짜에 timedelta를 더하는 것 외에, 날짜끼리의 연산도 가능하다. 다만, 사칙연산 중 뺄셈만 가능하다는 것을 주의해야 한다. 특정 날짜에서 다른 날짜를 빼면 timedelta 객체가 반환된다. 예를 들어, 내일에서 오늘을 빼면 하루의 차이가 나므로 timedelta(1)이 반환된다.
>>> tomorrow - today
datetime.timedelta(1)
>>> print(tomorrow - today)
1 day, 0:00:00
이때, 이 timedelta 객체는 방향성이 존재한다. 쉽게 말해서, timedelta 객체의 값이 음수 n이라면 특정 날짜보다 과거로 n의 시간만큼 차이가 난다는 의미이다.
즉, 오늘 날짜에서 내일 날짜를 빼면 timedelta(-1)이 반환된다.
>>> today - tomorrow
datetime.timedelta(-1)
>>> print(today - tomorrow)
-1 day, 0:00:00
이를 응용하면, 오늘로부터 1일 전의 날짜를 구할 수 있다.
>>> today + timedelta(-1)
datetime.datetime(2018, 8, 14, 15, 53, 52, 616455)
>>> print(today + timedelta(-1))
2018-08-14 15:53:52.616455
>>> today - timedelta(1)
datetime.datetime(2018, 8, 14, 15, 53, 52, 616455)
>>> print(today - timedelta(1))
2018-08-14 15:53:52.616455

4. References
https://docs.python.org/3/library/datetime.html

수요일, 7월 27, 2016

OpenCV 다운로드 및 시작하기 with Visual Studio 2012 (Visual C++)

수요일, 7월 27, 2016
How to download and start OpenCV?


Opencv는 이미지/영상 프로세싱을 해주는 대표적인 오픈소스 중 하나이다. C언어의 라이브러리 형태로 제공되기 때문에 쉽게 다룰 수 있으며, C++, Java, Python 등 다른 언어들과도 호환이 된다는 장점이 있다.

물체인식, 안면인식 등에 사용되는 유용한 툴인 OpenCV를 다운로드하고 개발환경을 세팅하는 법을 알아보겠다. C++언어를 사용하는 것을 전제로 진행하겠다.

우선 준비물은 2가지이다. 첫 번째는 대표적인 C/C++ 개발용 IDE인 Visual Studio 2012이고, 두 번째는 바로 OpenCV 라이브러리 파일이다.

Visual Studio 2012는 다음의 링크에서 다운로드받을 수 있다. 반드시 2012 버전을 다운받기를 권한다. 상위버전을 사용할 경우 Compiler의 버전이 다르기 때문에 OpenCV가 정상적으로 동작하지 않을 수도 있다.


그리고 다음의 링크에서 자신의 운영체제에 맞는 OpenCV 라이브러리를 다운로드 받으면 된다.


다운로드가 완료되었다면, OpenCV 압축파일을 압축해제해서 사람의 손길이 닿지 않는(?) 경로에 두면 된다. 되도록이면 경로명에 한글이 포함되지 않도록 주의한다.

그 다음엔 (Window를 기준으로) 고급 시스템 설정에 가서 OpenCV의 bin 디렉토리를 환경변수를 추가해주어야 한다. 압축해제한 경로에 가보면 opencv라는 루트 디렉토리가 있고 그 안에 build라는 디렉토리가 있을 것이다. 자신의 운영체제에 맞게 x64 혹은 x86이라는 디렉토리에 들어가면 vc11, vc12라는 두 개의 디렉토리가 있을 것이다. vc11이 Visual Studio 2012를 뜻하는 것이고 vc12가 2013 버전을 뜻하는 것이기 때문에, vc11 디렉토리로 이동한다. (자신이 사용하는 Visual Studio의 뒤에 붙은 연도의 끝 두 자리에서 1을 뺀 것과 같음) 이제 이 디렉토리 안의 bin 디렉토리를 환경변수 (PATH)에 추가해주면 된다.

예시: C:\opencv\build\x86\vc11\bin

환경변수까지 추가했다면 이제 Visual Studio와 연동시킬 일만 남았다. Visual Studio 2012를 실행한 뒤 Visual C++ Win32용 콘솔 응용프로그램으로 빈 프로젝트를 하나 만들어준다. 앞으로 진행할 간단한 물체인식 예제를 해보는 차원에서 프로젝트 이름은 BallDetection으로 지었다.


프로젝트가 생성되었으면 프로젝트(P) 탭의 속성(P)로 간다. 처음으로 나타나는 화면인 구성속성 - 일반에서 플랫폼 도구 집합이 Visual Studio 2012 (v110)으로 올바르게 설정되어 있는지 확인한다.


확인을 완료했으면 구성속성 - VC++ 디렉터리로 넘어간다.



여기서 첫 번째로 포함 디렉터리 (Include Directory) 편집에 들어가서 'OpenCV를 설치한 곳\opencv\build\include'를 추가해준다.
그리고 두 번째로 라이브러리 디렉터리 (Library Directory) 편집에 들어가서 'OpenCV를 설치한 곳\opencv\build\x86 또는 x64 (자신에게 맞게)\vc11\lib'를 추가해준다.

예시: C:\opencv\build\x64\vc11\lib

두 개 다 추가를 완료 했다면 구성속성 - 링커 - 입력으로 넘어간다.


추가 종속성 편집에 들어가서 다음의 목록들을 붙여넣기 한다.

opencv_calib3d2413d.lib
opencv_contrib2413d.lib
opencv_core2413d.lib
opencv_features2d2413d.lib
opencv_flann2413d.lib
opencv_gpu2413d.lib
opencv_highgui2413d.lib
opencv_imgproc2413d.lib
opencv_legacy2413d.lib
opencv_ml2413d.lib
opencv_nonfree2413d.lib
opencv_objdetect2413d.lib
opencv_ocl2413d.lib
opencv_photo2413d.lib
opencv_stitching2413d.lib
opencv_superres2413d.lib
opencv_ts2413d.lib
opencv_video2413d.lib
opencv_videostab2413d.lib

추가종속성 편집까지 완료됐다면, 이제 OpenCV를 시작할 준비가 된 것이다.