File: //test_python/codificatore_light.py
import numpy as np
from PIL import Image
def sasso_ottimizzato_encoding(image_path, k_components=180):
img = Image.open(image_path).convert('RGB')
img_array = np.asarray(img, dtype=np.float32) / 255.0
data_dict = {'shape': img_array.shape}
for i, color in enumerate(['r', 'g', 'b']):
channel = img_array[:,:,i]
U, S, Vt = np.linalg.svd(channel, full_matrices=False)
# Casting a float16 per abbattere il peso del file
# Conserviamo k_components per mantenere i capelli rasati nitidi
data_dict[f'U_{color}'] = U[:, :k_components].astype(np.float16)
data_dict[f'S_{color}'] = S[:k_components].astype(np.float16)
data_dict[f'Vt_{color}'] = Vt[:k_components, :].astype(np.float16)
# Salvataggio con massima compressione di archivio
np.savez_compressed('sasso_v4_light.npz', **data_dict)
import os
size = os.path.getsize('sasso_v4_light.npz') / (1024*1024)
print(f"Sasso Ottimizzato generato: {size:.2f} MB")
if __name__ == "__main__":
sasso_ottimizzato_encoding("immagine_volto.jpg")