In saptamana a 10-a a semestrului are loc predarea proiectelor. Se va preda un fisier zip care contine codul sursa al proiectului si fisierul de documentatie descris mai sus.
Atentie: Nota finala o primiti nu pe calitatea proiectului ci pe activitatea de la laborator care consta desigur din calitatea finala a proiectului, dar si modul cum mi-ati prezentat, in decursul semestrului, progresul in cadrul dezvoltarii proiectului (cam 1 data la 3-4 saptamani ar trebui sa imi aratati ceva progres)
1. Player audio-video cu mai multe posibilitati de display. Player-ul va afisa
streamurile audio-video sincronizate si pe alte suprafete (display) decat
dreptunghiulara clasica, de ex.: pe o suprafata ondulata, pe o suprafata cilindrica, pe o sfera etc. si
va avea si efecte de output: sa afiseze imaginea in oglinda (unde oglinda este
o linie verticala sau orizontala), sa afiseze frame-urile blur, suprafata
dreptunghiulara pe care se rendeaza/afiseaza filmul sa aiba un grid de
"gauri" de forma dreptunghiulara (acestea vor fi mereu negre si nu se va afisa
pixeli pe ele) etc. (minim 6 efecte).
Sugestie de implementare: in C folosind FFMPEG si SDL(vezi si sdlPlayer).
2. Program de screen capture (recording). Programul va trebui sa faca un film
(audio-video) in format .avi sau .swf sau altceva care sa cuprinda felul cum arata
desktop-ul de-a lungul unui interval de timp (e.g. ceva in genul CamStudio).
Programul trebuie sa fie parametrizabil: sa se poata selecta codecul folosit, frame-per-second rate,
rezolutia filmului, numarul de P-frames si B-frames, containerul (.avi, .mp4 etc.), dimensiunea
maxima a fisierului rezultat.
Sugestie de implementare: in C sau C# pe Windows sau in Java; uitati-va la codul open-source CamStudio
disponibil aici si puteti folosi FFMPEG pentru codare si/sau salvare AVI.
3. Solutie completa de audio-video streaming (client+server). Se va implementa protocolul
RTP/RTCP pentru transmiterea
datelor audio-video, iar RTP va rula peste
DCCP (deci socket-urile nu vor fi TCP, nici UDP, ci DCCP).
Sugestie de implementare: in C/C++ sub Linux (deoarece DCCP este implementat doar in
kernel-ul de linux, nu si pe windows) folosind FFMPEG si SDL; vezi si exemplul sdlPlayer
4. Program pentru supraveghere video. Imaginile vor fi preluate de la o camera
video necomprimate (in formatul primit de la camera) si se vor transmite pe
retea la un program de supraveghere care le va afisa real-time ca pe un film.
Sugestie de implementare: in C/C++ sau C# pe linux sau windows; se poate si in Java
dar folositi JMF (Java Media Framework) doar pt preluat imagini de la camera, nu si
pentru streaming.
5. Program pentru sintetizare digitala a muzicii: compunere si generare de mai multe sunete
(tobe, chitara, pian), izolare, analiza.
Sugestie de implementare: C/C++, Java sau C# in windows/linux (de ex. Amsynth). Pt. lucrul
in Java cu fisiere .wav in format PCM si pt reprezentarea grafica a sunetelor
vezi XVoice.
6. Program pentru recunoastere vocala. Autentificare prin recunoastere vocala.
Sugestie de implementare: C/C++, Java sau C# in windows/linux. Programul trebuie
sa foloseasca o librarie externa pentru clasificator (de ex. libSVM) - adica programul
care invata cum arata un sample de voce corect (care trebuie autentificat cu succes)
si un sample de voce incorect (care trebuie autentificat cu eroare). Pt. lucrul
in Java cu fisiere .wav in format PCM si pt reprezentarea grafica a sunetelor
vezi XVoice sau Audacity.
7. Prezentari multimedia. Se va implementa un player de
SMIL (Synchronized Multimedia Integration Language) sau ceva echivalent. Se poate folosi JMF
(Java Media Framework) pentru asta. Programul trebuie sa permita afisare continutului web intr-un
interval fix de timp, playing paralel si secvential sincronizat a mai multor stream-uri video si audio, animatie
prin translatii simple (ca cele din CSS 3).
Sugestie de implementare: Java cu JMF.
8. Program pentru urmarirea unui obiect (nu neaparat de forma dreptunghiulara) in
cadrul unui film video. Acest obiect se va incadra intr-un cadru dreptunghiular sau
oval/circular pe parcurul derularii filmului. Pentru aceasta, trebuie sa extrageti features (ex. SIFT, SURF, BRISK, FAST, ORB)
din aprox. fiecare frame si sa faceti matching la obiectul initial in acest set de features.
Sugestie de implementare: in C/C++ folosind FFMPEG si OpenCV pentru extragere de features si
matching features; vezi si sdlPlayer. Va puteti inspira pentru
detectia obiectului din codul librariei
OpenCV
9. Program de audio-video conferinta. Programul trebuie sa cuprinda si instant
text messaging (chat).
Sugestie de implementare: in C/C++ folosind FFMPEG sau in Java cu JMF sau in C#.
Sau se poate implementa si pe web in javascript folosind WebRTC cu websockets, dar sa permiteti ca mai
mult de 2 participanti sa participe la conferinta.
10. Program pentru editare video: taiere, alipirea unei secvente (nu neaparat
de aceeasi rezolutie). Programul trebuie sa permita si adaugarea/eliminarea de sunet, dar
si text care sa apara in cadrul filmului.
Sugestie de implementare: in C/C++ folosind FFMPEG.
11. Sa se scrie un framework pentru creat playere audio-video in Java bazat pe FFMPEG.
Framework-ul va fi asemanator cu JMF (Java Media Framework). Framework-ul va trebui
sa implementeze si sa apeleze prin JNI (Java Native Interface) cel putin functiile
folosite de mine in player-ul pe care vi l-am aratat la curs (sdlPlayer).
Cu alte cuvinte, se cere un wrapper in Java peste apelurile mai importante din FFMPEG
(apelurile folosite intr-un player audio-video).
Implementare: in Java.
12. Sa se dezvolte un player video bazat pe FFMPEG. Player-ul va play-a totdeauna
2 stream-uri video. Un stream va fi redat mereu pe o suprafata normala, dreptunghiulara,
dar cel de-al doilea stream va fi redat in cadrul unei forme geometrice (specificata
prin puncte intr-un fisier de configurare) inclusa in suprafata dreptunghiulara
in care se va reda primul stream video.
Sugestie de implementare: in C/C++ cu FFMPEG si SDL; vezi si sdlPlayer.
13. Interfata vocala pentru browser-ul Mozilla Firefox. Interfata vocala va consta dintr-o
parte de recunoastere vocala (cu sau fara training, cateva comenzi: File, Open, Close, Refresh,
Tools, Preferences etc. si cateva comenzi care sa incarce cateva URL-uri - ex. www.google.com)
si un plugin de firefox care sa execute aceste comenzi.
Sugestie de implementare: C sau Java; pt lucrul cu sunet in format PCM (asa vine de la microfon)
vezi si XVoice. Pentru training/clasificare se poate folosi o librarie externa - libSVM.
14. Program pentru detectia miscarii si a marginilor/conturului (motion detection and
edge detection) in imaginile provenite de la o camera video de supraveghere.
Sugestie de implementare: in C cu FFMPEG sau in Java cu JMF; Va
puteti inspira pt detectia conturului si miscarii din codul librariei
OpenCV.
15. Sa se scrie un program care pimeste la intrare un set de imagini, text si
sunet si face din acestea o prezentare sub forma unui film format .avi sau .swf.
Va exista si un fisier de descriere/configurare a prezentarii (filmului) produse.
Acest fisier va trebui sa precizeze cel putin urmatoarele:
- cate milisecunde sa dureze afisarea fiecarei imagini
- ordinea imaginilor
- cand sa fie playate sunetele si cat sa dureze fiecare
- cand si in ce parte a ecranului sa fie afisate sunetele
- efecte de tranzitie de la o imagine la alta: fading, explode, fly aside.
Sugestie de implementare: in C cu FFMPEG; vezi si
MJpeg Tools.
16. Sa se scrie un program de comunicatie Voice over IP simpla. Programul va lua
ca input voce de la microfon, va comprima acest semnal audio folosind algoritmul
A-Law sau
u-Law si il va
trimite pe retea (prin socket) la un receptor care va decodifica semnalul audio
si il va reda la speaker.
Sugestie de implementare: C sau Java; vezi pentru lucrul cu formatul PCM (asa cum
vine de la microfon) XVoice.
17. Program de Peer-2-Peer video streaming. Acest program va trebui sa functioneze ca peer (nod)
intr-o retea Peer-2-Peer, adica va implementa si functionalitate de server si de client. Fiecare
peer va partaja cateva fisiere avi; vor exista mai multe peer-uri care partajaza acelasi fisier avi.
Se va implementa un proces minimal de cautare de filme in aceasta retea peer-2-peer si se va
implementa streaming-ul unui film de la mai multe surse catre un singur receptor. Asa ca
receptorul va play-a o parte din film de la un peer, alta parte de la alt peer si asa mai departe.
Sugestie de implementare: in C/C++ cu FFMPEG.
18. Sa se scrie un codec de MP3. Programul va codifica in format mp3 un fisier .wav (in
format PCM) pe care il primeste la intrare.
Sugestie de implementare: in C sau Java. Pentru formatul unui fisier .wav PCM vezi si
XVoice.
19. Sa se scrie un program care salveaza (in format .swf sau .flv sau .avi sau altceva) pe harddiscul local
clipuri de pe youtube.com. Programul va trebui sa implementeze un miniclient de HTTP pentru a face o cerere
(HTTP GET Request) la un URL de pe youtube, va trebui sa parseze raspunsul html primit de la serverul
youtube in cautarea url-ului filmului si apoi va trebui sa trimita o cerere la acest URL al filmului si
tot ce primeste ca raspuns salveaza intr-un fisier .avi local. Programul va trebui sa poata sa converteasca
firmul salvat in cel putin 2 formate (folositi FFMPEG pentru asta).
20. Sa se scrie un encoder JPEG pentru suprafete geometrice non-rectangulare (e.g. cerc, triunghi, elipsa,
paralelogram, trapez - doar una ditre ele). Se va folosi encoderul JPEG a carui surse se afla in
directorul source code si care comprima in format JPEG o poza dreptunghiulara.
21. Sa se scrie un program care compara 2 melodii audio (sau secvente de melodii) si spune daca
acele doua melodii sunt identice sau nu. Trebuie sa extrageti features din cele 2 melodii (folosind
Discrete Cosine Transform si Discrete Fourier Transform) si sa comparati cei 2 vectori de features
corespunzatori celor 2 melodii.
22. Sa se scrie un program care converteste un sunet (i.e. fisier audio) la o imagine si invers.
Ideea este ca o imagine, la fel ca un stream audio consta dintr-un vector de sample-uri. Prin urmare
acest vector de sample-uri, dupa ce este trecut prin cateva filtre, ar putea fi (teoretic) play-at/randat
fie ca sunet, fie ca imagine. Sa implementati mai multe filtre, nu sa considerati direct ca vectorul de
sample-uri audio reprezinta un vector de sample-uri video.
23. Implementarea unui sistem de navigare panoramica asemanator lui Google StreetView, fie cu imagini
fie cu stream-uri video (asemanatoare cu cele de aici http://www.360cities.net/).
24. Proiect de realitate augumentata (augmented reality). De exemplu sa faceti o aplicatie care foloseste o poza ca input (sau un film),
de exemplu poza voastra, si va arata cum ati arata daca ati avea o anumita haina sau un anumit tip de ochelari
de soare sau pantaloni, camasa etc. Programul poate fi implementat pt desktop computer sau pt smartphone.
Sugestie de implementare: folositi OpenCV pentru matching (i.e. pentru a detecta poza voastra in filmul/poza de intrare)
si apoi suprapuneti peste o parte din acest obiect haina respectiva (haina este o poza).
25. Player video html5 construit cu javascript. Player-ul trebuie sa poata sa receptioneze video-uri de la un streaming server (se poate folosi gstreamer sau vlc sau ffmpeg pentru streaming server). Frame-urile se pot trimite pe retea necomprimate sau comprimate (caz in care se va folosi o implementare externa a codecului in javascript).
26. Program de screen capture (recording). Programul va trebui sa faca un film
(audio-video) in format .avi sau .swf sau altceva care sa cuprinda felul cum arata
desktop-ul de-a lungul unui interval de timp (e.g. ceva in genul CamStudio).
Programul trebuie sa permita utilizatorului sa plaseze caption-uri (un fel de subtitrare) pe streamul video
care sa fie afisate intr-un anumit interval de timp si in pozitii customizabile: jos, sus, stanga sau drepta ecranului.
Sugestie de implementare: in C sau C# pe Windows sau in Java; uitati-va la codul open-source CamStudio
disponibil aici si puteti folosi FFMPEG pentru codare si/sau salvare AVI.