Facebook
From Flying Hog, 2 Years ago, written in Python.
This paste is a reply to Re: Re: Untitled from Colossal Cockroach - go back
Embed
Viewing differences between Re: Re: Untitled and Re: Re: Re: Untitled
pip install sewar

import tensorflow as tf
from tensorflow import keras

from tensorflow.keras.models import Sequential, Model, load_model
from tensorflow.keras.layers import Dense, Input, Activation
from tensorflow.keras.optimizers.legacy import Adam 
from tensorflow.keras.utils import plot_model

from tensorflow.keras import metrics
from tensorflow.keras import losses
from skimage import metrics as mcs
import os
from sewar.full_ref import mse
import pandas as pd
from PIL import Image
import cv2
import numpy as np

from google.colab import drive
drive.mount('/content/drive')

df = pd.read_csv('/content/drive/My Drive/zbiór_danych/dataset_chrominance_tables.csv',index_col=[0])

!unzip "/content/drive/My Drive/zbiór_danych/tiny-imagenet-200-gray.zip"

!unzip "/content/drive/My Drive/zbiór_danych/tiny-imagenet-200-color.zip"

class Dataset:
  def __init__(self, quality):
    self.quality = quality
    self.selected_rows = df.copy()
    self.selected_rows.where(self.selected_rows["quality"] == quality, inplace = True)
    self.selected_rows = self.selected_rows[~self.selected_rows['quality'].isnull()]

    self.train_x = np.empty([int(self.selected_rows.shape[0]*0.9), 64*64])
    self.test_x = np.empty([self.selected_rows.shape[0] - int(self.selected_rows.shape[0]*0.9), 64*64])
    self.train_y = np.empty([int(self.selected_rows.shape[0]*0.9), 64])
    self.test_y = np.empty([self.selected_rows.shape[0] - int(self.selected_rows.shape[0]*0.9), 64])

    self.model = Sequential()

    self.prepare_x()
    self.prepare_y()

  def prepare_x(self):
    x = np.empty([self.selected_rows.shape[0],64*64])
    for i in range(self.selected_rows.shape[0]):
      imageA = cv2.imread("tiny-imagenet-200-gray/"+self.selected_rows["name"].iloc[i])
      grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
      x[i] = grayA.flatten()

    x = x.astype('float32')
    x /= 255
    self.train_x = x[:int(self.selected_rows.shape[0]*0.9)]
    self.test_x = x[int(self.selected_rows.shape[0]*0.9):]
  
  def prepare_y(self):
    y = self.selected_rows["quantization table"].to_numpy()
    y_array = np.empty([self.selected_rows.shape[0],64])
    for i in range(self.selected_rows.shape[0]):
      y_array[i] = [float(s) for s in y[i].strip('[]').split(',')]

    self.train_y = y_array[:int(self.selected_rows.shape[0]*0.9)]
    self.test_y = y_array[int(self.selected_rows.shape[0]*0.9):]
    
  def create_model(self):
    self.model.add(Input(shape=(4096,)))

    self.model.add(Dense(256))
    self.model.add(Activation('relu'))

    self.model.add(Dense(64))
    self.model.add(Activation('relu'))

    self.model.compile(
        optimizer=Adam(),
        loss='mse',
        metrics=[tf.keras.metrics.MeanSquaredError()])

    self.model.summary()
    # # visualize the model
    dot_img_file = '/tmp/model_1.png'
    plot_model(self.model, to_file=dot_img_file, show_shapes=True)

  def train_model(self):
    history = self.model.fit(self.train_x, self.train_y,
                    batch_size=50,
                    epochs=100,
                    verbose=1,
                    validation_data=(self.test_x, self.test_y))
    
  def load_weights(self, path):
    self.model.load_weights(path)
  
  def save_weights(self, path):
    self.model.save_weights(path)
    
def data_preparation(path, quality, test_color):
    im_pil = Image.open(path)
    im_pil.save("picture.jpeg", quality = quality)
    im_pil2 = Image.open("picture.jpeg")
    imageA = np.array(im_pil) 
            # Convert RGB to BGR 
    if(len(imageA.shape)==3):
        imageA = imageA[:, :, ::-1] 
        grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
    else:
        grayA = imageA

    imageB = np.array(im_pil2) 
            # Convert RGB to BGR 
    if(len(imageB.shape)==3):
        imageB = imageB[:, :, ::-1]
        grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)
    else:
        grayB = imageB
    
    (score, diff) = mcs.structural_similarity(grayA, grayB, full=True)
    compression = os.path.getsize("picture.jpeg")#/os.path.getsize(path)
jpeg")
    if test_color == True:
      score2 = mse(imageA,imageB)
    else:
      score2 = mse(grayA,grayB)
    print("Original compression results:")
    print(score)
    print(compression)
    print(score2)
    if test_color == True and len(im_pil2.quantization) > 1:
      return [score,compression,score2, im_pil2.quantization[0], im_pil2.quantization[1]]
    else:
      return [score,compression,score2, im_pil2.quantization[0], None]
    
def test(x1, path, test_color, x2 = None):
    qtable = list(map(int, x1))
    array = {0: qtable}
    if (x2 != None):
      array[1] = x2
    im_pil = Image.open(path)
    im_pil.save("picture.jpeg", qtables = array)
    im_pil2 = Image.open("picture.jpeg")

    imageA = np.array(im_pil) 
            # Convert RGB to BGR 
    if(len(imageA.shape)==3):
        imageA = imageA[:, :, ::-1] 
        grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
    else:
        grayA = imageA

    imageB = np.array(im_pil2) 
            # Convert RGB to BGR 
    if(len(imageB.shape)==3):
        imageB = imageB[:, :, ::-1]
        grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)
    else:
        grayB = imageB

    (score, diff) = mcs.structural_similarity(grayA, grayB, full=True)
    if test_color == True:
      score2 = mse(imageA,imageB)
    else:
      score2 = mse(grayA,grayB)                            
    compression = os.path.getsize("picture.jpeg")#/os.path.getsize(path)
jpeg")
    print("New compression results:")
    print(score)
    print(compression)
    print(score2)
    return [score,compression,score2]

Replies to Re: Re: Re: Untitled rss

Title Name Language When
Re: Re: Re: Re: Untitled Jittery Horse python 2 Years ago.