--------------------------------
-- run against systemdb database
--------------------------------
-- check EML AFL component is installed
SELECT * FROM "SYS"."AFL_AREAS" WHERE AREA_NAME = 'EML';
SELECT * FROM "SYS"."AFL_PACKAGES" WHERE AREA_NAME = 'EML';
SELECT * FROM "SYS"."AFL_FUNCTIONS" WHERE AREA_NAME = 'EML';
-- check tenant database exists and is started
SELECT * FROM SYS.M_DATABASES;
------------------------------
-- run against tenant database
------------------------------
-- check script server
SELECT * FROM SYS.M_SERVICES;
-- add script server to tenant database --scriptserver is required for EML
ALTER DATABASE HXE ADD 'scriptserver';
-- create user
CREATE USER MYEML PASSWORD Testpassword1;
-- authorize EML administration
GRANT MONITORING TO MYEML;
GRANT CREATE REMOTE SOURCE TO MYEML;
GRANT SELECT, UPDATE, INSERT, DELETE ON _SYS_AFL.EML_MODEL_CONFIGURATION TO MYEML;
-- authorize creation & removal of EML procedures
GRANT AFLPM_CREATOR_ERASER_EXECUTE TO MYEML;
-- authorize execution of EML procedures
GRANT AFL__SYS_AFL_EML_EXECUTE TO MYEML;
-------Table for Image Data----------
CREATE TABLE APPAREL_IMAGES (
ID INTEGER,
IMAGE BLOB
);
class ConvertModel(tf.keras.Model):
def __init__(self,model):
super().__init__(self)
self.model = model
@tf.function(input_signature=[tf.TensorSpec([None],dtype=tf.string)])
def img_serve(self,images):
def input_to_actual_shape(img):
img = tf.io.decode_jpeg(img,channels=3)
img = tf.image.convert_image_dtype(img,tf.float32)
img = tf.image.resize_with_pad(img,200,200)
return img
img = tf.map_fn(input_to_actual_shape,images,dtype=tf.float32)
op = self.model(img)
return {"OUTPUT":op}
CustomMulticlass/1/saved_model.pb file,assets,variable folders.
tensorflow_model_server --model_name=Apparel\
--model_base_path="give absolute path of Uploaded Model Folder"\
--port=7500 --rest_api_port=7000
-- clean up
DROP REMOTE SOURCE "TensorFlowServing";
DROP TABLE "PARAMETERS";
DELETE FROM "_SYS_AFL"."EML_MODEL_CONFIGURATION" WHERE "Parameter"='RemoteSource' and "Value"='TensorFlowServing';
CREATE REMOTE SOURCE "TensorFlowServing" ADAPTER "grpc" CONFIGURATION 'server=ip address of Tensorflow serving machine;port=7500';
-- register model with Name "Apparel"
INSERT INTO "_SYS_AFL"."EML_MODEL_CONFIGURATION" VALUES ('Apparel', 'RemoteSource', 'TensorFlowServing');
SELECT * FROM "_SYS_AFL"."EML_MODEL_CONFIGURATION";
-- create parameters table (used in subsequent calls)
CREATE TABLE "PARAMETERS" ("Parameter" VARCHAR(100), "Value" VARCHAR(100));
-- apply registered models
CALL "_SYS_AFL"."EML_CTL_PROC" ('UpdateModelConfiguration', "PARAMETERS", ?);
-- verify model is up and running on remote source
INSERT INTO "PARAMETERS" VALUES ('Model', 'Apparel');
CALL "_SYS_AFL"."EML_CHECKDESTINATION_PROC" ("PARAMETERS", ?);
-- clean up
DROP TYPE "T_PARAMS";
DROP TYPE "T_DATA";
DROP TYPE "T_RESULTS";
DROP TABLE "SIGNATURE";
DROP TABLE "PARAMS";
DROP TABLE "RESULTS";
DROP VIEW "V_DATA";
CALL "SYS"."AFLLANG_WRAPPER_PROCEDURE_DROP" ('MYEML', 'APPAREL');
CREATE TYPE "T_PARAMS" AS TABLE ("Parameter" VARCHAR(100), "Value" VARCHAR(100));
CREATE TYPE "T_DATA" AS TABLE ("images" BLOB);
CREATE TYPE "T_RESULTS" AS TABLE ("black_dress" FLOAT,"black_pants" FLOAT,
"black_shirt" FLOAT,"black_shoes" FLOAT,"black_shorts" FLOAT,"blue_dress" FLOAT,
"blue_pants" FLOAT,"blue_shirt" FLOAT,"blue_shoes" FLOAT,"blue_shorts" FLOAT,
"brown_pants" FLOAT,"brown_shoes" FLOAT,"brown_shorts" FLOAT,"green_pants" FLOAT,
"green_shirt" FLOAT,"green_shoes" FLOAT, "green_shorts" FLOAT,"red_dress" FLOAT,
"red_pants" FLOAT,"red_shoes" FLOAT,"white_dress" FLOAT,"white_pants" FLOAT, "white_shoes" FLOAT,"white_shorts" FLOAT);
CREATE TYPE "T_FINAL" AS TABLE ("Image.Sno" integer,
outcome VARCHAR(20),accu FLOAT);
CREATE COLUMN TABLE "SIGNATURE" ("POSITION" INTEGER,
"SCHEMA_NAME" NVARCHAR(256), "TYPE_NAME" NVARCHAR(256),
"PARAMETER_TYPE" VARCHAR(7));
INSERT INTO "SIGNATURE" VALUES (1, 'MYEML', 'T_PARAMS', 'IN');
INSERT INTO "SIGNATURE" VALUES (2, 'MYEML', 'T_DATA', 'IN');
INSERT INTO "SIGNATURE" VALUES (3, 'MYEML', 'T_RESULTS', 'OUT');
CALL "SYS"."AFLLANG_WRAPPER_PROCEDURE_CREATE" ('EML', 'PREDICT',
'MYEML', 'APPAREL', "SIGNATURE");
-- create tables
CREATE TABLE "PARAMS" LIKE "T_PARAMS";
CREATE TABLE "RESULTS" LIKE "T_RESULTS";
CREATE TABLE "DATA" LIKE "T_DATA";
CREATE TABLE "OUTPUT" LIKE "T_FINAL";
DROP VIEW "V_IMAGE_DATA";
CREATE VIEW "V_IMAGE_DATA" AS
SELECT "IMAGE" AS "images"
FROM "APPAREL_IMAGES" ;
TRUNCATE TABLE "PARAMS";
INSERT INTO "PARAMS" VALUES ('Model', 'Apparel');
---Call the Tensorflow serving with the wrapper procedure APPAREL
CALL "APPAREL" ("PARAMS", "V_IMAGE_DATA", "RESULTS") WITH OVERVIEW;
SELECT * FROM "RESULTS";
DO
BEGIN
DECLARE V_I INTEGER;
DECLARE V_OP VARCHAR(20);
DECLARE V_ACCU FLOAT;
LT_GREATEST = SELECT GREATEST("black_dress","black_pants","black_shirt","black_shoes","black_shorts","blue_dress","blue_pants","blue_shirt",
"blue_shoes","blue_shorts","brown_pants","brown_shoes","brown_shorts","green_pants","green_shirt","green_shoes",
"green_shorts","red_dress","red_pants","red_shoes","white_dress","white_pants","white_shoes","white_shorts") AS GREATEST
FROM "RESULTS";
LT_RESULTS = SELECT * FROM "RESULTS";
FOR V_I IN 1..RECORD_COUNT(:LT_RESULTS) DO
IF :LT_RESULTS."black_dress"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'black_dress';
V_ACCU = :LT_RESULTS."black_dress"[V_I];
ELSEIF :LT_RESULTS."black_pants"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'black_pants';
V_ACCU = :LT_RESULTS."black_pants"[V_I];
ELSEIF :LT_RESULTS."black_shirt"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'black_shirt';
V_ACCU = :LT_RESULTS."black_shirt"[V_I];
ELSEIF :LT_RESULTS."black_shoes"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'black_shoes';
V_ACCU = :LT_RESULTS."black_shoes"[V_I];
ELSEIF :LT_RESULTS."black_shorts"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'black_shorts';
V_ACCU = :LT_RESULTS."black_shorts"[V_I];
ELSEIF :LT_RESULTS."blue_dress"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'blue_dress';
V_ACCU = :LT_RESULTS."blue_dress"[V_I];
ELSEIF :LT_RESULTS."blue_pants"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'blue_pants';
V_ACCU = :LT_RESULTS."blue_pants"[V_I];
ELSEIF :LT_RESULTS."blue_shirt"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'blue_shirt';
V_ACCU = :LT_RESULTS."blue_shirt"[V_I];
ELSEIF :LT_RESULTS."blue_shoes"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'blue_shoes';
V_ACCU = :LT_RESULTS."blue_shoes"[V_I];
ELSEIF :LT_RESULTS."blue_shorts"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'blue_shorts';
V_ACCU = :LT_RESULTS."blue_shorts"[V_I];
ELSEIF :LT_RESULTS."brown_pants"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'brown_pants';
V_ACCU = :LT_RESULTS."brown_pants"[V_I];
ELSEIF :LT_RESULTS."brown_shoes"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'brown_shoes';
V_ACCU = :LT_RESULTS."brown_shoes"[V_I];
ELSEIF :LT_RESULTS."brown_shorts"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'brown_shorts';
V_ACCU = :LT_RESULTS."brown_shorts"[V_I];
ELSEIF :LT_RESULTS."green_pants"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'green_pants';
V_ACCU = :LT_RESULTS."green_pants"[V_I];
ELSEIF :LT_RESULTS."green_shirt"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'green_shirt';
V_ACCU = :LT_RESULTS."green_shirt"[V_I];
ELSEIF :LT_RESULTS."green_shoes"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'green_shoes';
V_ACCU = :LT_RESULTS."green_shoes"[V_I];
ELSEIF :LT_RESULTS."green_shorts"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'green_shorts';
V_ACCU = :LT_RESULTS."green_shorts"[V_I];
ELSEIF :LT_RESULTS."red_dress"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'red_dress';
V_ACCU = :LT_RESULTS."red_dress"[V_I];
ELSEIF :LT_RESULTS."red_pants"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'red_pants';
V_ACCU = :LT_RESULTS."red_pants"[V_I];
ELSEIF :LT_RESULTS."red_shoes"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'red_shoes';
V_ACCU = :LT_RESULTS."red_shoes"[V_I];
ELSEIF :LT_RESULTS."white_dress"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'white_dress';
V_ACCU = :LT_RESULTS."white_dress"[V_I];
ELSEIF :LT_RESULTS."white_pants"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'white_pants';
V_ACCU = :LT_RESULTS."white_pants"[V_I];
ELSEIF :LT_RESULTS."white_shoes"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'white_shoes';
V_ACCU = :LT_RESULTS."white_shoes"[V_I];
ELSEIF :LT_RESULTS."white_shorts"[V_I] = :LT_GREATEST.GREATEST[V_I] THEN
V_OP = 'white_shorts';
V_ACCU = :LT_RESULTS."white_shorts"[V_I];
END IF;
INSERT INTO "OUTPUT" VALUES (V_I,V_OP,V_ACCU);
END FOR;
END;
SELECT * FROM "OUTPUT";
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
36 | |
7 | |
5 | |
5 | |
5 | |
4 | |
4 | |
4 | |
3 | |
3 |