본문 바로가기

Python19

디버그 - 기록된 키입력 데이터 확인 뷰어프로그램을 작성하기전 pickle을 통하여 저장하였던 바이너리 데이터를 불러와 디버그 모드로 자료구조에 대하여 먼저 알아봐야겠어요 키보드이벤트 클래스의 오브젝트들이 리스트에 담겨있네요. event_type이 눌렀을때 down 떼었을때 up이네요. 뷰어는 기록에 대한 재생할 필요가 없으니 down만 확인하면 될거같습니다. name의 경우 누른 키에 대한 문자열이 적혀있는데요 타이핑에 쓰이는 모든 키들은 길이가 1인 문자열로 있는 반면에 비 문자열 키들은 'esc', 'tab'과 같이 길이가 1이 아닌애들만 있네요. 나중에 if len(name) == 1 과같은 함수로 눌린 버튼이 문자열인지 비 문자열인지 판단할수 있을거같습니다. 뷰어 프로그램 기획당시 키가 입력된곳의 창이름,프로세스 이름을 같이 출력하.. 2020. 5. 20.
키 기록부분 구현 및 자동저장 - 쓰레드 생성 # 백그라운드 쓰레드 구축(레코딩 프로그램에 들어감) class _record(QtCore.QThread): def __init__(self,selfs): super().__init__(selfs) self._state = False self.record = [] self.mutex = QtCore.QMutex() self._time = None def run(self): # 쓰레드에서 실행될 구문 while True: self.mutex.lock() if not self._state: self.recording() else: if time.time() - self._time >= 60: # 60초마다 저장한다 self.recording() self.mutex.unlock() def recording(s.. 2020. 5. 20.
기획의도에 맞게 각 기능 UI구축 from PyQt5 import QtWidgets, QtCore import sys,pickle,keyboard # 메인 프로그램 UI 및 슬롯 구축 class main(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint,False) self.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint,False) self.setMinimumSize(178,45) self.pbt1 = QtWidgets.QPushButton('키로거', self) self.pbt2 = QtWidgets.QPushButton('뷰어', self) s.. 2020. 5. 20.
Gradient descent(경사하강법, 경사하강알고리즘) - 텐서플로우(tensorflow) 경사 하강 알고리즘, 경사 하강법 Cost(W,b)의 값을 최소화 하는 W,b값을 구함. import tensorflow as tf x_data = [?, ?, ?, ?, ?] y_data = [?, ?, ?, ?, ?] with tf.GradientTape() as tape: hypo = W * x_data + b cost = tf.reduce_mean(tf.square(hypo - y_data)) W_grad, b_grad = tape.gradient(cost, [W,b]) with tf.GradientTape() as tape: Gradient(기울기) Tape(기록) 이후 tape에 gradient메서드를 실행하여 cost에 대한 W와b의 편미분 값을 tuple로 전달. learning rate .. 2020. 5. 20.
기획 키보드 입력을 기록하는 keyloger만들기 1. gui는 qt를 이용 2. 키입력 레코딩은 keyboard 모듈 사용 3. 메인 프로그램 - 레코딩 프로그램 - 뷰어 프로그램 4. 키 입력시 활성화 되어있는 창 이름과 프로세스 이름 얻어오기 및 저장 5. pickle 모듈로 레코딩 데이터 이진파일로 저장 [메인 프로그램] 레코딩 프로그램과 뷰어 프로그램을 선택하여 실행할수 있도록 제작. (필수아님. 각각 프로그램으로 만들어도 될듯) [레코딩 프로그램] gui가 필요없지만 종료등의 편의를 위해 gui제작. 프로그램 실행시 자동으로 레코딩 시작. 일정 시간마다 레코딩 종료후 pickle모듈로 저장 및 레코딩 재실행 프로그램 종료시 진행중인 레코딩종료 및 저장 [뷰어 프로그램] pickle모듈로 저장된 이진.. 2020. 5. 20.
순차문, 조건문, 반복문 순차문 말처럼 순서대로 진행하는것 입니다. x = 2 print(x) # 2 x = x + 2 print(x) # 4 조건문 어떤것이 참일 경우에만 실행. x = 5 #만일 x = 17이라면? → Finis만 출력됨 if x 20: print('Big') print('Finis') # Small # Finis if는 if 조건문: body 일때 조건문이 참이면 body부분을 실행한다. 반복문 body부분의 코드를 '반복'한다. 예시는 while문으로 들겠습니다. while 조건문: body 와 같은 형태로 조건문이 참일때 body를 실행합니다. 위의 if와 똑같죠? 하지만 끝나는 것이 아닌 다시 조건문을 확인합니다.. 2020. 5. 19.
배우기 앞서서 에러부분 ^ Syntax Errors : 에러내용 앞으로 파이썬을 사용해 프로그래밍을 하면서 문법오류를 상당히 자주 목격할수 있습니다. 저 또한 처음 배울때 상당히 많이 조우했으며 괜찮은 코드 처럼 보이는데도, 다시 수정해도 다시금 오류가 뜰수 있습니다. 문법오류가 뜨는것이 부족한 프로그래머라는 것을 의미하진 않습니다. 단지 무엇을 하려는건지 파이썬이 이해하지 못했을 뿐입니다. 짜증날수도 있지만 문법오류에 익숙해지셔야 합니다. 5번째 줄의 else의미를 모르겠어..!! 들여쓰기가 안돼서인가 햇갈려 ㅠㅠ 무슨 말이 하고싶은거야 ㅠㅠㅠ 라고 말하는거죠 우리가 파이썬 언어를 배우고 이해하는것이 파이썬이 우리 언어를 배우고 이해하는것보다 훨씬 쉽습니다. 파이썬의 코드는 문장으로 구성되어있습니다.. x = 2 x.. 2020. 5. 19.
Linear Regression(선형회귀) 구현 및 Cost의 최소화 - 텐서플로우(tensorflow) import tensorflow as tf x_data = [1, 2, 3, 4, 5] y_data = [1, 2, 3, 4, 5] W = tf.Variable(3.5) b = tf.Variable(1.0) # hypothesis = W * x + b hypo = W * x_data + b H(x) = 가설함수 hypotthesis라고 하며 파이썬(tensorflow)에서 구현할수 있도록 변경 # cost = (hypo - y_data) ** 2 cost = tf.reduce_mean(tf.square(hypo - y_data)) 코스트함수. 가설에 의한 출력 - 실제출력 한 값의 제곱값들의 평균 tf.reduce_mean() v = [1., 2., 3., 4.] tf.reduce_mean(v) # 2... 2020. 5. 19.
Regression(회귀) - 텐서플로우(tensorflow) 사전적 의미 회귀, 후퇴, 되돌아간다 사용되는 의미 "Regression toward the mean" -Sir Francis Galton- 어떤 데이터가 상당히 크거나 작은 값을 가지고 있더라도 이는 전체적인 평균에 회귀하려는 특징이 있다. Linear Regression (선형회귀) 직선의 방정식 y = ax + b (a : 직선의 기울기, b : 직선의 y절편) Linear Regression == a와 b를 구하는것 Cost 예측데이터에서 실제데이터 값을 뺀 값. 작으면 작을수록 데이터를 잘 대변한다 == 예측에 성공했다. Cost == loss == error 동일한 뜻으로 사용된다. Linear Regression에서 가장 중요한것은 Cost값을 최소화 하는것. Cost Function 가설함.. 2020. 5. 19.