7.GUI

(1) hello world

from Tkinter import *

root = Tk()

Label(root, text='Hello World').pack()

root.mainloop()


Tkinter인데 tkinter로 했다가 고생함


(2) 온도 변환기


Posted by 공놀이나하여보세
,

아래 블로그 참고

http://blog.bitify.co.uk/2013/11/interfacing-raspberry-pi-and-mpu-6050.html


1. sudo raspi-config 를 통해 i2c enable 설정



2. sudo vi /etc/modules 

아래 두 줄 추가 후 재부팅

i2c-bcm2708
i2c-dev



3. 하드웨어 선 연결

라즈베리파이의 pin1, 3, 5, 6을 센서의 VCC, SDA, SCL, GND에 아래와 같이 연결

  • Pin 1 - 3.3V connect to VCC
  • Pin 3 - SDA connect to SDA
  • Pin 5 - SCL connect to SCL
  • Pin 6 - Ground connect to GND

4. 테스트를 위한 파일 다운 및 테스트
sudo apt-get install i2c-tools

- 테스트

sudo i2cdetect -y 0 (라즈베리파이1버전) or
sudo i2cdetect -y 1 (라즈베리파이2)
- 아래와 같이 나오는 것 확인
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --


5. 파이썬으로 i2c접근을 위해 아래 파일 다운로드

sudo apt-get install python-smbus 


6. 소스 코드

mpu6050.py로 아래 파일 저장


#!/usr/bin/python

import smbus

import math


# Power management registers


power_mgmt_1 = 0x6b


power_mgmt_2 = 0x6c

def read_byte(adr):

    return bus.read_byte_data(address, adr)

def read_word(adr):

    high = bus.read_byte_data(address, adr)

    low = bus.read_byte_data(address, adr+1)

    val = (high << 8) + low

    return val


def read_word_2c(adr):

    val = read_word(adr)

    if (val >= 0x8000):

        return -((65535 - val) + 1)

    else:

        return val


def dist(a,b):

    return math.sqrt((a*a)+(b*b))


def get_y_rotation(x,y,z):

    radians = math.atan2(x, dist(y,z))

    return -math.degrees(radians)


def get_x_rotation(x,y,z):

    radians = math.atan2(y, dist(x,z))

    return math.degrees(radians)


bus = smbus.SMBus(0) # or bus = smbus.SMBus(1) for Revision 2 boards

address = 0x68       # This is the address value read via the i2cdetect command


# Now wake the 6050 up as it starts in sleep mode

bus.write_byte_data(address, power_mgmt_1, 0)

print "gyro data"

print "---------"

gyro_xout = read_word_2c(0x43)

gyro_yout = read_word_2c(0x45)

gyro_zout = read_word_2c(0x47)

print "gyro_xout: ", gyro_xout, " scaled: ", (gyro_xout / 131)

print "gyro_yout: ", gyro_yout, " scaled: ", (gyro_yout / 131)

print "gyro_zout: ", gyro_zout, " scaled: ", (gyro_zout / 131)

 

print

print "accelerometer data"

print "------------------"

 

accel_xout = read_word_2c(0x3b)

accel_yout = read_word_2c(0x3d)

accel_zout = read_word_2c(0x3f)


accel_xout_scaled = accel_xout / 16384.0

accel_yout_scaled = accel_yout / 16384.0


accel_zout_scaled = accel_zout / 16384.0

print "accel_xout: ", accel_xout, " scaled: ", accel_xout_scaled

print "accel_yout: ", accel_yout, " scaled: ", accel_yout_scaled

print "accel_zout: ", accel_zout, " scaled: ", accel_zout_scaled

print "x rotation: " , get_x_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)

print "y rotation: " , get_y_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)


7. 테스트
python mpu6050.py



Posted by 공놀이나하여보세
,

아래 사이트 7page


http://www.slideshare.net/MoamBae/raspberry-pi-35150708

Posted by 공놀이나하여보세
,

http://www-preview.ri.cmu.edu/pub_files/pub3/yang_jie_1994_1/yang_jie_1994_1.pdf


HMM을 이용한 제스쳐 인식에 대해 잘 설명 되어 있는 것 같음

지금 읽는 중

Posted by 공놀이나하여보세
,

결국 YAHMM라이브러리로 사용하기로 결정~!!

아래에 자세한 설명이 있고,

https://pypi.python.org/pypi/yahmm/0.1.1


'패턴인식 - 오일식 저'의 평가, 디코딩, 학습에 대한 설명도 있다.

*평가, 디코딩, 학습에 대한 예제가 뭔지 모르는 사람은 wiki에도 있으니 확인 : http://en.wikipedia.org/wiki/Hidden_Markov_model#A_concrete_example

코드 설명 : https://github.com/jmschrei/yahmm/wiki


설치 방법도 쉽다.

그냥 

pip install yahmm

끝~!!


소스코드는 아래와 같다.

Baum-Welch 알고리즘도 구현이 됐다고 하는데 내가 책에서 봤던 것 처럼 최적화된 모델을 찾아준 건지는 모르겠다.

최적화된 모델을 찾았다면 그 모델에 대한  A, B, 초기확률 을 찾아줘야 할 것 같은데 그게 아니다.

이 부분에 대해서는 좀 더 공부를 해 봐야할 것 같다.


# rainy_sunny_hmm.py

# Contact: Jacob Schreiber

#   jmschreiber91@gmail.com


"""

Example rainy-sunny HMM using yahmm. Example drawn from the wikipedia HMM

article: http://en.wikipedia.org/wiki/Hidden_Markov_model describing what

Bob likes to do on rainy or sunny days.

"""


from yahmm import *

import random

import math


random.seed(0)


model = Model( name="Rainy-Sunny" )


# Emission probabilities

rainy = State( DiscreteDistribution({ 'walk': 0.1, 'shop': 0.4, 'clean': 0.5 }), name='rainy')

sunny = State( DiscreteDistribution({ 'walk': 0.6, 'shop': 0.3, 'clean': 0.1 }), name='sunny' )


# Add the states to the model

model.add_state( rainy )

model.add_state( sunny )


model.add_transition( model.start, rainy, 0.6 )

model.add_transition( model.start, sunny, 0.4 )


# Transition matrix, with 0.05 subtracted from each probability to add to

# the probability of exiting the hmm

model.add_transition( rainy, rainy, 0.7 )

model.add_transition( rainy, sunny, 0.3 )

model.add_transition( sunny, rainy, 0.4 )

model.add_transition( sunny, sunny, 0.6 )


# Finalize the model structure

model.bake( verbose=True )


# Lets call Bob every hour and see what he's doing!

# (aka build up a sequence of observations)

sequence = [ 'walk', 'walk', 'clean', 'shop']


print 'Evaluation : ', math.e**model.log_probability(sequence)

print 'Observation : ', sequence

logp, path = model.viterbi(sequence)


for i in range(4):

    if(i == 0):

        print 'Decoding : [', \

    

    if(path[i+1][0]==0):

        print "'Rainy'", \

        

    else:

        print "'Sunny'", \


print ']\n'


model.train( [sequence], algorithm='baum-welch' )

print math.e**model.log_probability(sequence)

print 'sequence : ', sequence

logp, path = model.viterbi(sequence)

print path


Posted by 공놀이나하여보세
,

내가 하고 싶은 문제에 대한 코드가 user guide에는 제대로 나와 있지 않아 검색해보다가 제대로 된 예제코드가 있어서 아래에 주소를 남겨 두었다.

http://sujitpal.blogspot.kr/2013/03/the-wikipedia-bob-alice-hmm-example.html


예제코드는 아래의 예제를 코딩한 것이라고 하는데 관측확률 입력값만 다를 뿐 모든 것이 '패턴인식-오일식 저'의 예제 7.4 여자친구의 삶과 동일했다.

http://en.wikipedia.org/wiki/Hidden_Markov_model#A_concrete_example


위 예제에서는 디코딩에 대한 예제만 있어서 이 예제에서 했던 방식을 통해  guide를 참고하여 7.4.1 평가 문제까지 풀었다.

guide출처 : http://scikit-learn.org/0.6/modules/generated/scikits.learn.hmm.MultinomialHMM.html

7.4.3 학습은 다음에 다루겠다.


코드 내용은 아래와 같다.

from __future__ import division

import numpy as np

from hmmlearn import hmm


states = ["Rainy", "Sunny"]

n_states = len(states)


observations = ["walk", "shop", "clean"]

n_observations = len(observations)


start_probability = np.array([0.6, 0.4])


transition_probability = np.array([

  [0.7, 0.3],

  [0.4, 0.6]

])


emission_probability = np.array([

  [0.1, 0.4, 0.5],

  [0.6, 0.3, 0.1]

])


model = hmm.MultinomialHMM(n_components=n_states)

model._set_startprob(start_probability)

model._set_transmat(transition_probability)

model._set_emissionprob(emission_probability)


# predict a sequence of hidden states based on visible states

#bob_says = [0, 2, 1, 1, 2, 0]

bob_says = [0, 0, 2, 1]


prob, arr = model.eval(bob_says)

#print model.decode(bob_says)

print "evaluation : ", exp(prob)


logprob, alice_hears = model.decode(bob_says, algorithm="viterbi")

print "Bob says:", ", ".join(map(lambda x: observations[x], bob_says))

print "Alice hears:", ", ".join(map(lambda x: states[x], alice_hears))


mode.eval은 log를 취한 값을 return해 주기 때문에 지수함수를 취한 값을 최종 결과 값으로 생각하면 된다.


이로써 내가 하려고 했던 평가와 디코딩에 대한 코딩 실험이 끝났다.

이제 학습을 공부할 차례인다.


Posted by 공놀이나하여보세
,

아래 주소에서 설치 후 자동 업로드 설정을 해주고 나니 파일 저장만 하면 자동으로 서버에 업로드가 된다~!! 대박

출처 : http://blog.readiz.com/46


Posted by 공놀이나하여보세
,

일단 아래 주소를 따라한다.

http://www.rasplay.org/?p=3051


ftp접속은 filezilla 이용

접속시 

host : sftp://192.168.219.154

username : pi

password : 비밀번호

port : 22



'Web > Server DJANGO Python' 카테고리의 다른 글

장고 설치 및 환경 설정  (0) 2015.02.28
Posted by 공놀이나하여보세
,

(1) 장고 설치

pip install django


(2) 장고 애플리케이션 서버 실행 및 애플리케이션 실행

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Python/DJango/Tutorial01

* 유의할 점

A. urls.py를 수정하고 나면 서버를 다시 실행해야 한다.

B. 3.4 URLconf 설정 시에 잘못된 것이 하나 있어서 고생했다.

아래 코드와 함께 빨간색으로 표시해 두었다.

# cat views.py import datetime from django.http import HttpResponse def hello(request): return HttpResponse("Hello world") def index(request): return HttpResponse("Home page") def currenttime(request): d = datetime.datetime.now() return HttpResponse("Current Time : {0}".format(d)) # cat from django.conf.urls import patterns, include, url from testapp.views import hello, index, currenttime urlpatterns = patterns('', url(r'^$', index), url(r'^currnettime/$', currenttime), url(r'^hello/$', hello) )


(3) 외부 접속

0.0.0.0:8080 그래도 써야 한다.

python manage.py runserver 0.0.0.0:8080


(4) html 으로 실행 가능하게 수정

http://10apps.tistory.com/54

어쨌든 성공!!


흠.. 이건 반만의 성공인 것 같다.

post와 request가 되야 해서 아래 글을 봐야겠다.

http://greenfishblog.tistory.com/category/django

http://simpleisbest.tistory.com/category/프로그래밍/Django



Posted by 공놀이나하여보세
,

- 지지벡터머신( SMV: Support Vector Machines)


01. 중매 데이터 세트

02. 데이터를 다루는 어려움

r.data[0] : 남

r.data[1] : 여

특성 : 비선형(nonlinearity), 변수 간 상호작용(interplay)

*matplotlib를 사용해서 그래프를 그렸음. 나중에 그래프 그릴 때 참조

데이터를 그래프로 확인해 보니 남녀는 각자의 나이 법위 내에서 만나는 특성이 보임

- 의사 결정 분류기 사용: 다소 복잡한 관계를 보이는 다중 숫자 입력들을 가진 문제에서 분류를 결정할 때 종종 잘 동작하지 않는다.


03. 기본 선형 분류

범주의 평균점을 계산

(1) 평균점 계산으로 두 점을 찾음 

- 불일치의 평균과 일치의 평균을 찾고 가운데 선을 그어서 일치와 불일치 쌍을 나누도록 한다.

(2) 데이터를 나누는 선을 찾음

(3) 유클리디안 거리를 사용해도 되지만 추후 확장을 고려하여 벡터와 백터 내적을 사용함

벡터 내적 : 가까울 수록 1에 근접, 0이면 수직이기 때문에 가장 다름 -1이면 멀다.

책에서는 각 평균점을 연결한 선과 평균점의 중간점과 분류할 데이터를 연결한 선을 벡터 계산하여 분류할 데이터가 어디에 가까운지 평가한다.

하지만 기본 선형 분류는 완벽히 제대로 된 분류를 하지 못하기 때문에 나중에 커널 트릭을 사용한다.


04. 분류 데이터의 특성

데이터를 분류기에 유용한 숫자로 바꿀 방법이 있어야 한다.

(1) 예 아니오 질문

(2) 관심 목록

(3) 야후 지도를 사용한 거리 계산

- 지오 코딩 API사용

(4) 새로운 데이터 세트 생성


05.  데이터 축척 조정

- 최저값을 0으로 최고값을 1로 그 다른 값을 0과 1사이의 값으로 비율을 조정함


06. 커널 기법 이해

값을 제곱하여 선형으로 분류할 수 있게 만듬

(1) 커널 트릭

- 방사 함수(radial-basis function) : 백터내적과 비슷해서 두 벡터를 받아 값을 리턴한다.

이것은 벡터내적가 달리 선형적이지 않아 더 복잡한 공간으로 매핑될 수 있다.

gamma를 바꿔가면서 적당한 값을 찾아야 한다.


07. 지지벡터머신

두 범주를 가르는 직선을 찾는 다른 경우를 보자.

각 범주의 평균점들과 평균점들을 포함하는 직선

각 범주 내 항목들에 걸친 평행선 중에 가장 멀리 떨어진 선을 구분선으로 선택

*지지벡터 : 선 근처의 점들

*지지벡터 머신 : 지지벡터를 찾아 이들을 이용해서 구분선을 찾는 알고리즘

ex) 얼굴 표현 분류, 침입 탐지, 단백질 구조 예측, 필기체 인식, 지진 발생 시 피해 규모 판단 등


08. LIBSVM 사용

SVM모델을 학습시키고 추정하며 데이터 세트 내 예측을 검증하는 오픈소스 라이브러리

svm_parameter : c - sort margin





Posted by 공놀이나하여보세
,