Tuesday, January 19, 2010

Concept Video Conference

Am adaugat un exemplu nou in distributia de Concept: Concept Video Conference. Este un sistem minimal, demonstrativ pentru chat (text+audio+video). Nu foloseste database, useri etc ... pur si simplu toti ce-l acceseaza vad pe toata lumea si aud pe toata lumea, iar asta folosind doar sistemul de mesagerie interna Concept.
Ca de obicei, totul este cross-platform, aceleasi api-uri indiferent se sistem (prin plug-in-urile OpenCV, portaudio si speex pentru compresie de voce).

Tuesday, January 12, 2010

Șpici ricognișăn

Am adaugat feature-uri noi atat in GyroGears cat si in Concept Client.
Incep cu concept client in care am adaugat Julian, o biblioteca extraordinara pentru speech recognition. Este foarte customizabila (dictionarele se configureaza fonetic, ca urmare poate fi folosita perfect si pentru limba romana). Se comporta absolut identic pe Windows si pe Unices (inclusiv OS X). Am inclus un dictionar de test pentru cateva cuvinte.
Screen-urile sunt de pe OS X si Win32.





Am pronuntat "dial five" corect, si "dia' fie" ... si a recunoscut suprinzator de bine.

Acum, pe Gyro, am incorporat webcam-ul. Astfel, la tipul de date "picture" exista optiunea "Allow webcam capture" ceea ce va lasa userul sa faca o poza cu webcam-ul direct in aplicatia gyro. Rezultatul arata cam asa:

Butonul incercuit e cel de "get from webcam", moment in care ni se deschide:
... aceasta fereastra. Am pozat monitorul .... dupa ce i-am dat ok, a intrat in baza de date, totul fiind generat 100% automat (fara nicio linie de cod).

Sunday, January 10, 2010

OpenCV embedded in Concept Client

Am reusit sa integrez OpenCV in Concept Client, avand acum acces pe aceiasi interfata (cross-platform) la webcam. Odata cu accesul la camera video vine si un set de functii foarte interesante, de genul motion detector sau object detector. Cel din urma este chiar interesant, pentru ca pe baza unor xml-uri de configurare, poate detecta fetele umane, corpuri, etc.. API-urile OpenCV sunt foarte comode, iar eu am incercat sa le simplific si mai mult. Clientul acum este capabil sa inregistreze si video direct de pe webcam sau sa faca streaming.

... totul in realtime !

Wednesday, January 6, 2010

Jucarii noi

Acum, daca tot am implementat tot ce mi-a trecut prin cap, am inceput sa ma joc. Prima problema de care m-am lovit a fost "shaped window" (de fapt, in Concept poate fi shaped-anything). Problema era ca trebuia setat in bitmap in format xpm. Foarte frumos, doar ca pe windows e relativ dificil sa gasesti unelte cu care sa faci xpm-uri. Atunci, am zis asa: setezi un png cu transparenta ca mask. Unde ai bit transparent, nu vei avea "fereastra" iar unde ai orice altceva, vei avea canvas.
Dupa cum se vede, este suficient sa setez o imagine ca mask, pt o fereastra rotunda. Atentie doar la ferestrele "principale" ce au obligatoriu titlebar (cel putin pe Win32). Solutia e sa creati o fereastra "copil" (transistient for). Aici, m-am jucat putin, si am setat o imagine ce era si vizibila, ca mask. O problema a fost suprapunerea imaginii peste fereastra (pentru ca apare o diferenta data de border-ul ferestrei. Ca solutie, am pus un scrollbar in spate, si m-am jucat doar din pozitia pe verticala, asa cum vezi aici:
E un pic de munca de trial and error potrivirea lor, dar merita in final, mai ales ca volumul de munca este simtitor mai mic decat pe orice alt framework.

Tot la capitolul joaca, sunt 2 noi feature-uri: Metoda Screenshot pentru controale si proprietatea DragIcon ce acum accepta orice, nu numai obiecte de tip RImage.

Astfel, pentru un buton, putem spune WriteFile(CApplication::Screenshot(button1), "button1.png") rezultand fisierul button1.png pe SERVER cu "fotografia" controlului, asa cum se vede pe client, cu skin-ul aplicat.

DragIcon-ul poate fi setat chiar cu controlul:
button1.DragIcon=button1;

Nu se vede cursorul mouse-ului in shot, dar e suficient sa-ti faci o idee cum am luat butonul de pe fereastra si i-am facut drag in afara ferestrei.

Observatie: Shaped-window nu este functional pe Mac OS X.

Saturday, January 2, 2010

Relatii neomogene

In sfarsit am reusit sa termin ceva ce-mi doream de foarte mult timp: relatii neomogene. Astfel, putem aveam o relatie intre o entitate si N alte entitati folosind acelasi membru (randate in acelasi view), fara ca cele N entitati sa aiba elemente comune.

Am atasat un screenshot in care avem o proprietate Media ce accepta Video sau Imagini, 2 entitati total diferite. In primul screenshot avem interfata de definire din Gyro:


Iar rezultatul arata cam asa:


Relatiile pot fi de tip many sau de tip one ("nomenclator", respectiv "exclusive"). In continuare, totul se poate face si prin drag and drop (view-ul stiind singur ce poate accepta si ce nu).

Un elemente cheie aici este posibilitate ordonarii entitatilor in view. Daca bifam "Reorderable" vom putea aseza elementele in view in ce ordine dorim. Ordonarea inca n-o putem face prin drag and drop (trebuie dat click drapta si Up sau Down).

Cu asta inchei sesiunea de lucru intensiv de sarbatori, sperand ca am reusit sa intaresc platforma.