Category Archives: szoftver/hardver

Coursea – Computer Vision: From 3D Reconstruction to Visual Recognition

Courses for Everyone.

We offer a wide range of courses from our partner institutions, spanning the humanities to engineering. Find a course that interests you and join today to learn alongside our global community!

https://www.coursera.org/course/computervision

Computer Vision: From 3D Reconstruction to Visual Recognition

Silvio Savarese, Assistant Professor
Fei-Fei Li, Assistant Professor

This course delivers a systematic overview of computer vision, emphasizing two key issues in modeling vision: space and meaning. We will study the fundamental theories and important algorithms of computer vision together, starting from the analysis of 2D images, and culminating in the holistic understanding of a 3D scene.

ROBOTIKA 1 jegyzet (a kiegészítéseket frissítem folymatosan)

program flow diagram (folyamatábra) (ez állhat elágazásokból és ciklusokból)

Elágazások (szelekció): kétirányú (if, else) vagy sokirányú elágazás lehet (switch?

igaz/hamis vizsgálat – megvizsgáljuk a feltételt hogy melyik állapotnak fele meg

ciklusok:

előlteszetelő (pl. for, ami egy ún. számláló ciklus)

hátulteszetelő (while)

UML Unified Modeling Language (ez egy folymatábra rendszer?)

Egy program részei:

változók

elágazások

ciklusok

tömbök

 

 

típusos (c++) (meg kell mondani neki a változó típusát, hogy egész szám-e (int, ami az integer rövidítése) vagy lebegő pontos (ún. float) és típusfüggetlen nyelvek (php)

most típusos nyelveket veszünk

adattárolási egységek: 

bit=1/0, byte=8bit (00000001), word=2byte=16bit, d word= 4byte=32bit

ilyen processzorok vannak a gépekben

 

cisc processor konkrét utasítássokkal dolgozik, pl mikrokontrollerben, (másik a risc)

regiszeterekben történik a műveletek elvégzése

órajel

 

compiler – gépi kód

Compiler: a fordító a forráskódból előállít egy bináris verziót amit a futtató hardver értelmezni tud. C++ platformfüggetlen programozási nyelv.

Interpreter: a forráskódból nem csinál gépi kódot, az értelmező rendszer soronként érelmezi a kódot és egyből lefuttatja.

 

számrendszerek, kettes azámrendszer egy 8 bites rendszeben

helyi értékek: 128 64 32 16 8 4 2 1,

11111111=255

00100000=32

7bit plusz 1 az előjelnek: -127 — 127 lehet tárolni (-1111111)(+1111111)

 

 

Változókban tároljuk ideiglenesen az értékeket, (pl egy szenzor által mért értéket)

C nyelv, változókat lehet rendelni bitekhez

adatokat változókban tároljuk el (vannak lebegőpontos tárolók is)

char -mindig előjeles változó

byte -nem előjeles, unsigned char

short -mindig 2byte (word)

int -d word, 32 bit

long -dd word

longlong

-lebegőpontos értékek:

float (lebegő pontos, tehát nem egész szám)

double (kétszer olyan hosszú, mint a float, tehát kétszer olyan hosszú számot képes tárolni)

string

A változóknak van hatóköre: akkor jön létre, ha létrehozom, és addig tárolódik, amíg

 

PL:

Egy lámpa fényerejének mérésével kapok egy értéket. Azt egy változóban kell tárolnom, és nevet is kell neki adnom, hogy később tudjam, hogy milyen néven kell rá hivatkozni a programban. (A lámpa fényerejének mért értéke mondjuk 0,12)

A programban először létre kell hoznom egy változót, amit úgy tehetek meg, hogy kiírom, hogy milyen fajta változót akarok létrehozni.

Mivel a mért érték amit tárolni akarok a változóban nem egész szám ebben az esetben egy float típusú változót kell használnom, tehát

változótípus változónév;

float fenyero;

(Azért “fenyero” a változónak a neve, hogy később is tudjam, hogy minek az értékét tárolom benne, és azért nincs ékezet, mert a programnyelv nem szereti az ékezetes változónevet.)

 

struct { }

constructor, destructor

 

változók élettartama: kapcsos zárójellel jelezzük a szkópokat, scope?

a függvény definiálása is szkópot jelent, ami belül van LOCAL az felül írja a külső GLOBAL definíciót a lefutás végéig, utána visszatér a külsőhöz

 

(result) name (p0, p1, ..) { }

 

lehet függvény prototípust deklarálni előre

 

ELÁGAZÁSOK:

legegyszerűbb módja az if { } ha igaz-1 akkor lefut, ha hamis-0 akkor nem fut le (csak a 0 a hamis minden más szám igaz)

if{ } else{ } ha hams akkor az else fut le, boolean

Logikai feltételt fogalmazunk meg, operátorokkal (aritmetikai -szorzás, osztás, kivonás stb.- vagy logikai -és, vagy, nem egyenlő, kisebb, nagyobb stb.)

bool érték lesz a végeredmény tehát vagy igaz vagy hamis

if { } else if { }  else { }

logikai műveletek igazság táblázata

 

SZÁMRENDSZEREK:

nyolcas és tizenhatos

8 bites portokra írunk ki számokat az arduinonál, decimális számot kell átszámolni ehhez -kettes és tizenahtos számrdsz.-

tizenhatos: A B C D E F 0 1 2 3 4 5 6 7 8 9

A 0–9 számjegyek használata értelemszerű (azaz: a tízes számrendszernek megfelelő), az A számjegy 10-et, a B számjegy 11-et, a C számjegy 12-t, a D számjegy 13-at, az E számjegy 14-et és az F számjegy 15–öt jelöl (ez összesen 16 számjegy, hiszen a nulla az első).

 

CIKLUSOK:

for (kezdőérték;végérték; lépésköz)  { ebben fut a ciklus, magyaraul a végrehajtandó utasítások }

pl: for (int kiskacsa =0; kiskacsa<30; kiskacsa++)

ez azt fogja csinálni, hogy a kiskacsa kezdőértéke nulla; amit harmincig akarok növelni;eggyel

for (int kiskacsa =40; kiskacsa>30; kiskacsa–)

for ciklus számlálóciklus, ami a{}közötti részt azaz a ciklusmagot annyiszor hajtja végre amíg a ciklusváltozó (ebben az esetben “kiskacsa”) értéke nem éri el a megadott végértéket

break-kilép a ciklusból- és continue-ciklus elejére visz-

while () { }

do  { } while ()  { }

wikipedia

Operátorok:

értékadó operátorok (pl = vagy +=, *= )

pl int kiskacsa = kiskacsa*2  ez ugyanaz, mint int kiskacsa*=2

öszzehasonlító operátorok (==, vagy a >

int kiskacsa = 20;

int kiskacsa = 20+1 de ez egyenlő azzal, mint ha azt írnám, hogy

kiskacsa++ (egyel megnöveli a kiskacsa értékét)

== ezzel tudok két értéket összehasonlítani

TÖMB: egy tömbnek minden eleme ugyanolyan. A C stílusú tömb azonos típusú adatok halmaza, amelyek a memóriában folytonosan helyezkednek el. Csak alapértelmezett konstruktorral rendelkező (minden beépített típus ilyen) típusokból lehet tömböt létrehozni. A tömb elemeire a tömb nevével és az indexelő operátorral hivatkozhatunk.

Pointer: Amikor egy változót definiálunk, a memóriában létrejön egy megfelelő méretű tároló, amelybe bemásolódik a kezdőérték. Érték szerinti átadás.

Referencia szerinti átadás.

 

Szintakika vagy szintaxis: http://wiki.prog.hu/wiki/Szintaxis

 

ARDUINO:

mikrokontroller, lábai ki vannak vezetve ki és bemenetekre, in/out (port)

http://arduino.cc/en/Reference/HomePage

 

 

Köszönet a jegyzetért Harsányi Rékának.

Valamint köszönet Pomozi Péternek a korrepetálásért.

 

sztereo kamera renderelő scrpit a 3DS Max-hoz

A Maya-ba be van építve a sztereo kamera renderelő, de a Max-ba nem tettek gyárilag. Erre kínál megoldást a következő script:

http://area.autodesk.com/blogs/louis/stereoscopy_in_3ds_max_with_stereocam_modifier

(lehet, hogy a link megnyitásához regisztrálni kell az oldalra, de egyébként is érdemes, mert ez a nem-gyári fejlesztők hivatalos oldala az Autodesk-nél)

A következő MAXScript file fog letöltődni:

StereoCamModifier_V1_7_3

Ezt a 3DS Max-on belül script-ként futtatni lehet.

nagyobb mérethez kattints a képre

 

 

nagyobb mérethez kattints a képre

 

A Max-ban található két kamera típus közül csak az ún. free camera-val fog működni.

nagyobb mérethez kattints a képre

 

A kijelölt free camera-ra rátehető, mint modifier.

nagyobb mérethez kattints a képre

 

Ha rátetted, akkor a modifier így fog kinézni:

nagyobb mérethez kattints a képre

 

Ha a megjelenítés a viewport-ban bug-os, akkor a viewport beállításainál a legjobbra kell felhúzni az átlátszóság beállítását.

3dscan 2

Kipróbáltuk a lézer helyett projektorral való szkennelést, működni látszik. Vélhetőleg jobban kontrollálható videokamera sokat javítana az eredményességen, de lehet, hogy egy jobb, fókuszálható lézer és 1 azt mozgató finom motor még többet segítene.

Picit próbáltam utánanézni program példáknak, illetve működési leírásoknak, hogy jobban érthető legyen, mit is csinálunk, íme néhány forrás:

http://www.instructables.com/id/Structured-Light-3D-Scanning/

http://code.google.com/p/structured-light/downloads/list

a structured light eredeti kezdőoldala (mára obsolete, de tanulságos):

https://sites.google.com/site/structuredlight/

A processing példák minimális programozási tudással használhatók, érdemes megérteni a structured light scanning működését (ilyen a kinect), és a vonalszkennelő megoldások különdbségeid (ilyen a davidscanner).

3d laserscan

 

az elkészült modell obj formátumban (zip):  Spalackcan

A szoftverek, leírás letölthető innen:

http://www.david-laserscanner.com/

Kell hozzá egy vonallézer, vagy egy vékény fényes vonalat vetíteni tudó eszköz (vélhetőleg projektorral is meg lehet oldani. Langh Robi tud bővebb felvilágosítást adni, ha megkéritek szépen, szerintem meg is mutatja.

OGRE engine

Az OGRE engine-t innen lehet letölteni:

http://www.ogre3d.org/download/sdk/

Unity game engine

a unity game engine-t innen lehet letölteni:

http://unity3d.com/unity/download/

kinect cuccok

íme néhány példa 3d szkennelésre:

http://nicolas.burrus.name/index.php/Research/KinectRgbDemoV6?from=Research.KinectRgbDemoV3

nézzétek meg a videókat

és érdemes az devágó openframeworks oldalakat is megnézn, sok letölthető anyag van, ami megkönnyíti az elindulást (ez csak néhány péda, nem ástam bele magam):

http://forum.openframeworks.cc/index.php/topic,7525.0.html

http://www.freenect.com/kinect-now-supported-in-openframeworks-cool-d

https://github.com/ofTheo/ofxKinect

http://kinect.dashhacks.com/openframeworks

http://www.benmcchesney.com/blog/2010/12/open-frameworks-kinect-sound/

 

és persze a kinect-hacks oldal:

http://kinect.dashhacks.com/

 

 

néhány további videó youtube-on:

http://www.youtube.com/watch?v=XejNctt2Fcs

http://www.youtube.com/watch?v=zqZSTieHxqk

http://blogs.nyu.edu/blogs/jfg201/tischasiamocap/

 

 

Robin javaslatára küldöm az alábbi linket is, ami a MoCap alternatívája lehet. Ez egy adaptív evolúciós alapon működő mozgásszimulátor.

http://www.naturalmotion.com/euphoria

 

Ez pedig egy Auotdesk szoftver, ami alkalmas valós idejű mozgásszimulációra.

kinect és PC driver

kinect-ből ezt találtam legolcsóbban:

http://www.konzolstudio.hu/index.php?action=1&product_akt_pt_id=5140

és itt a driver PC-re:

https://github.com/OpenKinect/libfreenect