Skip to content
Snippets Groups Projects
Commit ede8990e authored by fresleven's avatar fresleven
Browse files
parents b53ff568 32613d7d
No related branches found
No related tags found
No related merge requests found
crop/F2_3AUGUST2022.jpg

5.31 MiB

%% Cell type:code id: tags:
``` python
import glob
from PIL import Image
import pillow_heif
import pandas as pd
import numpy as np
from torchvision.utils import save_image
import torchvision.transforms.functional as fn
```
%% Cell type:code id: tags:
``` python
# TODO: overlap?
def generate_data(bg: list[Image], beetle_set: list[Image], num_beetles_arr: list[int]):
set_size = len(beetle_set)
set_bg_size = len(bg)
sim_arr, coords_arr = [],[]
for num_beetles in num_beetles_arr:
bg_id = np.random.randint(0, set_bg_size)
bg_temp = bg[bg_id].copy()
width, height = bg_temp.size
beetle_coords = []
for _ in range(num_beetles):
# get random beetle image
beetle_id = np.random.randint(0, set_size)
beetle_img = beetle_set[beetle_id]
beetle_width, beetle_height = beetle_img.size
# get random x,y coords to paste beetle
x = randint(0, width - beetle_width)
y = randint(0, height - beetle_height)
# get random beetle rotation
angle = randint(0, 359)
beetle_img = beetle_img.rotate(angle, resample=Image.BICUBIC)
bg_temp.paste(beetle_img, box=(x,y), mask=beetle_img)
beetle_coords.append((beetle_id, x, y, beetle_width, beetle_height, angle))
sim_arr.append(bg_temp)
coords_arr.append(beetle_coords)
return sim_arr, coords_arr
```
%% Cell type:code id: tags:
``` python
def find_coeffs(source_coords, target_coords):
matrix = []
for s, t in zip(source_coords, target_coords):
matrix.append([t[0], t[1], 1, 0, 0, 0, -s[0]*t[0], -s[0]*t[1]])
matrix.append([0, 0, 0, t[0], t[1], 1, -s[1]*t[0], -s[1]*t[1]])
A = np.matrix(matrix, dtype=float)
B = np.array(source_coords).reshape(8)
res = np.dot(np.linalg.inv(A.T * A) * A.T, B)
return np.array(res).reshape(8)
```
%% Cell type:code id: tags:
``` python
bg = Image.open("bg.png")
beetles = []
for file in glob.glob(r"/raid/projects/akhot2/group-01-phys371-sp2023/crop/beetles/*"):
b0 = Image.open(file)
beetles.append(b0);
# map corners of trap to corners of image
coeffs = find_coeffs([(128,6), (1904,62), (2113,3137), (3,3228)],
[(0,0), (bg.size[0], 0), (bg.size[0], bg.size[1]), (0, bg.size[1])])
bg_flat = bg.transform(bg.size, Image.PERSPECTIVE, coeffs, Image.BICUBIC)
```
%% Cell type:code id: tags:
``` python
beetle_counts = np.random.randint(0, 6, size=1)
sim_img_arr, coords_arr = generate_data([bg_flat], beetles, beetle_counts)
```
%% Cell type:code id: tags:
``` python
def export(img_arr, coords_arr):
transform = transforms.Compose([transforms.ToTensor()])
s = ""
image_set = "train"
change = len(img_arr)*0.8
for i in range(len(img_arr)):
s = ""
for coord in coords_arr[i]:
c, x, y, w, h, a = coord
img = img_arr[i]
s += f"{0} {x/img.size[0]} {y/img.size[1]} {w/img.size[0]} {h/img.size[1]}\n"
if i > change:
image_set = "test"
with open("data/" +image_set+ f"/labels/sim{i}.txt", "w") as f:
f.write(s)
save_image(img, "data/" +image_set+ f"/images/sim{i}.png")
```
%% Cell type:code id: tags:
``` python
export(sim_img_arr, coords_arr)
```
%% Output
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [51], in <cell line: 1>()
----> 1 export(sim_img_arr, coords_arr)
Input In [50], in export(img_arr, coords_arr)
13 with open("data/" +image_set+ f"/labels/sim{i}.txt", "w") as f:
14 f.write(s)
---> 15 save_image(img, "data/" +image_set+ f"/images/sim{i}.png")
File /raid/projects/akhot2/conda/envs/akhot2/lib/python3.9/site-packages/torch/autograd/grad_mode.py:27, in _DecoratorContextManager.__call__.<locals>.decorate_context(*args, **kwargs)
24 @functools.wraps(func)
25 def decorate_context(*args, **kwargs):
26 with self.clone():
---> 27 return func(*args, **kwargs)
File /raid/projects/akhot2/conda/envs/akhot2/lib/python3.9/site-packages/torchvision/utils.py:152, in save_image(tensor, fp, format, **kwargs)
150 if not torch.jit.is_scripting() and not torch.jit.is_tracing():
151 _log_api_usage_once(save_image)
--> 152 grid = make_grid(tensor, **kwargs)
153 # Add 0.5 after unnormalizing to [0, 255] to round to nearest integer
154 ndarr = grid.mul(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).to("cpu", torch.uint8).numpy()
File /raid/projects/akhot2/conda/envs/akhot2/lib/python3.9/site-packages/torch/autograd/grad_mode.py:27, in _DecoratorContextManager.__call__.<locals>.decorate_context(*args, **kwargs)
24 @functools.wraps(func)
25 def decorate_context(*args, **kwargs):
26 with self.clone():
---> 27 return func(*args, **kwargs)
File /raid/projects/akhot2/conda/envs/akhot2/lib/python3.9/site-packages/torchvision/utils.py:60, in make_grid(tensor, nrow, padding, normalize, value_range, scale_each, pad_value, **kwargs)
58 _log_api_usage_once(make_grid)
59 if not (torch.is_tensor(tensor) or (isinstance(tensor, list) and all(torch.is_tensor(t) for t in tensor))):
---> 60 raise TypeError(f"tensor or list of tensors expected, got {type(tensor)}")
62 if "range" in kwargs.keys():
63 warnings.warn(
64 "The parameter 'range' is deprecated since 0.12 and will be removed in 0.14. "
65 "Please use 'value_range' instead."
66 )
TypeError: tensor or list of tensors expected, got <class 'PIL.Image.Image'>
%% Cell type:code id: tags:
``` python
format
0 x y width height (each value normalized to size of image)
```
%% Cell type:code id: tags:
``` python
len(beetle_counts)
```
%% Output
100
%% Cell type:code id: tags:
``` python
```
crop/beetle0.png

4.83 KiB

crop/beetles/beetle0.png

12.7 KiB

crop/beetles/beetle1.png

11.3 KiB

crop/beetles/beetle2.png

12.5 KiB

crop/beetles/beetle3.png

12.6 KiB

crop/beetles/beetle4.png

9.61 KiB

crop/beetles/beetle5.png

11.7 KiB

This diff is collapsed.
crop/imgs/B18b_25August2022.jpg

3.2 MiB

File moved
crop/imgs/B2_15August2022.jpg

2.73 MiB

output.png

26.1 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment