def LayerWeights_init(self, weightsShape=None, weightsFlattenAxis=None, content=None, floatType="float32", floatsPerLine=12, src=None, Extension=None, mixedclass_=None): self.original_tagname_ = None self.weightsShape = supermod._cast(None, weightsShape) self.weightsFlattenAxis = supermod._cast(None, weightsFlattenAxis) self.src = supermod._cast(None, src) if Extension is None: self.Extension = [] else: self.Extension = Extension if mixedclass_ is None: self.mixedclass_ = supermod.MixedContainer else: self.mixedclass_ = mixedclass_ validFloatTypes = [ "float6", "float7", "float8", "float16", "float32", "float64" ] if floatType not in validFloatTypes: floatType = "float32" from nyoka.Base64 import FloatBase64 base64string = "\t\t\t\t" + "data:" + floatType + ";base64," + FloatBase64.from_floatArray( content, floatsPerLine) base64string = base64string.replace("\n", "\n\t\t\t\t") self.content_ = [supermod.MixedContainer(1, 2, "", base64string)] self.valueOf_ = base64string
def test_02_image_classifier_with_base64string_as_input(self): model = applications.MobileNet(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) activType = 'sigmoid' x = model.output x = Flatten()(x) x = Dense(1024, activation="relu")(x) predictions = Dense(2, activation=activType)(x) model_final = Model(inputs=model.input, outputs=predictions, name='predictions') cnn_pmml = KerasToPmml(model_final,model_name="MobileNetBase64",description="Demo",\ copyright="Internal User",dataSet='imageBase64',predictedClasses=['dogs','cats']) cnn_pmml.export(open('2classMBNetBase64.pmml', "w"), 0) img = image.load_img('nyoka/tests/resizedCat.png') img = img_to_array(img) img = preprocess_input(img) imgtf = np.expand_dims(img, axis=0) base64string = "data:float32;base64," + FloatBase64.from_floatArray( img.flatten(), 12) base64string = base64string.replace("\n", "") csvContent = "imageBase64\n\"" + base64string + "\"" text_file = open("input.csv", "w") text_file.write(csvContent) text_file.close() model_pred = model_final.predict(imgtf) model_preds = {'dogs': model_pred[0][0], 'cats': model_pred[0][1]} model_name = self.adapa_utility.upload_to_zserver( '2classMBNetBase64.pmml') predictions, probabilities = self.adapa_utility.score_in_zserver( model_name, 'input.csv', 'DN') self.assertEqual( abs(probabilities['cats'] - model_preds['cats']) < 0.00001, True) self.assertEqual( abs(probabilities['dogs'] - model_preds['dogs']) < 0.00001, True)
import nyoka if self.src is not None: raw_content = open(self.src, "r").read() elif self.content_ is not None and self.content_[0].value is not None: raw_content = self.content_[0].value raw_content = raw_content.replace(' ', '') raw_content = raw_content.replace('\t', '') raw_content = raw_content.replace('\n', '') if raw_content.startswith("data:float32;base64,") or raw_content.startswith("data:float64;base64,") or raw_content.startswith("data:float16;base64,"): raw_content = raw_content[20:] + "==" elif raw_content.startswith("data:float;base64,"): raw_content = raw_content[18:] + "==" else: return None from nyoka.Base64 import FloatBase64 if raw_content.find("+") > 0: return FloatBase64.to_floatArray_urlsafe(raw_content) else: return FloatBase64.to_floatArray(raw_content)