Sunday, November 15, 2009

Video Kirpmak

Bir AVI video'nun parcasini kesip cikartmak icin

mencoder -ss 00:09:00 -endpos 00:02:00 -oac copy -ovc copy kaynak.avi -o parca.avi

Ustteki komut kaynak.avi dosyasinin 9'uncu dakikasindan 2 dakikalik parca cikartip parca.avi dosyasina kaydediyor. Dikkat: Ustteki seceneklerde "endpos" ibaresinin tercumesi "bitis noktasi" olmasina ragmen komut "reklam edildigi gibi" islemiyor.

Thursday, November 12, 2009

SrPy

Java JVM icinde Python kodu isletebilen Jython, C kodlari kullanan Python kutuphaneleri ne yazik ki isletemedigi icin Scipy, Numpy gibi icinde C kodu iceren kutuphanelere erismek icin, ayri sureclerde (process) isleyen Python kodlari lazim. Bu baglanti Python -> Python iletisimi olacak; Client tarafindaki Python, Jython ile isleyecek, server tarafi ise bildigimiz komut satirindan "python" komutu ile baslattigimiz kodlar olacak. Bu kodlar her turlu C bazli kutuphaneye erisebilecek, sonucu baglanan tarafa dondurecek.

SrPy, Simple Remote Python paketi iki surec (process) arasinda uzak cagri (remote procedure call) yapilabilmesini sagliyor. Kurmak icin

http://code.google.com/p/srpy/

adresinden kodu indirin, actiktan sonra python ez_install.py ile kodlari kurabilirsiniz.

Deneme icin server.py adli bir dosyada
from pylab import *

def doit():
return normal(0,sqrt(10))
Simdi srpy kurulan dizine girerek: python srpy/srpyapp.py isletelim. Bu bir server sureci baslatacak. Soyle bir ekran geliyor:
SRPy Server - Simple Remote Python, Network Server
http://code.google.com/p/srpy/ - updates, documentation, examples and support
Starting Basic Server...
URI info:
PYRO://127.0.1.1:7766/[BIR SAYI]
Client tarafi ise suna benzer:
import sys
sys.path.append('[SRPY DIZINI]')
import srpy

pyeng=srpy.PythonEngine("[PYRO IBARESINI ICEREN URL TAMAMEN]")
pyeng.imp("sys")
pyeng.eval("sys.path.append('[SERVER.PY KODUNUN DIZINI]')")
pyeng.exe("from server import doit");
pyeng.exe("x = doit()")
print pyeng.get('x')
pyeng.exe("x = doit()")
print pyeng.get('x')
pyeng.exe("x = doit()")
print pyeng.get('x')
Ustteki kodu Jython ile islettigimizde Numpy uzerinden uretilmis bir rasgele sayinin ekrana basildigini gorecegiz.

Simbad, Sensor, Python

Simbad kodlari icinde az sayida Python ornegi var; sensor ekleyen bir ornek yoktu. Java kodlarini Jython uzerinden Python'a aktarirken biraz takla atmak gerekiyor, mesela bir class'in static metotlarini tum class'i import edip fonksiyonel cagri yaparak isletiyorsunuz.

Alttaki kod bir Robot'a 12 tane sonar sensoru ekleyerek sifirinci sensor'un degerini belli araliklarla ekrana basmanin ornegini gosteriyor.
from simbad.gui import *
from simbad.sim import *
from simbad.sim.RobotFactory import addSonarBeltSensor
from javax.vecmath import *

# a very simple robot controller
class MyRobot(Agent):
def __init__(self, vector, name):
Agent.__init__(self, vector, name)
self.sonars = addSonarBeltSensor(self, 12)
def initBehavior(self):
# nothing to do
pass

def performBehavior(self):
if self.collisionDetected():
self.setTranslationalVelocity(0)
else:
self.setTranslationalVelocity(0.2)
if self.getCounter() % 100 == 0:
print "Sonar num 0 = " + str(self.sonars.getMeasurement(0))


# description of the environment
class MyEnv(EnvironmentDescription):
def __init__(self):
# put a robot
self.add(MyRobot(Vector3d(0,0,0),"robot with python"))
# put a box
self.add(Box(Vector3d(3, 0, 0), Vector3f(1, 1, 1),self))

# launch simbad
simbad = Simbad(MyEnv(),0)

Sunday, November 8, 2009

Simbad

Robot simulatorlerinden Simbad Java bazli ve kullanimi ve kod yapisi temiz bir yazilim. Kurmak icin alttaki adimlari takip etmek lazim.

Java 3D icin https://java3d.dev.java.net/binary-builds.html dizininden j3d-1_5_2-linux-i586.bin indirin. Sonra

cd $JAVA_HOME/jre
sudo sh /dizin/yeri/j3d-1_5_2-linux-i586.bin

ftp://ftp.freedesktop.org/pub/mesa/current/ adresinden 2.4 uzeri olmasi lazim, alttan kaynaklari indirin, sonra configure, sudo make install.

http://packages.ubuntu.com/source/jaunty/libdrm adresinden ayni hareket.

http://xorg.freedesktop.org/releases/individual/proto/ 1.99 sonrasi versiyon lazim.

Ardindan komut satirindan sunlari isletin:
sudo apt-get build-dep libdrm mesa
sudo apt-get install linux-headers-`uname -r`
sudo apt-get install libxi-dev libxmu-dev x11proto-xf86vidmode-dev
sudo apt-get install git-core autoconf automake libtool
Simdi eger robot kodlamamizi Python uzerinden yapmak istiyorsak, Java JVM icinde Python isletme yetenegine sahip olan Jython kodlarini indirmemiz lazim. http://www.jython.org/Project/download.html adresinden installer programi indirelim, java -jar [installer] ile kuralim. Guzel. Artik Simbad kodlarini indirebiliriz http://simbad.sourceforge.net. Kodu actiktan sonra o dizine cd komut ile girelim ve en ust seviyeden alttaki komutu uygulayalim:

java -cp lib/simbad.jar:[JYTHON DIZINI]/jython.jar org.python.util.jython python/simple_plan.py

Sonuc olarak alttaki gibi bir ekranda robotumuzu goruyor olmamiz lazim. "Run" dugmesine tiklayarak robotun otonom olarak hareket ettigini gorebiliriz. Robotun uzerindeki olcum aletleri ayni anda degerlerini sol ust kosedeki ekranda gostermeye baslayacaktir.

Not: Jython pur Java ortaminda calistigi icin bazi Python kutuphanelerini isletemiyor. Numpy, Scipy bu kutuphanelerinden bazilari. Biz bu kutuphaneleri bir client -> server mimarisi uzerinden isletecegiz; boylece server tarafi "pur Python" olabilecek ve her tur temel Python kodu isletebilecek, client tarafi ise Simbad iliskilerini halledip agir hesaplamalar icin server'a baglanacak. Niye pur Python illa lazim? Cunku Numpy, Scipy aleminden faydali onemli kodlar var, ve bilimsel hesaplama baglaminda bu kutuphanelerde bir standardizasyona gidiyoruz, bu sebeple o kodlar kullanimda olmali. Bu konuyu ileriki yazilarda isleyebiliriz.

Wednesday, November 4, 2009

Pyrobot

Python dili kullanarak simulatorde robot kodlari isletmek icin Pyrobot adli bir paket kullanilabilir. Kurmak icin CVS kaynaklarindan indirmek en iyisi. Derleme yapmadan once alttaki paketleri apt-get ile almak lazim (oldukca buyuk bir liste evet).
sudo apt-get install swig python-numpy python-imaging python-imaging-tk
python-tk tix libjpeg62-dev libgtk2.0-dev libtool autoconf g++ util-linux
python-setuptools robot-player robot-player-dev stage
Ardindan pyrobots dizinine girip "make" isletilebilir, sorulan tum sorulara olagan deger ile (enter'e basip) cevap vermek yeterli.

Derleme sonrasi ufak bir hata (bug) manuel olarak tamir edilmeli. bin/pyrobot ve system/version.py dosyalarina girip en bastaki "-e[bosluk]" ibaresini silin. Bu kadar. Artik bin/pyrobot ile programi baslatabilirsiniz.

Suradaki flash bazli video faydali. Ilk deneme (sol ustteki dugmeler uzerinden) server icin PyrobotSimulator, dunya icin Tutorial, robot icin Pyrobot60000.py ve robot beyni icin Avoid.py uzerinden yapilabilir. Pyrobot daha cetrefil dunyalari ve robot sekillerini de paylasiyor.

Kaynak

Regresyon, Least Squares

Dogrusal / lineer regresyon, risk fonksiyonu

Baglanti