Documente Academic
Documente Profesional
Documente Cultură
1
• Fereastră Live video – afişează continuu imaginile primite de
la camera video. Rezoluţia la care se realizează afişarea este
320x240 pixeli. Vizualizarea poate fi întreruptă prin apăsarea
butonului Pause.
• Fereastră informaţii utile – afişează informaţii despre data şi
ora curentă, cât timp a rulat aplicaţia, numărul de cadre
salvate. Reîmprospătarea informaţiilor se face automat.
• Sigla aplicaţiei – este afişată în colţul dreapta sus.
• Reglaj senzitivitate – permite reglarea senzitivităţii
supravegherii. Valorile posibile sunt între 0 şi 100. O valoare
de 0 înseamnă că diferenţa dintre două cadre trebuie să fie de
100% pentru ca aplicaţia să salveze un cadru. O valoare de
100 înseamnă că diferenţa între cadre trebuie să fie 0 pentru
ca aplicaţia să salveze un cadru. În urma testelor a rezultat că
valoarea optimă pentru senzitivitate este aproximativ 65.
• Reglaj rată verificare – permite reglarea perioadei la care să
se facă compararea de cadre. Valorile posibile sunt între 1 şi
10. Valoarea 1 înseamnă că verificarea se face la fiecare 2
secunde, valoarea 10 înseamnă că verificarea se face la
fiecare 0.2 secunde.
• Istoric supraveghere (History) – furnizează informaţii utile
despre diferenţele între cadre. Este activat doar când
supravegherea este pornită. Cu o linie de culoare roşie este
afişat pragul de senzitivitate stabilit. Sub formă de
dreptunghiuri galbene sunt reprezentate diferenţele între două
cadre analizate succesiv. Dacă o diferenţă trece peste pragul
de senzitivitate, se salvează automat ultimul cadru analizat.
Este foarte util pentru calibrarea sistemului de supraveghere
având în vedere faptul că pot exista variaţii ale calităţii
semnalului.
• Intrare în submeniul Image – este un submeniu care permite
vizualizarea, mărirea şi listarea la imprimantă a imaginilor
capturate manual sau automat
• Captură manuală de cadru – la apăsare se realizează captura
unui cadru, cadru care este salvat într-un fişier ce include în
numele lui ora exactă (la precizie de milisecundă) la care s-a
realizat captura, fişier aflat într-un director cu numele data
curentă
• Buton pornire/oprire supraveghere – permite oprirea/pornirea
operaţiei de supraveghere. Implicit este Off.Salvarea
imaginilor se face în format .JPG.
2
Informaţii utile
Fereastră Siglă aplicaţie
Live video
Intrare în Reglaj
submeniul Image senzitivitate
History
furnizează
Supravegherea informaţii
este activată
3
• În partea din stânga sunt afişate imagini scalate (thumbnails)
ale imaginilor salvate. Prin selectarea uneia dintre aceste
imagini, în partea din dreapta a ecranului apare imaginea la
mărimea ei originală (vezi Figura 10.4).
• Sub imagine se dau informaţii despre data şi ora exactă la
care a fost capturată imaginea.
Imaginea
afişată
Preview Data şi ora
imagini şi capturării
selectare
Buton Back
Buton Revert
Imaginea mărită
4
• Prin apăsarea butonului Print aparea fereastra standard de
printare din Windows. Imprimarea se realizează pentru
imaginea originală sau imaginea mărită, în funcţie de
operaţiile efectuate asupra imaginii (vezi Figura 10.6).
5
Exemplul 10.1. Interfaţa aplicaţiei GSS cu camera video
/**
Aceasta clasa creaza un processor pentru dispozitivul de capura care a
fost inregistrat in prealabil cu JMF Registry si salveaza cadrele
capturate intr-un buffer.
*/
import javax.media.*;
import javax.media.format.YUVFormat;
import javax.media.format.JPEGFormat;
import java.util.*;
import javax.media.protocol.*;
import javax.media.datasink.*;
import java.io.IOException;
import java.awt.image.BufferedImage;
import java.awt.Component;
import javax.media.util.BufferToImage;
import javax.media.format.VideoFormat;
import java.awt.Image;
6
private Object waitSync = new Object();
private DataSource out_data_source=null;
private DataSource rtpDataSource=null;
private DataSource cloneableDataSource=null;
private DataSourceHandler handler=new DataSourceHandler();
private BufferedImage clip_img=null;
/***********************************************************************
* Constructorul
***********************************************************************/
/**
Acesta este singurul constructor pentru CameraInterface.
Detecteaza dispozitivul captura si creeaza processorul pentru el
*/
public CameraInterface(){
//out_data_source = processor.getDataOutput();
try {
handler.setSource(ProcessorSetUp());
} catch (IncompatibleSourceException e) {
System.err.println("Cannot handle the output
DataSource from the processor: " + out_data_source);
}
handler.addDataSinkListener(this);
7
YUVFormat VF=new
YUVFormat(YUVFormat.YUV_420);
Vector _device_list =
CaptureDeviceManager.getDeviceList(VF);
8
player=Manager.createPlayer(((SourceCloneable)
cloneableDataSource).createClone());
}catch (Exception e) {
System.err.println("Failed to create a processor from the
given DataSource: " + e);
System.exit(0);
}
// processor.addControllerListener(this);
player.addControllerListener(this);
/**
Aceasta metoda returneaza starea curenta a CameraInterface
*/
public int getStatus(){
return state;
}
9
public synchronized BufferedImage getBufferedImage(){
BufferedImage bim=null;
VideoFormat vf;
synchronized(readBuffer){
vf=(VideoFormat)readBuffer.getFormat();
BufferToImage bufferToImage = new BufferToImage(vf);
bim= (BufferedImage)bufferToImage.createImage(readBuffer);
if(vf==null){System.out.println("Video format null");};
}
clip_img=bim;
return bim;
}
/**
Urmatoarea metoda returneaza imaginea creata din bufferul
de intrare
*/
public BufferedImage getImage(){
return clip_img;
}
/**
Aceasta metoda termina Camera Interface
*/
public void Delete(){
//processor.close();
handler.close();
InitDataSource.disconnect();
readBuffer=null;
}
/**
Aceasta metoda opreste procesarea din buffer
*/
10
public void Stop(){
handler.Stop();
state=NOT_OK;
}
/**
Aceasta clasa citeste din DataSource si imparte streamul in buffere
*/
11
SourceStream unfinishedStrms[] = null;
/**
Seteaza DataSource pentru DataSourceHandler
*/
public void setSource(DataSource source) throws
IncompatibleSourceException {
if (source instanceof PushBufferDataSource) {
System.err.println("The source is push Buffer Data Source ");
pushStrms = ((PushBufferDataSource)source).getStreams();
unfinishedStrms = new SourceStream[pushStrms.length];
for (int i = 0; i < pushStrms.length; i++) {
pushStrms[i].setTransferHandler(this);
unfinishedStrms[i] = pushStrms[i];
}
}else
throw new IncompatibleSourceException();
this.source = source;
}
12
public void Stop(){
try{
source.stop();
}catch(IOException e){}
}
/**
Termina metoda DataSourceHandler
*/
public void close() {
try {
source.stop();
}catch (IOException e) {
System.err.println(e);
}
}
13
/**
Aceasta metoda este apelata cand vin date de la DataSource
*/
public void transferData(PushBufferStream stream) {
synchronized(readBuffer){
try {
stream.read(readBuffer);
}catch (IOException e) {
System.err.println(e);
sendEvent(new DataSinkErrorEvent(this, e.getMessage()));
return;
}
/*
Verificam daca toate streamurile sunt procesate
*/
public boolean checkDone(SourceStream strm) {
boolean done = true;
for (int i = 0; i < unfinishedStrms.length; i++) {
if (strm == unfinishedStrms[i])
unfinishedStrms[i] = null;
else if (unfinishedStrms[i] != null) {
// Cel putin un stream nu e gata
done = false;
}
}
return done;
}
14
return null;
}
}
}
15
Figura 10.7. Organigrama algoritmului de detecţie a mişcării
16
În Exemplul 10.2 este prezentat codul care calculează diferenţa între
mediile de culoare ale celor două imagini.
17
}
18
19