function [ labels, valid_ids, filenames  ] = extract_Bosphorus_labels( Bosphorus_dir, recs, aus )
%EXTRACT_SEMAINE_LABELS Summary of this function goes here
%   Detailed explanation goes here
    
    % Ignoring rare ones or ones that don't overlap with other datasets
    aus_Bosphorus = [1, 2, 4, 5, 6, 7, 9, 10, 12, 14, 15, 17, 20, 23, 25, 26, 43];
    aus(aus == 45) = 43;
    
    %%
    fid = fopen([Bosphorus_dir, './facscodes/facscodes.lst']);
    % Skipping the header
    fgetl(fid);
    fgetl(fid);
    
    % Starting to read
    data = fgetl(fid);
    
    all_aus = [];
    valid = [];
    
    id = 1;

    filenames = {};
    
    while ischar(data)
        
        d = strsplit(data, '->');
        data = fgetl(fid);
        
        filename = strtrim(d{1});
                        
        % Skip extreme poses
        if(~isempty(findstr(filename, 'CR')) || ~isempty(findstr(filename, 'YR') > 0) || ~isempty(findstr(filename, 'PR_U'))|| ~isempty(findstr(filename, 'PR_D')))
           continue; 
        end
        
        % ignore labels from non requested users
        if(isempty(strmatch(filename(1:5), recs)))
            continue;
        end
        
        filenames = cat(1, filenames, filename);
        
        aus_str = d{2}(3:end);

        % decode the AU data
        aus_c = strsplit(aus_str, '+');
        
        curr_img_au = zeros(1, 80);
        
        for i=1:numel(aus_c)
            
            if(aus_c{i} == '0')
                
                continue
            end
            
            intensity = -1;
            
            intensity_str = aus_c{i}(end);
            if(intensity_str == 'A')
                intensity = 1;
            elseif(intensity_str == 'B')
                intensity = 2;               
            elseif(intensity_str == 'C')
                intensity = 3;               
            elseif(intensity_str == 'D')
                intensity = 4;               
            elseif(intensity_str == 'E')
                intensity = 5;               
            end
            
            if(~isempty(str2num(aus_c{i}(1))))
                if(intensity ~= -1)
                    num = str2num(aus_c{i}(1:end-1));
                else
                    num = str2num(aus_c{i}(1:end));
                    intensity = 3; % if no intensity given just assume 3
                end
            else
                if(intensity ~= -1)
                    num = str2num(aus_c{i}(2:end-1));
                else
                    num = str2num(aus_c{i}(2:end));
                    intensity = 3; % if no intensity given just assume 3
                end
            end
                                    
            curr_img_au(1, num) = intensity;
        end
        all_aus = cat(1, all_aus, curr_img_au);
        valid = cat(1, valid, [true]);
        
        id = id + 1;

    end
    %aus_bosph = dlmread(, '->', 3, 0);
    fclose(fid);
    
    valid_ids = logical(valid);
    labels = all_aus(:, aus);
end