% 0- yra nuovargio požymiai (užm. akys, raukšlės, žiovulys), 1 - požymių nėra. % Nuovargio lygiai demonstruojami paskutinėje eilutėje realiu laiku: % 1- žvalus, 2 - šiek tiek pavargęs, 3 - vid. pavargęs, 4 - labai pavargęs, % 5 - užmigęs. % Kad programa pradėtų veikti atsidariusiame mygtukų lange spausti "Treniruoti akių % SVM","Treniruoti raukšlių SVM" ir "Treniruoti burnos SVM". % clear all; clear('cam'); close all; clc; imaqreset; %% Sukuriame katalogus AkiuKatalogas = 'Akių atvaizdai'; UzmerktuAkiuKatalogas = [AkiuKatalogas filesep 'Užmerktos']; AtmerktuAkiuKatalogas = [AkiuKatalogas filesep 'Atmerktos']; [~,~,~] = mkdir(AkiuKatalogas); [~,~,~] = mkdir(UzmerktuAkiuKatalogas); [~,~,~] = mkdir(AtmerktuAkiuKatalogas); RauksliuKatalogas = 'Raukšlių atvaizdai'; RauksliuKatalogas = [RauksliuKatalogas filesep 'Raukšlės']; KatalogasBeRauksliu = [RauksliuKatalogas filesep 'Be raukšlių']; [~,~,~] = mkdir(RauksliuKatalogas); [~,~,~] = mkdir(RauksliuKatalogas); [~,~,~] = mkdir(KatalogasBeRauksliu); BurnosKatalogas = 'Burnos atvaizdai'; UzvertosBurnosKatalogas = [BurnosKatalogas filesep 'Uzverta']; AtvertosBurnosKatalogas = [BurnosKatalogas filesep 'Atverta']; [~,~,~] = mkdir(BurnosKatalogas); [~,~,~] = mkdir(UzvertosBurnosKatalogas); [~,~,~] = mkdir(AtvertosBurnosKatalogas); %% cam = webcam(); videoPlayer = vision.DeployableVideoPlayer(); videoPlayerZoom = vision.DeployableVideoPlayer; VeidoDetektorius = vision.CascadeObjectDetector(); AkiuDetektorius = vision.CascadeObjectDetector('EyePairBig'); BurnosDetektorius = vision.CascadeObjectDetector('Mouth','MergeThreshold' ,50); TaskuSekejas = vision.PointTracker('MaxBidirectionalError', 2); Ciklas = true; TaskuSkaicius = 0; frameCount = 0; % Akys: AkiuZymeklis = false; AkiuSkaicius = int32(0); UzmerktuSkaicius = 0; AtmerktuSkaicius = 0; AkysUzmerktos=false; AkysAtmerktos=false; AkysApmokytos=false; % Raukšlės: RauksliuZymeklis = false; RauksliuSkaicius = int32(0); SurauktuSkaicius = 0; NesurauktuSkaicius = 0; RauksliuYra=false; RauksliuNera=false; RaukslesApmokytos=false; % Burna: BurnosZymeklis = false; BurnosSkaicius = int32(0); AtvertuSkaicius = 0; UzvertuSkaicius = 0; BurnaUzciaupta=false; BurnaAtvira=false; BurnaApmokyta=false; % Sukuriame matricas. a-akys, r-rauksles, b-burna. kadru_sk_lange=60; a = zeros(1,kadru_sk_lange); r = zeros(1,kadru_sk_lange); b = zeros(1,kadru_sk_lange); L = zeros(1, kadru_sk_lange); f=readfis('FuziLogika.fis'); max_a_laikas_sekundemis=0; max_b_laikas_sekundemis=0; max_r_laikas_sekundemis=0; f_akiu=100; T_max_akiu = 0; T_max_rauksliu = 0; T_max_burnos = 0; f_akiu = 100; burnele=figure; %% Sukuriame mygtukų langą sz = get(0,'ScreenSize'); figure('MenuBar','none','Toolbar','none','Position',[20 sz(4)-500 220 370]) uicontrol('Style', 'pushbutton', 'String', 'Užmerktos',... 'Position', [20 325 180 30],... 'Callback', 'AkysUzmerktos=true;'); uicontrol('Style', 'pushbutton', 'String', 'Atmerktos',... 'Position', [20 285 180 30],... 'Callback', 'AkysAtmerktos=true;'); uicontrol('Style', 'pushbutton', 'String', 'Treniruoti akių SVM',... 'Position', [20 245 180 30],... 'Callback', 'AkysApmokytos=true;'); uicontrol('Style', 'pushbutton', 'String', 'Raukšlės',... 'Position', [20 205 180 30],... 'Callback', 'RauksliuYra=true;'); uicontrol('Style', 'pushbutton', 'String', 'Be raukšlių',... 'Position', [20 165 180 30],... 'Callback', 'RauksliuNera=true;'); uicontrol('Style', 'pushbutton', 'String', 'Treniruoti raukšlių SVM',... 'Position', [20 125 180 30],... 'Callback', 'RaukslesApmokytos=true;'); uicontrol('Style', 'pushbutton', 'String', 'Atverta',... 'Position', [20 85 180 30],... 'Callback', 'BurnaUzciaupta=true;'); uicontrol('Style', 'pushbutton', 'String', 'Užverta',... 'Position', [20 45 180 30],... 'Callback', 'BurnaAtvira=true;'); uicontrol('Style', 'pushbutton', 'String', 'Treniruoti burnos SVM',... 'Position', [20 5 180 30],... 'Callback', 'BurnaApmokyta=true;'); while (Ciklas) tic; VideoKadrai = snapshot(cam); VideoKadras = VideoKadrai; VideoKadrasPilkas = rgb2gray(VideoKadrai); % Aprašome, kaip seksime taškus... if TaskuSkaicius < 10 bbox = VeidoDetektorius.step(VideoKadrasPilkas); if ~isempty(bbox) Taskai = detectMinEigenFeatures(VideoKadrasPilkas, 'ROI', bbox(1, :)); xyTaskai = Taskai.Location; TaskuSkaicius = size(xyTaskai,1); release(TaskuSekejas); initialize(TaskuSekejas, xyTaskai, VideoKadrasPilkas); seniTaskai = xyTaskai; bboxPoints = bbox2points(bbox(1, :)); bboxPoligonas = reshape(bboxPoints', 1, []); VideoKadras = insertShape(VideoKadras, 'Polygon', bboxPoligonas, 'LineWidth', 4); VideoKadras = insertMarker(VideoKadras, xyTaskai, '+', 'Color', 'white'); end else [xyTaskai, isFound] = step(TaskuSekejas, VideoKadrasPilkas); MatomiTaskai = xyTaskai(isFound, :); SeniT2 = seniTaskai(isFound, :); TaskuSkaicius = size(MatomiTaskai, 1); if TaskuSkaicius >= 10 [xform, SeniT2, MatomiTaskai] = estimateGeometricTransform(... SeniT2, MatomiTaskai, 'similarity', 'MaxDistance', 4); bboxPoints = transformPointsForward(xform, bboxPoints); bboxPoligonas = reshape(bboxPoints', 1, []); VideoKadras = insertShape(VideoKadras, 'Polygon', bboxPoligonas, 'LineWidth', 3); VideoKadras = insertMarker(VideoKadras, MatomiTaskai, '+', 'Color', 'white'); seniTaskai = MatomiTaskai; setPoints(TaskuSekejas, seniTaskai); end zoomPoints = [1 1; 200 1; 200 200; 1 200]; T = fitgeotrans(bboxPoints, zoomPoints,'projective'); rectifiedFace = imwarp(VideoKadrai, T, 'OutputView', imref2d([200 200])); %% %% %% Akys %% bboxEyes = step(AkiuDetektorius, rectifiedFace); if ~isempty(bboxEyes) bboxEyesPoints = bbox2points(bboxEyes(1,:)); zoomPoints = [1 1; 440 1; 440 100; 1 100]; T = fitgeotrans(bboxEyesPoints, zoomPoints,'projective'); videoFrameEyes = +imwarp(rectifiedFace, T, 'OutputView', imref2d([100 440])); %% Iskerpam rauksliu sriti Wrinklepoints = bbox2points(bboxEyes); x1=Wrinklepoints(1,1); y1=Wrinklepoints(1,2); % pirma eilute, antras stulpelis aukstis=Wrinklepoints(3,2)-Wrinklepoints(2,2); plotis=Wrinklepoints(2,1)-Wrinklepoints(1,1); WrinkleRegion = imcrop(rectifiedFace, [x1+plotis./3 y1-aukstis./3 plotis./3 aukstis*0.7]); WrinkleResized = imresize(WrinkleRegion, [100, 200]); % aukstis ir plotis if RauksliuZymeklis == 0 rauksles=' SUSIRAUKTA '; elseif AkiuZymeklis == 1 rauksles=' NESUSIRAUKTA '; end %% %% Akių atvaizdus įrašome į biblioteką if (AkysUzmerktos || AkysAtmerktos) if (AkysUzmerktos) UzmerktuSkaicius = UzmerktuSkaicius+1; imwrite(videoFrameEyes, [UzmerktuAkiuKatalogas filesep 'F1frame' num2str(UzmerktuSkaicius) '.png']); end if (AkysAtmerktos) AtmerktuSkaicius = AtmerktuSkaicius+1; imwrite(videoFrameEyes, [AtmerktuAkiuKatalogas filesep 'F1frame' num2str(AtmerktuSkaicius) '.png']); end posSets = imageSet(fullfile(AkiuKatalogas,'Užmerktos')); negSets = imageSet(fullfile(AkiuKatalogas,'Atmerktos')); if ~isempty(posSets.ImageLocation) montage(posSets.ImageLocation); end if ~isempty(negSets.ImageLocation) montage(negSets.ImageLocation); end title('Atmerktų akių biblioteka','FontSize',10); AkysUzmerktos = false; AkysAtmerktos = false; end %% Raukšlių atvaizdus įrašome į biblioteką if (RauksliuYra || RauksliuNera) if (RauksliuYra) SurauktuSkaicius = SurauktuSkaicius+1; imwrite(WrinkleResized, [RauksliuKatalogas filesep 'frame' num2str(SurauktuSkaicius) '.png']); end if (RauksliuNera) NesurauktuSkaicius = NesurauktuSkaicius+1; imwrite(WrinkleResized, [KatalogasBeRauksliu filesep 'frame' num2str(NesurauktuSkaicius) '.png']); end posSets2 = imageSet(fullfile(RauksliuKatalogas,'Raukšlės')); negSets2 = imageSet(fullfile(RauksliuKatalogas,'Be raukšlių')); % figure(hh); % subplot(2,1,1); if ~isempty(posSets2.ImageLocation) montage(posSets2.ImageLocation); end % title('Raukšlių biblioteka','FontSize',10); % subplot(2,1,2); if ~isempty(negSets2.ImageLocation) montage(negSets2.ImageLocation); end % title('Ne raukšlių biblioteka','FontSize',10); RauksliuYra = false; RauksliuNera = false; end %% Akių detektoriaus treniravimas if exist('svmModel','var') img = imresize(videoFrameEyes, [20 88]); testFeatures = extractHOGFeatures(img,'CellSize',cellSize); preEyeFlag = AkiuZymeklis; AkiuZymeklis = predict(svmModel, testFeatures); if ~preEyeFlag && AkiuZymeklis AkiuSkaicius = AkiuSkaicius + 1; end else preEyeFlag = false; end % rectifiedFace = insertShape(rectifiedFace, 'Rectangle', bboxEyes, 'LineWidth', 3, 'Color', 255*[eyeFlag ~eyeFlag 0]); rectifiedFace = insertShape(rectifiedFace, 'Rectangle', bboxEyes, 'LineWidth', 3, 'Color', 255*[~AkiuZymeklis AkiuZymeklis 0]); end %% %% Burna %% MouthRegion = imcrop(rectifiedFace, [40 120 120 80]); bboxMouth = step(BurnosDetektorius, MouthRegion); if ~isempty(bboxMouth) Taskai = bbox2points(bboxMouth(1,:)); x1=Taskai(1,1); y1=Taskai(1,2) ; % pirma eilute, antras stulpelis aukstis=Taskai(3,2)-Taskai(2,2); plotis=Taskai(2,1)-Taskai(1,1); MouthRegion=imcrop(MouthRegion,[x1 y1 plotis aukstis ]); MouthRegion=imresize(MouthRegion, [80, 120]); % figure(burnele); % imshow(MouthRegion); else % figure(burnele); % imshow(MouthRegion); end %% %% %% Burnos atvaizdus įrašome į biblioteką if (BurnaUzciaupta || BurnaAtvira) if (BurnaAtvira) AtvertuSkaicius = AtvertuSkaicius+1; imwrite(MouthRegion, [AtvertosBurnosKatalogas filesep 'frame110' num2str(AtvertuSkaicius) '.png']); end if (BurnaUzciaupta) UzvertuSkaicius = UzvertuSkaicius+1; imwrite(MouthRegion, [UzvertosBurnosKatalogas filesep 'frame110' num2str(UzvertuSkaicius) '.png']); end posSets3 = imageSet(fullfile(BurnosKatalogas,'Uzverta')); negSets3 = imageSet(fullfile(BurnosKatalogas,'Atverta')); % figure(hh); % subplot(2,1,1); if ~isempty(posSets3.ImageLocation) montage(posSets3.ImageLocation); end % title('Uzvertos burnos biblioteka','FontSize',10); % subplot(2,1,2); if ~isempty(negSets3.ImageLocation) montage(negSets3.ImageLocation); end % title('Atvertos burnos biblioteka','FontSize',10); BurnaUzciaupta = false; BurnaAtvira = false; end %% %% %% if AkysApmokytos AkysApmokytos = false; trainingSets = imageSet(AkiuKatalogas, 'recursive'); trainingLabels = false(sum([trainingSets.Count]),1); trainingLabels(1:trainingSets(1).Count) = true; trainingLabels(trainingSets(1).Count+1:sum([trainingSets(2:end).Count])) = false; cellSize = [4 4]; img = read(trainingSets(1), 1); img = imresize(img, [20 88]); [hog_4x4, vis4x4] = extractHOGFeatures(img,'CellSize',cellSize); hogFeatureSize = length(hog_4x4); trainingFeatures = zeros(sum([trainingSets.Count]),hogFeatureSize,'single'); k = 1; for index = 1:numel(trainingSets) for i = 1:trainingSets(index).Count img = read(trainingSets(index), i); img = imresize(img, [20 88]); trainingFeatures(k,:) = extractHOGFeatures(img,'CellSize',cellSize); k = k+1; end end svmModel = fitcsvm(trainingFeatures, trainingLabels); end step(videoPlayerZoom, rectifiedFace); end if exist('svmModel', 'var') % % % % a(1,1:end-1) = a(1,2:end); a(1,end)=AkiuZymeklis; a; if a(1,1)==1 && a(1,end)==1 uzmerkimai = find(a(1:end)==0); skirtum = diff(find(a==1))-1; max_a_laikas=max(diff(find(a==1))-1); akiu_mirksniu_sk=nnz(skirtum); elseif a(1,1)==0 && a(1,end)==0 A=a; A(1,2:end) = A(1,1:end-1); A(1,1)=1; A(1,end+1)=a(1,end); A(1,end+1)=1; A; uzmerkimai = find(A(1:end)==0); skirtum = diff(find(A==1))-1; max_a_laikas=max(diff(find(A==1))-1); akiu_mirksniu_sk=nnz(skirtum); elseif a(1,1)==0 A=a; A(1,2:end) = A(1,1:end-1); A(1,1)=1; A(1,end+1)=1; A; uzmerkimai = find(A(1:end)==0); skirtum = diff(find(A==1))-1; max_a_laikas=max(diff(find(A==1))-1); akiu_mirksniu_sk=nnz(skirtum); elseif a(1,end)==0 A=a; A(1,end+1)=1; A; uzmerkimai = find(A(1:end)==0); skirtum = diff(find(A==1))-1; max_a_laikas=max(diff(find(A==1))-1); akiu_mirksniu_sk=nnz(skirtum); end f_akiu = akiu_mirksniu_sk * 60 ./ (kadru_sk_lange * toc); f_akiu = round (f_akiu); max_a_laikas_sekundemis = max_a_laikas * toc; max_a_laikas_sekundemis = round (max_a_laikas_sekundemis , 1); % % % % if akiu_mirksniu_sk == 1 kart=' kartą'; elseif (akiu_mirksniu_sk>1) && (akiu_mirksniu_sk<10) kart=' kartus'; else kart=' kartų'; end VideoKadras = insertText(VideoKadras, [0 0], ['Akys užmerktos: ' num2str(akiu_mirksniu_sk,'%d') num2str(kart) '. N per minutę: ' num2str(f_akiu) '. Max trukmė: ' num2str(max_a_laikas) ' k. arba ' num2str(max_a_laikas_sekundemis) ' s.' ' Iš viso: ' num2str(AkiuSkaicius) ], 'FontSize', 15); % videoFrame = insertText(videoFrame, [0 0], ['Akys užmerktos: ' num2str(akiu_mirksniu_sk,'%d') num2str(kart) '. N per minutę: ' num2str(f_akiu) '. Max trukmė: ' num2str(max_a_laikas) ' k. arba ' num2str(max_a_laikas_sekundemis) ' s' ], 'FontSize', 15); VideoKadras = insertText(VideoKadras, [0 90], [ num2str(a)], 'FontSize', 8); else VideoKadras = insertText(VideoKadras, [0 0], 'Akių mirksnių detektorius neapmokytas', 'FontSize', 15, 'BoxColor', [255 0 0]); end %% %% %% Raukšlių detektoriaus treniravimas if exist('svmModelWrinkle','var') testWrinkleFeatures = extractHOGFeatures(WrinkleResized,'CellSize',cellSize); preWrinkleFlag = RauksliuZymeklis; RauksliuZymeklis = predict(svmModelWrinkle, testWrinkleFeatures); if ~preWrinkleFlag && RauksliuZymeklis RauksliuSkaicius = RauksliuSkaicius + 1; end else preWrinkleFlag = false; end if RaukslesApmokytos RaukslesApmokytos = false; trainingWrinkleSets = imageSet(RauksliuKatalogas, 'recursive'); trainingWrinkleLabels = false(sum([trainingWrinkleSets.Count]),1); trainingWrinkleLabels(1:trainingWrinkleSets(1).Count) = true; trainingWrinkleLabels(trainingWrinkleSets(1).Count+1:sum([trainingWrinkleSets(2:end).Count])) = false; cellSize = [4 4]; WrinkleResized = read(trainingWrinkleSets(1), 1); [hog_4x4, vis4x4] = extractHOGFeatures(WrinkleResized,'CellSize',cellSize); hogFeatureSize = length(hog_4x4); trainingWrinkleFeatures = zeros(sum([trainingWrinkleSets.Count]),hogFeatureSize,'single'); kk = 1; for index = 1:numel(trainingWrinkleSets) % 1=>pos, 2=>neg for ii = 1:trainingWrinkleSets(index).Count WrinkleResized = read(trainingWrinkleSets(index), ii); % WrinkleResized = imresize(WrinkleResized, [20 88]); trainingWrinkleFeatures(kk,:) = extractHOGFeatures(WrinkleResized,'CellSize',cellSize); kk = kk+1; end end svmModelWrinkle = fitcsvm(trainingWrinkleFeatures, trainingWrinkleLabels); end % % % % % % r(1,1:end-1) = r(1,2:end); r(1,end)=RauksliuZymeklis; r; if r(1,1)==1 && r(1,end)==1 suraukimai = find(r(1:end)==0); skirtum_rauksl = diff(find(r==1))-1; max_r_laikas=max(diff(find(r==1))-1); susiraukimu_sk=nnz(skirtum_rauksl); elseif r(1,1)==0 && r(1,end)==0 R=r; R(1,2:end) = R(1,1:end-1); R(1,1)=1; R(1,end+1)=r(1,end); R(1,end+1)=1; R; suraukimai = find(R(1:end)==0); skirtum_rauksl = diff(find(R==1))-1; max_r_laikas=max(diff(find(R==1))-1); susiraukimu_sk=nnz(skirtum_rauksl); elseif r(1,1)==0 R=r; R(1,2:end) = R(1,1:end-1); R(1,1)=1; R(1,end+1)=1; R; suraukimai = find(R(1:end)==0); skirtum_rauksl = diff(find(R==1))-1; max_r_laikas=max(diff(find(R==1))-1); susiraukimu_sk=nnz(skirtum_rauksl); elseif r(1,end)==0 R=r; R(1,end+1)=1; R; suraukimai = find(R(1:end)==0); skirtum_rauksl = diff(find(R==1))-1; max_r_laikas=max(diff(find(R==1))-1); susiraukimu_sk=nnz(skirtum_rauksl); end f_rauksliu = susiraukimu_sk * 60 ./ (kadru_sk_lange * toc); f_rauksliu = round (f_rauksliu); max_r_laikas_sekundemis = max_r_laikas * toc; max_r_laikas_sekundemis = round (max_r_laikas_sekundemis , 1); % % % % % % if exist('svmModelWrinkle', 'var') VideoKadras = insertText(VideoKadras, [0 30], ['Susiraukta: ' num2str(susiraukimu_sk,'%d') ' k. ' ' N per minutę: ' num2str(f_rauksliu) '. Max trukmė: ' num2str(max_r_laikas) ' k. arba ' num2str(max_r_laikas_sekundemis) ' s'], 'FontSize', 15); VideoKadras = insertText(VideoKadras, [0 103], [ num2str(r)], 'FontSize', 8); else VideoKadras = insertText(VideoKadras, [0 30], 'Raukšlių detektorius neapmokytas', 'FontSize', 15, 'BoxColor', [255 0 0]); end %% %% %% %% Burnos detektoriaus treniravimas if exist('svmModelMouth','var') testMouthFeatures = extractHOGFeatures(MouthRegion,'CellSize',cellSize); preMouthFlag = BurnosZymeklis; BurnosZymeklis = predict(svmModelMouth, testMouthFeatures); if ~preMouthFlag && BurnosZymeklis BurnosSkaicius = BurnosSkaicius + 1; end else preMouthFlag = false; end if BurnaApmokyta BurnaApmokyta = false; trainingMouthSets = imageSet(BurnosKatalogas, 'recursive'); trainingMouthLabels = false(sum([trainingMouthSets.Count]),1); trainingMouthLabels(1:trainingMouthSets(1).Count) = true; trainingMouthLabels(trainingMouthSets(1).Count+1:sum([trainingMouthSets(2:end).Count])) = false; cellSize = [4 4]; MouthRegion = read(trainingMouthSets(1), 1); [hog_4x4, vis4x4] = extractHOGFeatures(MouthRegion,'CellSize',cellSize); hogFeatureSize = length(hog_4x4); trainingMouthFeatures = zeros(sum([trainingMouthSets.Count]),hogFeatureSize,'single'); kkk = 1; for index = 1:numel(trainingMouthSets) % 1=>pos, 2=>neg for iii = 1:trainingMouthSets(index).Count MouthRegion = read(trainingMouthSets(index), iii); trainingMouthFeatures(kkk,:) = extractHOGFeatures(MouthRegion,'CellSize',cellSize); kkk = kkk+1; end end svmModelMouth = fitcsvm(trainingMouthFeatures, trainingMouthLabels); end % % % % % % b(1,1:end-1) = b(1,2:end); b(1,end)=BurnosZymeklis; b; if b(1,1)==1 && b(1,end)==1 issiziojimai = find(b(1:end)==0); skirtum_issiziojim = diff(find(b==1))-1; max_b_laikas=max(diff(find(b==1))-1); issiziojimu_sk=nnz(skirtum_issiziojim); elseif b(1,1)==0 && b(1,end)==0 B=b; B(1,2:end) = B(1,1:end-1); B(1,1)=1; B(1,end+1)=b(1,end); B(1,end+1)=1; B; issiziojimai = find(B(1:end)==0); skirtum_issiziojim = diff(find(B==1))-1; max_b_laikas=max(diff(find(B==1))-1); issiziojimu_sk=nnz(skirtum_issiziojim); elseif b(1,1)==0 B=b; B(1,2:end) = B(1,1:end-1); B(1,1)=1; B(1,end+1)=1; B; issiziojimai = find(B(1:end)==0); skirtum_issiziojim = diff(find(B==1))-1; max_b_laikas=max(diff(find(B==1))-1); issiziojimu_sk=nnz(skirtum_issiziojim); elseif b(1,end)==0 B=b; B(1,end+1)=1; B; issiziojimai = find(B(1:end)==0); skirtum_issiziojim = diff(find(B==1))-1; max_b_laikas=max(diff(find(B==1))-1); issiziojimu_sk=nnz(skirtum_issiziojim); end f_issiziojimu = issiziojimu_sk * 60 ./ (kadru_sk_lange * toc); f_issiziojimu = round (f_issiziojimu); max_b_laikas_sekundemis = max_b_laikas * toc; max_b_laikas_sekundemis = round (max_b_laikas_sekundemis , 1); % % % % % % T_max_akiu = max_a_laikas_sekundemis; T_max_rauksliu = max_r_laikas_sekundemis; T_max_burnos = max_b_laikas_sekundemis; f_akiu = f_akiu; l=evalfis([T_max_akiu, T_max_rauksliu, T_max_burnos, f_akiu],f); if l<2.1 l=1; S='blue'; elseif 2.1 < l && l < 4.1 l=2; S='green'; elseif 4.1