Esempio n. 1
0
 def Open_File(self):
     # 打开文件对话框并获取文件名, 只允许打开.txt文件
     filename = QFileDialog.getOpenFileName(self, '选取文本文件', "./",
                                            "Text Files (*.txt)")[0]
     if filename != '':  # 若获取的文件名不为空则执行读取操作
         data = fo.Read2Array(filename, False)[0]  # 将数据文件中内容以保留第一行的形式读取为矩阵
         self.data = fo.Read2Array(filename,
                                   True)[0]  # 将数据文件中内容以不保留第一行的形式读取为全局数据矩阵
         self.pendingData = fo.Array2Str(data)  # 将转换为字符串格式的矩阵数据保存进预处理变量
         data = fo.Array2Str(data)  # 将矩阵转换为字符串格式
         self.Data.setPlainText(data)  # 显示矩阵
def find_file(filename:str, file_path_list:list, FCB = {}, disk_data = [], FAT = [], now_path = ''):
    search_path = 'C:'
    temp_path = ''
    position = -1
    target_FCB = {}
    ret = ''
    # 设置8字节全为0的列表
    empty_list = bytes([0]*8)
    filename_list = filename.split('.')

    if now_path == '':
        now_path = search_path
    else:
        temp_path = now_path
    if FCB != {}:
        target_FCB = FCB
    if disk_data == []:
        disk_data = disk_open(search_path)

        # 获取FAT
        FAT = []
        for i in range(128):
            FAT.append(disk_data[i])

    file_FCB_bytes_list = FO.get_path_allFCB_bytes(now_path, disk_data, target_FCB, FAT)
    # 将文件名转换成字节型
    if len(filename_list) == 1:
        filename_bytes = FO.filename_to_bytes(filename_list, 0)
    else:
        filename_bytes = FO.filename_to_bytes(filename_list)

    for i in range(len(file_FCB_bytes_list)):
        # 如果找到此文件
        if file_FCB_bytes_list[i][0:5] == filename_bytes:
            position = i
            ret = temp_path + '/' + filename
            file_path_list.append(ret)
           


    for i in range(len(file_FCB_bytes_list)):
        # 如果找到一个文件目录
        if file_FCB_bytes_list[i] != empty_list and bytes_to_FCB(file_FCB_bytes_list[i])['File_class'] == 0:
            position = i
            # 获取目标文件的字节型FCB并转换格式
            target_FCB_bytes = file_FCB_bytes_list[position]
            target_FCB = bytes_to_FCB(target_FCB_bytes)
            temp_path = temp_path + '/' + str(target_FCB['File_name']).split()[0]
            ret = find_file(filename, file_path_list, target_FCB, disk_data, FAT, temp_path)
            if ret != False:
                break

    return ret
def search(img_path):
    cf = CaculateColorVector.get_color_feature(img_path)
    cfs = File_Operation.read_list_from_file('/Users/ligang/Documents/cfs.txt')
    distances = []
    for cf_tuple in cfs:
        d = Distance.distance(cf, cf_tuple[1])
        distances.append((cf_tuple[0], d))
    top_distances = heapq.nsmallest(10, distances, key=lambda x: x[1])
    print top_distances
Esempio n. 4
0
    def Fuzzy_Classification(self):
        threshold = self.Threshold.toPlainText()  # 获取输入的分类阈值
        # 判断分类阈值是否为空
        if threshold == '':
            self.Threshold.setText('请输入分类阈值')
            return False

        result = self.fcm.Classification(
            float(threshold))  # 将模糊聚类矩阵对象的分类结果写入结果变量
        result = fo.Classification2str(result)  # 将分类结果转换为字符串格式
        self.Result.setPlainText(result)  # 显示分类结果
        self.classfication = result  # 将分类结果写入全局分类结果变量
Esempio n. 5
0
def search(img_path):
    ulbp_f = ulbp.ulbp(img_path)
    ulbps = File_Operation.read_list_from_file('/Users/ligang/Documents/ulbp.txt')
    distances = []
    for ulbp_tuple in ulbps:
        d = Distance.distance(ulbp_f, ulbp_tuple[1])
        distances.append((ulbp_tuple[0], d))
    top_distances = heapq.nsmallest(20, distances, key=lambda x: x[1])
    dstDir = '/Users/ligang/Documents/Emilie/lbp_search_result'
    img_set_dir = '/Users/ligang/Documents/Emilie/dress'
    for top in top_distances:
        shutil.copy2(os.path.join(img_set_dir, top[0]), os.path.join(dstDir, top[0]))
    print top_distances
Esempio n. 6
0
    def Martix_Operation(self):
        # 执行矩阵运算前判断是否已读入数据文件
        if self.data is None:
            self.Data.setText('请先导入文件')
            return False

        result = ''  # 定义结果变量
        # 建立模糊聚类矩阵对象
        dist = self.Choose_Dist()
        operation = self.Choose_Operation()
        self.fcm = fc.Fuzzy_Clustering(self.data, dist, operation)
        # 判断是否显示并保存中间过程
        if self.Process.isChecked():
            result += fo.Proset2Str(self.fcm.proSet)
        # 对结果变量赋值并显示
        result += '等价模糊矩阵:\n' + fo.Array2Str(self.fcm.efMatrix)
        self.Fmatrix.setPlainText(result)
        self.efMatrix = result  # 将结果写进全局等价模糊矩阵变量
        # 绘制散点图
        self.figure.plotScatter(self.fcm.CutSet_Iteration())  # 执行散点图绘制函数
        self.gridlayout = QGridLayout(self.MatPlot)  # 重定义MatPlot部件所在位置
        self.gridlayout.addWidget(self.figure, 0, 1)  # 将重定义的位置替换为散点图
def search(img_path):
    cf = CaculateColorVector.get_color_feature(img_path)
    unlbp_feature = Uniform_LBP.ulbp(img_path)

    cfs = File_Operation.read_list_from_file('/Users/ligang/Documents/cfs.txt')
    ulbps = File_Operation.read_list_from_file('/Users/ligang/Documents/ulbp.txt')

    distances = []

    for cf_tuple, ulbp_tuple in zip(cfs, ulbps):
        assert cf_tuple[0] == ulbp_tuple[0]

        d_color = Distance.distance(cf, cf_tuple[1])
        d_ulbp = Distance.distance(unlbp_feature, ulbp_tuple[1])
        d = d_color + d_ulbp

        distances.append((cf_tuple[0], d))

    top_distances = heapq.nsmallest(20, distances, key=lambda x: x[1])
    dstDir = '/Users/ligang/Documents/Emilie/colorlbp_search_result'
    img_set_dir = '/Users/ligang/Documents/Emilie/dress'
    for top in top_distances:
        shutil.copy2(os.path.join(img_set_dir, top[0]), os.path.join(dstDir, top[0]))
    print top_distances
def search_file_FCB(path:str, start_block:int = -1) -> list:
    search_path = 'C:'
    temp_path = ''
    position = -1
    target_FCB = {}
    dir_list = []
    # 设置8字节全为0的列表
    empty_list = bytes([0]*8)

    new_path = path.split('/')[0:-1][-1]
    print(new_path)
    if start_block != -1:
        target_FCB = {
            'File_name' : '',               # 3B
            'File_type' : '',               # 2B
            'Disk_startblock' : start_block,          # 1B    0~255
            'File_size' : 0,                # 1B    0~255   最大存储相当4个磁盘块大小的文件
            'File_class' : 0
        }
    
    disk_data = disk_open(search_path)

    # 获取FAT
    FAT = []
    for i in range(128):
        FAT.append(disk_data[i])

    file_FCB_bytes_list = FO.get_path_allFCB_bytes(new_path, disk_data, target_FCB, FAT)

    for i in range(len(file_FCB_bytes_list)):
            position = i
            # 获取目标文件的字节型FCB并转换格式
            target_FCB_bytes = file_FCB_bytes_list[position]
            target_FCB = bytes_to_FCB(target_FCB_bytes)
            
            dir_list.append(target_FCB)
    return dir_list
def get_create_position_num(filepath_list:list, disk_data, FAT = []):

    # 新文件起始指针
    start_pointer = -1
    # 设置8字节全为0的列表
    empty_list = bytes([0]*8)
    
    # 在根目录下创建文件时
    if len(filepath_list) == 1:

        root_data_list = []
        # 截取磁盘第三块物理盘块中内容
        root_data = disk_data[128:192]
        # 将根目录64B分成8块,每块8B截取到列表
        for i in range(8):
            root_data_list.append(root_data[i*8:i*8+8])

            
        # 在根目录中
        while True:
            # 根目录所在的第三个盘块上最多储存8个FCB
            for pointer in range(9):
                # 当pointer指向第9个FCB时,已超出盘块下标范围,表示根目录已满,返回True
                if pointer == 8:
                    return True
                # 根目录存在空位置
                if root_data_list[pointer] == empty_list:
                    # 获得起始位置   
                    return pointer*8+128
                    #return False
                
                
    else:
        start_pointer = FO.enter_folder(filepath_list, FAT, disk_data)

    return start_pointer
Esempio n. 10
0
    return normalize(ulbp_feature)


if __name__ == '__main__':
    # img_path = '/Users/ligang/Documents/Emilie/dress/85_0.jpg'
    # print ulbp(img_path)

    workDir = '/Users/ligang/Documents/Emilie/dress'

    startTime = time.time()

    count = 0
    data = []

    for filename in os.listdir(workDir):
        ulbp_feature = ulbp(os.path.join(workDir, filename))
        if ulbp_feature is None:
            continue
        if len(ulbp_feature) > 0:
            data.append((filename, ulbp_feature))
            count = count + 1
            print count

    endTime = time.time()
    useTime = endTime - startTime
    eachTime = useTime / count
    print count, eachTime

    File_Operation.write_list_to_file('/Users/ligang/Documents/ulbp.txt', data)
Esempio n. 11
0
def read_disk(filepath_list:list, filename_list:list, disk_data, FAT:list):
    
    position = -1
    next_pointer = 1                 # 文件路径中指向文件目录的指针
    folder_name_list = filepath_list
    temp_data_list = []
    temp_FCB = {}
    
    # 获取根目录下所有字节型FCB
    data_list = FO.get_path_allFCB_bytes(folder_name_list[next_pointer - 1], disk_data)
    # 如果在根目录
    
    if next_pointer == len(folder_name_list):
            # 获取此目录下所有字节型FCB
            temp_data_list = data_list
    else:
        # 将文件名转换成字节型
        filename_bytes = FO.filename_to_bytes(folder_name_list[next_pointer], 0)
        for i in range(8):
            # 如果找到此文件
            if data_list[i][0:5] == filename_bytes:
                position = i
                break
        # 获取目标文件的字节型FCB并转换格式
        FCB_bytes = data_list[position]
        target_FCB = bytes_to_FCB(FCB_bytes)
        temp_FCB = target_FCB
        # 获取目标文件FCB中起始盘块号
        start_position = get_FCB_block_num(target_FCB)
        #获取当前起始盘块号
        now_start_block_num = start_position
        # 文件目录指针指向文件路径中下一个文件目录
        next_pointer = next_pointer + 1

        while(next_pointer < len(folder_name_list)):
            data_list = []
            # 获取此目录下所有字节型FCB
            data_list = FO.get_path_allFCB_bytes(folder_name_list[next_pointer], disk_data, temp_FCB, FAT)

            temp_data_list = data_list

            # 将文件目录名转成字节
            filename_bytes = FO.filename_to_bytes(folder_name_list[next_pointer], 0)
            for i in range(len(data_list)):
            # 如果找到此文件
                if data_list[i][0:5] == filename_bytes:
                    position = i
                    break

            # 获取目标文件的字节型FCB并转换格式
            FCB_bytes = data_list[position]
            target_FCB = bytes_to_FCB(FCB_bytes)
            temp_FCB = target_FCB
            # 获取目标文件FCB中起始盘块号
            start_position = get_FCB_block_num(target_FCB)
            #获取当前起始盘块号
            now_start_block_num = start_position
            # 文件目录指针指向文件路径中下一个文件目录
            next_pointer = next_pointer + 1

        # 获取此目录下所有字节型FCB
        data_list = FO.get_path_allFCB_bytes(folder_name_list[next_pointer-1], disk_data, temp_FCB, FAT)

        temp_data_list = data_list
    
    #==============================
    
    data_list = temp_data_list
    
    '''
    data_list = []
    # 获取此目录下所有字节型FCB
    data_list = FO.get_path_allFCB_bytes(filepath_list, disk_data)
    '''
    # 将文件名转换成字节型
    
    filename_bytes = FO.filename_to_bytes(filename_list)
    
    for i in range(len(data_list)):
        # 如果找到此文件
        if data_list[i][0:5] == filename_bytes:
            position = i
            
            break
    
    # 获取目标文件的FCB
    FCB_bytes = data_list[position]
    #print(position)
    target_FCB = bytes_to_FCB(FCB_bytes)
    #print(target_FCB)
    # 获取目标文件FCB中起始盘块号
    start_position = get_FCB_block_num(target_FCB)
    # 获取文件长度
    target_size = target_FCB['File_size']

    # 获取文件存储所在的所有块
    FAT_list = []
    FAT_list.append(start_position)
    for i in range(start_position, 128):
        if FAT[i] == 129:
            break
        else:
            FAT_list.append(FAT[i])
    
 
    connect = read_file_connect(start_position, target_size, FAT, disk_data)
    return connect
Esempio n. 12
0
if __name__ == "__main__":
    #
    # cf1 = get_color_feature('/Users/ligang/170_0.jpg')
    # cf2 = get_color_feature('/Users/ligang/189_0.jpg')
    # cf3 = get_color_feature('/Users/ligang/129_0.jpg')
    # dis1 , dis2 = 0, 0
    # for i in xrange(71):
    #     dis1 += (cf1[i]-cf2[i]) * (cf1[i]-cf2[i])
    #     dis2 += (cf1[i]-cf3[i]) * (cf1[i]-cf3[i])
    # print dis1, dis2

    workDir = "/Users/ligang/Documents/Emilie/dress"

    startTime = time.time()
    count = 0
    cfs = []

    for filename in os.listdir(workDir):
        cf = get_color_feature(os.path.join(workDir, filename))
        if len(cf) > 0:
            cfs.append((filename, cf))
            count = count + 1

    endTime = time.time()
    useTime = endTime - startTime
    print useTime, count
    print sys.getsizeof(cfs)

    File_Operation.write_list_to_file("/Users/ligang/Documents/cfs.txt", cfs)