| # | |
| # These are currently near-useless, but at least they're instant. | |
| # | |
| import json | |
| import torch | |
| def linear_encoder(img, ver="v1", weights="./linear_weights.json"): | |
| """Encodes tensor RGB[3,W,H](0.0-1.0) into tensor LATENT[4,W,H]""" | |
| with open(weights) as f: | |
| w = json.load(f) | |
| w = w[ver] | |
| lat = torch.stack([ | |
| ( # A channel | |
| (img[0]*w["A"]["R"]) + # R | |
| (img[1]*w["A"]["G"]) + # G | |
| (img[2]*w["A"]["B"]) + # B | |
| w["A"]["C"] # Constant | |
| ),( # B channel | |
| (img[0]*w["B"]["R"]) + # R | |
| (img[1]*w["B"]["G"]) + # G | |
| (img[2]*w["B"]["B"]) + # B | |
| w["B"]["C"] # Constant | |
| ),( # C channel | |
| (img[0]*w["C"]["R"]) + # R | |
| (img[1]*w["C"]["G"]) + # G | |
| (img[2]*w["C"]["B"]) + # B | |
| w["C"]["C"] # Constant | |
| ),( # D channel | |
| (img[0]*w["D"]["R"]) + # R | |
| (img[1]*w["D"]["G"]) + # G | |
| (img[2]*w["D"]["B"]) + # B | |
| w["D"]["C"] # Constant | |
| ), | |
| ]) | |
| return lat | |