cycleGAN工具记录


for i in `ls ${1}| head -n 3500`
do
    mv ${1}/$i ./temp_datas
done
import os

from PIL import Image


def get_file_paths(folder):
    image_file_paths = []
    for root, dirs, filenames in os.walk(folder):
        filenames = sorted(filenames)
        for filename in filenames:
            input_path = os.path.abspath(root)
            file_path = os.path.join(input_path, filename)
            if filename.endswith('.png') or filename.endswith('.jpg'):
                image_file_paths.append(file_path)

        break  # prevent descending into subfolders
    return image_file_paths


def align_images(a_file_paths, b_file_paths, target_path):
    if not os.path.exists(target_path):
        os.makedirs(target_path)

    for i in range(len(a_file_paths)):
        img_a = Image.open(a_file_paths[i])
        img_b = Image.open(b_file_paths[i])
        assert(img_a.size == img_b.size)

        aligned_image = Image.new("RGB", (img_a.size[0] * 2, img_a.size[1]))
        aligned_image.paste(img_a, (0, 0))
        aligned_image.paste(img_b, (img_a.size[0], 0))
        aligned_image.save(os.path.join(target_path, '{:04d}.jpg'.format(i)))


if __name__ == '__main__':
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--dataset-path',
        dest='dataset_path',
        help='Which folder to process (it should have subfolders testA, testB, trainA and trainB'
    )
    args = parser.parse_args()

    dataset_folder = args.dataset_path
    print(dataset_folder)

    test_a_path = os.path.join(dataset_folder, 'testA')
    test_b_path = os.path.join(dataset_folder, 'testB')
    test_a_file_paths = get_file_paths(test_a_path)
    test_b_file_paths = get_file_paths(test_b_path)
    assert(len(test_a_file_paths) == len(test_b_file_paths))
    test_path = os.path.join(dataset_folder, 'test')

    train_a_path = os.path.join(dataset_folder, 'trainA')
    train_b_path = os.path.join(dataset_folder, 'trainB')
    train_a_file_paths = get_file_paths(train_a_path)
    train_b_file_paths = get_file_paths(train_b_path)
    assert(len(train_a_file_paths) == len(train_b_file_paths))
    train_path = os.path.join(dataset_folder, 'train')

    align_images(test_a_file_paths, test_b_file_paths, test_path)
    align_images(train_a_file_paths, train_b_file_paths, train_path)
import os

from PIL import Image


def get_file_paths(folder):
    image_file_paths = []
    for root, dirs, filenames in os.walk(folder):
        filenames = sorted(filenames)
        for filename in filenames:
            input_path = os.path.abspath(root)
            file_path = os.path.join(input_path, filename)
            if filename.endswith('.png') or filename.endswith('.jpg'):
                image_file_paths.append(file_path)

        break  # prevent descending into subfolders
    return image_file_paths


def align_images(a_file_paths, b_file_paths, target_path):
    if not os.path.exists(target_path):
        os.makedirs(target_path)

    for i in range(len(a_file_paths)):
        img_a = Image.open(a_file_paths[i])
        img_b = Image.open(b_file_paths[i])
        assert(img_a.size == img_b.size)

        aligned_image = Image.new("RGB", (img_a.size[0] * 2, img_a.size[1]))
        aligned_image.paste(img_a, (0, 0))
        aligned_image.paste(img_b, (img_a.size[0], 0))
        aligned_image.save(os.path.join(target_path, '{:04d}.jpg'.format(i)))


if __name__ == '__main__':
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--dataset-path',
        dest='dataset_path',
        help='Which folder to process (it should have subfolders  trainA and trainB'
    )
    args = parser.parse_args()

    dataset_folder = args.dataset_path
    print(dataset_folder)


    train_a_path = os.path.join(dataset_folder, 'trainA')
    train_b_path = os.path.join(dataset_folder, 'trainB')
    train_a_file_paths = get_file_paths(train_a_path)
    train_b_file_paths = get_file_paths(train_b_path)
    assert(len(train_a_file_paths) == len(train_b_file_paths))
    train_path = os.path.join(dataset_folder, 'train')

    align_images(train_a_file_paths, train_b_file_paths, train_path)
import numpy as np
import cv2
import time
import os
import random
import sys
import threading
import multiprocessing
import urllib
import warnings
from multiprocessing import Lock
warnings.filterwarnings("ignore")
def convert2Sketch( img, white_threshold ):
    scope = 255 / (255-white_threshold)
    b = -scope * white_threshold
    # print(img.shape, scope, b)
    [m,n,c] = img.shape
    # Remove colors
    if c > 1:
        temp_img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    else:
        temp_img_gray = img

    img_gray = [temp_img_gray,temp_img_gray,temp_img_gray]
    img_gray = np.array(img_gray).transpose((1,2,0))


    img_gray[img_gray <= white_threshold] = 0
    img_gray[img_gray > white_threshold] = scope * img_gray[img_gray > white_threshold] + b;
    img_gray[img_gray > 255 - white_threshold] = 255 - white_threshold



    img_gray2 = 255 - img_gray

    radius = 1;

    img_gray2 = min_filter(img_gray2, radius);

    img_mix = color_dodge(img_gray2, img_gray);

    res = np.array(img_mix).astype(np.uint8);
    return res

def  color_dodge(layer1, layer2):
    # print(layer2.dtype)
    layer3 = layer1.copy()
    layer3[layer2 < 255] = np.clip(layer1[layer2 < 255] / (255 - layer2[layer2 < 255]) * 256, 0 , 255)
    layer3[layer2 >= 255] = 255
    return layer3

# Function for min filter
def  min_filter(img, radius):
    kernel = np.ones((1 + 2 *radius,1 + 2 *radius),np.uint8)
    erosion = cv2.erode(img,kernel,iterations = 1)
    return erosion

# Function for min filter
def  max_filter(img, radius):
    kernel = np.ones((1 + 2 *radius,1 + 2 *radius),np.uint8)
    erosion = cv2.dilate(img,kernel,iterations = 1)
    return erosion







def get_image_url(index, index2, index3, line, input_filename,output_filename ):
    try:
        
        try:
            lock = Lock()
            lock.acquire()
            img = cv2.imread(input_filename)
            img = np.array(np.array(img).astype(np.float64) * 1.5).astype(np.uint8);
            white_threshold = 40;
            img_res = convert2Sketch(img, white_threshold);
            cv2.imwrite(output_filename,img_res)
        except Exception as e:
            print(e, index, index2, index3, line)
        finally:
            lock.release()
        
    except Exception as e:
        pass
    finally:
        pass
        
def running_processing(index, index2, lines, input_filename,output_filename):
    threads = []
    for index3, line in enumerate(lines) :
        print("--------------------------line------------------------------",index, index2, index3, line)
        t = threading.Thread(target= get_image_url, args=(index, index2, index3, line, input_filename[index3], output_filename[index3]))
        threads.append(t)
    for index_i, thread in enumerate(threads):
#         thread.setDaemon(True)
        thread.start()
    for index_j, thread in enumerate(threads):
        thread.join()
    
if __name__ == "__main__":

    Threads_number = 10
    Processes_number = 4

    input_path = sys.argv[1]
    output_path = input_path + "output"
    if not os.path.exists(output_path):
        os.makedirs(output_path)

    index = 0

    temp_lines = []
    file_name_list = []
    output_file_name_list = []

    all_temp_lines = []
    all_file_name_list = []
    all_output_file_name_list = []

    all_lines = os.listdir(input_path)
    len_all_lines = len(all_lines)
    for index,line in enumerate(all_lines):
        try:
            file_name = input_path + "/" + line
            output_file_name = output_path + "/" + line
            
            temp_lines.append(line)
            file_name_list.append(file_name)
            output_file_name_list.append(output_file_name)

            if len(temp_lines) % Threads_number == 0 or len_all_lines == (index + 1):
                all_temp_lines.append(temp_lines)
                all_file_name_list.append(file_name_list)
                all_output_file_name_list.append(output_file_name_list)

                if len(all_temp_lines) % Processes_number == 0 or len_all_lines == (index + 1):
                    # print("len(temp_lines)", len(temp_lines))
                    # print("len(all_temp_lines)", len(all_temp_lines))
                    multiThreads = []

                    for index2, value in enumerate(all_temp_lines):
                        mt = multiprocessing.Process(target=running_processing,args=(index, index2, all_temp_lines[index2], all_file_name_list[index2], all_output_file_name_list[index2]))
                        mt.start()
                        multiThreads.append(mt)
                    
                    for mthread in multiThreads:
                        mthread.join()

                    all_temp_lines = []
                    all_file_name_list = []
                    all_output_file_name_list = []

                temp_lines = []
                file_name_list = []
                output_file_name_list = []
        except Exception as e:
            print(e,line)(cycleGAN)
import os
import numpy as np
import cv2
import argparse

parser = argparse.ArgumentParser('create image pairs')
parser.add_argument('--fold_A', dest='fold_A', help='input directory for image A', type=str, default='../dataset/50kshoes_edges')
parser.add_argument('--fold_B', dest='fold_B', help='input directory for image B', type=str, default='../dataset/50kshoes_jpg')
parser.add_argument('--fold_AB', dest='fold_AB', help='output directory', type=str, default='../dataset/test_AB')
parser.add_argument('--num_imgs', dest='num_imgs', help='number of images',type=int, default=1000000)
parser.add_argument('--use_AB', dest='use_AB', help='if true: (0001_A, 0001_B) to (0001_AB)',action='store_true')
args = parser.parse_args()

for arg in vars(args):
    print('[%s] = ' % arg,  getattr(args, arg))

splits = os.listdir(args.fold_A)

for sp in splits:
    img_fold_A = os.path.join(args.fold_A, sp)
    img_fold_B = os.path.join(args.fold_B, sp)
    img_list = os.listdir(img_fold_A)
    if args.use_AB:
        img_list = [img_path for img_path in img_list if '_A.' in img_path]

    num_imgs = min(args.num_imgs, len(img_list))
    print('split = %s, use %d/%d images' % (sp, num_imgs, len(img_list)))
    img_fold_AB = os.path.join(args.fold_AB, sp)
    if not os.path.isdir(img_fold_AB):
        os.makedirs(img_fold_AB)
    print('split = %s, number of images = %d' % (sp, num_imgs))
    for n in range(num_imgs):
        name_A = img_list[n]
        path_A = os.path.join(img_fold_A, name_A)
        if args.use_AB:
            name_B = name_A.replace('_A.', '_B.')
        else:
            name_B = name_A
        path_B = os.path.join(img_fold_B, name_B)
        if os.path.isfile(path_A) and os.path.isfile(path_B):
            name_AB = name_A
            if args.use_AB:
                name_AB = name_AB.replace('_A.', '.') # remove _A
            path_AB = os.path.join(img_fold_AB, name_AB)
            im_A = cv2.imread(path_A, cv2.CV_LOAD_IMAGE_COLOR)
            im_B = cv2.imread(path_B, cv2.CV_LOAD_IMAGE_COLOR)
            im_AB = np.concatenate([im_A, im_B], 1)
            cv2.imwrite(path_AB, im_AB)

你可能感兴趣的:(cycleGAN工具记录)