图片分类

Posted ssxblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片分类相关的知识,希望对你有一定的参考价值。

# coding: utf-8
import sys
import os
import dlib
import glob
import cv2
import tkinter

# root = tkinter.Tk()
# root.minsize(400, 400)
# menubar = tkinter.Menu(root)
# filemenu = tkinter.Menu(menubar, tearoff=0)
# menubar.add_cascade(label=‘命令‘, menu=filemenu)
# menubar.add_cascade(label=‘工具‘)
# menubar.add_cascade(label=‘收藏夹‘)
# menubar.add_cascade(label=‘选项‘)
# menubar.add_cascade(label=‘帮助‘)
# root.config(menu=menubar)
def index():
    # 指定路径
    current_path = os.getcwd()
    model_path = current_path + \model\
    shape_predictor_model = model_path + shape_predictor_5_face_landmarks.dat
    face_rec_model = model_path + dlib_face_recognition_resnet_model_v1.dat
    face_folder = current_path + \faces\
    output_folder = current_path + \output\

    # 导入模型
    detector = dlib.get_frontal_face_detector()
    shape_detector = dlib.shape_predictor(shape_predictor_model)
    face_recognizer = dlib.face_recognition_model_v1(face_rec_model)

    # 为后面操作方便,建了几个列表
    descriptors = []
    images = []
    # 遍历faces文件夹中所有的图片
    for f in glob.glob(os.path.join(face_folder, "*.jpg")):
        print(处理文件:{}.format(f))
        # 读取图片
        img = cv2.imread(f)
        # 转换到rgb颜色空间
        img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

        # 检测人脸
        dets = detector(img2, 1)
        print("检测到的人脸数: {}".format(len(dets)))

        # 遍历所有的人脸
        for index, face in enumerate(dets):
            # 检测人脸特征点
            shape = shape_detector(img2, face)
            # 投影到128D
            face_descriptor = face_recognizer.compute_face_descriptor(img2, shape)

            # 保存相关信息
            descriptors.append(face_descriptor)
            images.append((img2, shape))

    # 聚类
    labels = dlib.chinese_whispers_clustering(descriptors, 0.5)
    #labels
    print("标签: {}".format(labels))
    num_classes = len(set(labels))
    #Number of clusters
    print("分类数: {}".format(num_classes))

    # 为了方便操作,用字典类型保存
    face_dict = {}
    for i in range(num_classes):
        face_dict[i] = []
    #print (face_dict)
    for i in range(len(labels)):
        face_dict[labels[i]].append(images[i])

    #print (face_dict.keys())
    # 遍历字典,保存结果
    for key in face_dict.keys():
        file_dir = os.path.join(output_folder, str(key))
        if not os.path.isdir(file_dir):
            os.makedirs(file_dir)

        for index, (image, shape) in enumerate(face_dict[key]):
            file_path = os.path.join(file_dir, face_ + str(index))
            print("图片位置:",file_path)
            dlib.save_face_chip(image, shape, file_path)
    
# button1 =tkinter.Button(text="图片分类",command=index)
# button1.place(x=250,y=150,relheight=0.1)
# label1 =tkinter.Label()
# label1.place()
#
# root.mainloop()

if __name__ == __main__:
#def main():
    while True:
        print("")
        print("="*40)
        print("1.faces文件夹是存放分类图片的位置")
        print("2.output文件夹是整理后存放图片的位置")
        print("3.退出请输入:quit")
        print("="*40)
        print("")
        print("是否进行分类?")
        a = input("请输入Y进行确认: ")
        if a == "Y" or a == "y":
            index()
        elif a =="quit":
            break
        else:
            print("请重新输入")
            
        

 

以上是关于图片分类的主要内容,如果未能解决你的问题,请参考以下文章

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段

Android - 应用程序启动时片段 onCreate 崩溃

创建特征向量以对空中图像中的片段进行分类

Python+sklearn使用支持向量机算法实现数字图片分类