[wxpython] 다중모니터 감지하기

Posted by 백창
2017.06.28 15:17 개발/Python

#1


wxPython 은 GUI를 만들 수 있는 오픈소스 라이브러리이다.


GUI를 만드는건 만드는건데 가끔 보면 듀얼모니터, 다중모니터를 사용하면서 


모든 화면에 프로그램을 띄울 필요가 생길 것이다.


그걸 어떻게 감지하는지 퍼온 소스를 적어 놓겠다.


#2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import wx
 
app = wx.App()
 
#To get the count of displays
num_displays = wx.Display.GetCount()
 
#Open a frame on each display
for display_num in range(num_displays):
    #Get a display object
    display = wx.Display(display_num)
 
    #To get a wx.Rect that gives the geometry of a display
    geometry = display.GetGeometry()
 
    #Create a frame on the display
    frame = wx.Frame(None,-1,"Display %d"%display_num,
    geometry.GetTopLeft(),geometry.GetSize())
 
    #Make the frame visible
    frame.Show()
 
app.MainLoop()
cs


모니터의 갯수를 저장해서 반복문을 돌며 각 화면마다 프레임을 실행해주는 소스가 되겠다.


#3


https://bytes.com/topic/python/answers/486021-multi-monitor-support

'개발 > Python' 카테고리의 다른 글

[wxpython] 다중모니터 감지하기  (0) 2017.06.28
[Python] 웹페이지 변화 감지하기  (2) 2017.04.27
Python  (0) 2017.04.27
이 댓글을 비밀 댓글로

[방범 DIY] CCTV를 만들어보자 #2

Posted by 백창
2017.05.10 13:37 리눅스/라즈베리파이

#1


졸업작품에서 라즈베리파이랑 파이캠을 분리했다 ㅎㅎ 안녕.. 내 졸작 ㅂㅇ


보낼건 빨리 보내고 

opencv를 설치해보자. 라고 이 글을 시작하려 했는데 단순한 촬영에만 쓰면 opencv설치는 필요가 없었다.(뻘짓 하루 했음)


#2


사진 촬영을 위한 스크립트를 작성하자.

얼굴을 인식하고 따라다니면서 촬영을 하고 지지고  볶고 할려면 opencv를 설치하자.

(cctv 장사해야만 쏟을수 있는 정성수준)


그게 아니라면 입맛대로 촬영 소스를 작성해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# by bcy 20170421
 
# var
YYYYMM=$(date +%Y%m)
DD=$(date +%d)
HHMMSS=$(date +%H_%M_%S)
PATH='/mnt/samba/ftp/caps/'
FILE_DIR=${YYYYMM}
FILE_NAME=${YYYYMM}${DD}'_'${HHMMSS}'.png'
 
# makde dir every month
if [ ! -d ${PATH}${FILE_DIR} ]; then
        /bin/mkdir ${PATH}${FILE_DIR}
fi
 
# capture
# U can change this
/usr/bin/raspistill -o ${PATH}${FILE_DIR}'/'${FILE_NAME}
 
# logging
echo '['${YYYYMM}${DD}' '${HHMMSS}'] finished' >> log/${YYYYMM}_excute.log
 
cs


1.기본변수 설정 (파일명, 파일위치 등)

2.년월별 폴더 확인 및 생성

3.raspistill 명령어를 활용해 사진 촬영 및 저장

4.로그 저장


#3


벌써 끝났네.

동영상 촬영도 똑같다.

위와 같은 소스로 촬영 부분 동작만 바꾸고, 바로 동영상을 재생해보려면 인코딩까지 동시에 진행하면 된다..

이 댓글을 비밀 댓글로

[방범 DIY] CCTV를 만들어보자 #1

Posted by 백창
2017.05.10 13:21 리눅스/라즈베리파이

#1


자취생들에게는 많은 고민이 있다. 

혼자 살기 때문에 생기는 많은 고민들 중 하나를 덜어보도록 하자.

(cctv를 만들꺼라고 하니까 느그집에서 뭐 훔쳐갈게있냐고 다들 그러긴하더라.)


출근 후면 우리집은 빈집이 된다. 짧게는 10시간 길게는 12시간이상까지...

도둑이 들지 않았을까? 문 단속은 잘 했나? 에어컨같은걸 켜놓고 왔으면 어떡하지?

부동산 등이 연락도 없이 집에 방문하지는 않을까?


혼자사는 사람들이 많아져서 이런 고민들이 늘어서 그런가? 필요한게 딱 홈 IoT네..


#2


어떤 구성으로 할까..


  • 라즈베리파이
  • 파이캠
  • 저장소
  • 도어센서


당장 생각나는 준비물은 이정도다.


만들고자 하는건 cctv라기보다는 필요한 시점에 필요한 만큼만 촬영하겠다는게 1차 목표이다.


대략적인 시나리오는


------------------------------------------------------------------------------------------------------------

[기본설정]

  1. 방해금지 시간대 설정
  2. 촬영시간 설정 


[시나리오]

문열림 감지  방해금지 시간대 여부 확인  동영상촬영시작or사진촬영  저장소에 저장

------------------------------------------------------------------------------------------------------------


시나리오를 적고 나니까 졸업과제랑 시나리오가 일맥상통하네 ㅎㅎ..

생각의 발전이 없군..


요즘 도둑들은 지능적이어서 cctv같은게 설치되있으면 컴퓨터 본체도 훔쳐간다더라, 잘숨기던가.. 클라우드로 올리는걸 추천한다.


#3


그럼 준비물을 구하고 다음 글로 갑시다..


이 댓글을 비밀 댓글로

[Python] 웹페이지 변화 감지하기

Posted by 백창
2017.04.27 16:48 개발/Python

# 1


음.. 파이썬을 시작하게된 이유였던가 ?


웹 페이지에 변화를 감지하기 위해서 파이썬을 처음으로 깔았다.


페이지 변화를 감지해서 뭐하냐 싶겠지만 의외로 용도가 많다.


공지사항에 새로운글(있던 글이 지워지거나 수정된 것도 감지되겠지만)을 체크하여 알림을 보낼 수 있고,

뭐 다른 용도도 많이 있다.


내가 처음 사용한 용도는 회사 홈페이지가 뻑나면 복구 스크립트를 돌리는데 사용했다.

뻑난지를 이 방법으로 확인한거지


# 원리


원리는 별거 없다. 


일정 주기마다 페이지를 긁어 해쉬값으로 저장해두고 기존에 저장된 해쉬값과 비교를 하는 것이다.


페이지가 조금만 달라져도 해쉬값은 크게 변하니 쉽게 감지할 수 있다.


# 소스


1. 페이지를 긁어서 해쉬값으로 변환하여 저장


음.. getList는 긁어오고 싶은 사이트들을 저장해둔 파일을 불러오는 소스라서 무시해도된다.

그냥 주소써서 긁어오면됨


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# coding : utf-8
import requests
import hashlib
import time
import sys
import re
import getList
reload(sys)
sys.setdefaultencoding('utf-8')
 
# get check list
lines = getList.getList()
 
cnt = len(lines)
= 0
 
try :
 
    while i < cnt:
        chkList = re.split(r'[\s]',lines[i])
        i += 1
        with requests.Session() as c:
            URL = chkList[1]
 
            html = c.get(URL)
 
            m = hashlib.md5(html.text)
             now = time.localtime()
            file = open("PATH/md5_%s_%04d-%02d-%02d.log"%(chkList[0],now.tm_year, now.tm_mon, now.tm_mday),'a')
    
            print >> file, m.hexdigest()
            file.close()
 
    execfile("PATH/check.py",{})
except:
    print 'error'
 
cs



2. 페이지비교


offset에 따라 몇번째까지 비교할지 설정할 수 있고

2로 되어있으니 최근 2번 것과 비교하여 다르면 메시지를 보내도록 하였다.

(메시지는 텔레그램으로 보내면 편함)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#-*- coding: utf-8 -*-
import time
import re
import getList
import sendMsg
 
# get check List
lists = getList.getList()
lists_cnt = len(lists)
= 0
 
while i < lists_cnt:
    chkList = re.split(r'[\s]',lists[i])
    i += 1
    now = time.localtime()
 
    file = open("PATH/md5_%s_%04d-%02d-%02d.log"%(chkList[0], now.tm_year, now.tm_mon, now.tm_mday),'r')
    lines = file.readlines()
    file.close()
 
    flag = True
 
    cnt = len(lines)
 
    # set compare res
    offset = 2
    if cnt < offset:
        offset = cnt
 
    # compare hash value
    for j in range(cnt-offset, cnt):
        if lines[j] != lines[cnt-1]:
            flag = False
 
    # if unmatch
    if flag == False:
        # send msg
        for z in range(2len(chkList)):
            sendMsg.send_msg_to_telegram(chkList[z],'['+chkList[0]+'] 변화 감지 : \t'+chkList[1])
 
cs


# 마침


벌써 비슷한 방식으로 3개째 프로그램을 만들었다.

생각하기에 따라서 활용도가 많으니 잘 활용해봐야겠다.


'개발 > Python' 카테고리의 다른 글

[wxpython] 다중모니터 감지하기  (0) 2017.06.28
[Python] 웹페이지 변화 감지하기  (2) 2017.04.27
Python  (0) 2017.04.27
  1. 일하랬더니 옴닉을 만들어버렸네...
이 댓글을 비밀 댓글로

Python

Posted by 백창
2017.04.27 16:31 개발/Python

# 1


흠.. 내가 파이썬을 공부하게 될 줄이야..


심심할때 사용하려고 리눅스 서버를 돌리기 시작하니까 파이썬의 매력에 빠질수밖에 없었다.


파이썬의 매력이라기보다는 스크립트 언어의 매력에 빠진거지.


재밌네 

'개발 > Python' 카테고리의 다른 글

[wxpython] 다중모니터 감지하기  (0) 2017.06.28
[Python] 웹페이지 변화 감지하기  (2) 2017.04.27
Python  (0) 2017.04.27
이 댓글을 비밀 댓글로

정규식을 이용해 숫자만 추출

Posted by 백창
2016.06.24 10:09 개발/Java script

# 개요


 수업시간에는 정규식에 대해 깊이 생각해본적이 없었는데, 요즘 정말 활용분야가 다양하다는 걸 느끼고 있다.


Javascript에서 정규식을 이용하여 문자열에서 숫자만 추출해보도록 하자.



# 소스


1
2
3
4
5
function fn(str){
    var res;
    res = str.replace(/[^0-9]/g,"");
    return res;
}
cs


# 주절주절


 간단하게 해석해보자면 [^0-9] 즉, 숫자가 아닌 부분을 "" 공백으로 치환함으로써 숫자만 남기는 것.


 얼마나 편리한지 허허.

'개발 > Java script' 카테고리의 다른 글

정규식을 이용해 숫자만 추출  (2) 2016.06.24
배열 특정 값 지우기  (0) 2015.12.14
[d3] line chart 그리기  (0) 2015.03.31
  1. ㅎㅎㅎ넘나 편리한것
  2. 같이 regex 공부합세
이 댓글을 비밀 댓글로

[Flask] 외부소스 읽기

Posted by 백창
2016.05.31 09:33 개발/Flask

# 개요


 Flask 개발 중 css와 js파일을 로드하기 위해 평소처럼 resource/js .. css 등의 디렉토리를 만들고 아래와 같이


<script type="text/javascript" src="./resource/js/jquery.js>


js 파일을 읽어왔다.


하지만 현실은.. js 파일을 찾을 수 없다는 에러메시지만 받을 수 있었다.


Flask에서 css나 js파일을 읽어 올 때 'url_for' 을 이용하여 지정하면 편리하게 읽어 올 수 있다.



# 사용법


서버동작이 구현되어 있는 run.py 파일을 기준으로 static 폴더를 생성하여 참조할 소스들을 static폴더에 넣는다.


run.py  - static         - js

                                 - css

             - templates


그리고 아래와 같이 사용하면 정상적으로 읽어 올 수 있게 된다.


 <link type="text/css" rel="stylesheet" href="{{url_for('static', filename='css/style.css')}}/>



# 비고


 o url_for 함수의 여러가지 유용한 사용법이 있는듯한데 일단 그건 나중에 알아봐야겠다..

 o Flask에서 {{ }}를 사용하면 파이썬의 함수나 변수를 사용할 수 있다.

'개발 > Flask' 카테고리의 다른 글

[Flask] 외부소스 읽기  (0) 2016.05.31
[Flask] 설치  (0) 2016.05.26
Tags
이 댓글을 비밀 댓글로

[Flask] 설치

Posted by 백창
2016.05.26 16:15 개발/Flask

# 개요


 4월이 되며 든 생각이 스크립트 언어를 공부해야겠다는것이었다. 어떤 언어를 공부할까 고민하다가 함께 발전할 수 있는 Python 을 해보기로 하고 간단한 웹서버를 구축하기 위해 FLASK를 수동으로 설치해보았다.


# flask란?


 flask는 Python 용 micro Framework이다. 다른 라이브러리들에는 존재하는 기능들을 제공하지는 않지만 그런 기능들을 가질 수 있는 확장성은 제공하고 있다.

 간단하게 생각하면 내가 필요한것들을 가져다 쓰면되겠다.


# 설치

 

 pip 명령어를 사용하면 간단하게 설치 할 수 있지만, flask를 설치할 서버가 인터넷이 안되기 때문에 수동으로 설치하였다.


 먼저, 다음 URL에 접속하여 flask 소스를 다운받아서 설치해보자.



 소스를 받고 압축을 해제하면 여러 파일들이 있는데 그 중 setup.py라는 파일을 이용해서 수동으로 설치할 수 있다.


 # python setup.py install


 설치가 잘 되나요? 인터넷이 안되는 환경에서는 이 방법만으로는 설치가 어렵다.


 그렇다면 어떻게 해야할까?,,,


 Flask는 Werkzeug, jinja2 등 몇몇 패키지에 의존성을 가진다. 이 패키지들이 깔려있지않다면 flask를 설치할 수 가 없다.


 다음 URL에 접속하여 의존성을 가지는 패키지들을 다운받아 먼저 설치하자.





 Flask를 설치했던 방법과 동일한 방법을 사용하여 위 패키지들을 설치하고 다시한번 Flask를 설치하면 잘 될 것이다.



# 테스트


다음 코드를 작성하여 Flask가 잘 설치되었고 동작하는지 테스트 해보자.


1
2
3
4
5
6
7
8
9
from flask import Flask
app = Flask(__name__)
 
@app.route("/")
def hello():
    return "Hello World!"
 
if __name__ == "__main__":
    app.run()
cs


$ python hello.py


를 실행하면 로컬 환경에서 127.0.0.1:5000 을 통해 결과를 확인 할 수 있다.


같은 네트워크에 public IP로 주고 싶다면


app.run() 대신 app.run(host='0.0.0.0')을 입력해주면 된다.


# 출처


http://flask-docs-kr.readthedocs.io/ko/latest/quickstart.html

https://spoqa.github.io/2013/02/20/python-development-environment.html


'개발 > Flask' 카테고리의 다른 글

[Flask] 외부소스 읽기  (0) 2016.05.31
[Flask] 설치  (0) 2016.05.26
이 댓글을 비밀 댓글로

[oracle] DB Link

Posted by 백창
2016.04.07 11:14 개발/Oracle

db link 설명


http://www.gurubee.net/lecture/1560

'개발 > Oracle' 카테고리의 다른 글

[oracle] DB Link  (0) 2016.04.07
[oracle] 날짜 + 번호 일련번호 생성하기  (0) 2015.12.13
이 댓글을 비밀 댓글로

배열 특정 값 지우기

Posted by 백창
2015.12.14 16:46 개발/Java script

# 개요


 Javascript 배열 내 원하는 value의 값을 삭제해보자.


기본적으로 제공하는 함수는 pop함수로 원하는 값을 제거하기에 불편함이 있다. 


다음 코드는 구글에서 배열 특정값을 제거하는 소스를 검색하면 자주 나오는 코드이다


# 소스


1
2
3
4
5
6
7
8
9
10
11
function removeA(arr) {
    var what, a = arguments, L = a.length, ax;
    while (L > && arr.length) {
        what = a[--L];
        while ((ax= arr.indexOf(what)) !== -1) {
            arr.splice(ax, 1);
        }
    }
    return arr;
}
    
cs


# 사용방법


removeA( 배열 , 지우고 싶은 값);


# 출처


---------stackoverflow

'개발 > Java script' 카테고리의 다른 글

정규식을 이용해 숫자만 추출  (2) 2016.06.24
배열 특정 값 지우기  (0) 2015.12.14
[d3] line chart 그리기  (0) 2015.03.31
이 댓글을 비밀 댓글로