Spaces:
Sleeping
Sleeping
File size: 2,793 Bytes
87627fc d1d7e79 87627fc d1d7e79 87627fc d1d7e79 87627fc d1d7e79 87627fc d1d7e79 87627fc d1d7e79 87627fc d1d7e79 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | from zern_generator import Zernike
from PIL import Image
from fraunhofer_test import Fraunhofer, FraunhoferGPU
import cupy as cp
import matplotlib.pyplot as plt
import itertools
from time import time
from pprint import pprint
import os
from multiprocessing import Pool, cpu_count
import numpy as np
zernike = Zernike()
zernike.set_image_params(npix=2 ** 8)
fraunhofer = FraunhoferGPU(zernike)
def generate_image(z, group_depth):
arr = fraunhofer.generate_diff(1, 0, *z)
a = cp.min(arr[2])
b = cp.max(arr[2])
img_arr = ((arr[2] - a) / (b - a) * 255).astype(cp.uint8)
img = Image.fromarray(np.stack([img_arr] * 3, axis=-1), mode='RGB')
coeffs = '_'.join([f'{x:.2f}' for x in z[group_depth:]])
group = "/".join([str(x) for x in z[:group_depth]])
path = f'./screens_tst/{group}'
if not os.path.exists(path):
try:
os.makedirs(path)
except:
print("Directory already exists. Skipping.")
filename = f'{path}/{coeffs}_.png'
img.save(filename)
def generate_dataset(range, step, kf_cnt):
zs = get_zernike_coeffs(range, step, kf_cnt)
num_workers = 24
if num_workers is None:
num_workers = cpu_count()
with Pool(num_workers) as pool:
results = []
for result in pool.imap_unordered(generate_image, zs):
results.append(result)
for result in results:
result.get()
def generate_dataset_gpu(zs):
c = 0
window_size = 50
times = []
start_time = time()
total_images = len(zs)
num_workers = 24
if num_workers is None:
num_workers = cpu_count()
for z in zs:
generate_image(z)
def get_zernike_coeffs(range, step, kf_cnt):
points = tuple(np.linspace(*range, int((range[1] - range[0]) / step + 1)))
points_as_tuples = tuple(float(x) for x in points)
return np.array(list(set(itertools.product(points_as_tuples, repeat=kf_cnt))))
if __name__ == '__main__':
# rng = (-5, 5)
# step = 0.5
# points = tuple(np.linspace(*rng, int((rng[1] - rng[0]) / step + 1)))
# points_as_tuples = tuple(float(x) for x in points)
zernikes = get_zernike_coeffs((-5,5), 0.25, 2)
print("Total images: ", len(zernikes))
total_gen_time, total_save_time = 0, 0
start = time()
for i, z in enumerate(zernikes):
generate_image(z, 1)
if i % 100 == 0:
print(f"{i}/{len(zernikes)}")
print("Average generation time: ", (time()-start)/len(zernikes))
# generate_dataset(zernikes)
# last = 1
# for i in range(1,6):
# p = get_zernike_coeffs([-5,5], 0.25, i)
# print(f"Количество коэфф-ов: {i} -> Количество комбинаций: {len(p)}")
# last = len(p) |