# Copyright 2021 Huawei Technologies Co., Ltd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================ """The client of example add.""" import os import json from io import BytesIO import cv2 from PIL import Image from mindspore_serving.client import Client from perturb_config import PerturbConfig def perturb(perturb_config): """Invoke servable perturbation method natural_perturbation""" client = Client("10.175.244.87:5500", "perturbation", "natural_perturbation") instances = [] img_path = '/root/mindarmour/example/adversarial/test_data/1.png' result_path = '/root/mindarmour/example/adv/result/' methods_number = 2 outputs_number = 3 img = cv2.imread(img_path) img = cv2.imencode('.png', img)[1].tobytes() perturb_config = json.dumps(perturb_config) instances.append({"img": img, 'perturb_config': perturb_config, "methods_number": methods_number, "outputs_number": outputs_number}) result = client.infer(instances) file_names = result[0]['file_names'].split(';') length = result[0]['file_length'].tolist() before = 0 for name, leng in zip(file_names, length): res_img = result[0]['results'] res_img = res_img[before:before + leng] before = before + leng print('name: ', name) image = Image.open(BytesIO(res_img)) image.save(os.path.join(result_path, name)) names_dict = result[0]['names_dict'] with open('names_dict.json', 'w') as file: file.write(names_dict) if __name__ == '__main__': perturb(PerturbConfig)