Remove unintended required dependency on PIL
**Describe the bug**
Recent version of ART became dependent on an installation of `PIL`. We would like to change it back to an optional dependency.

diff --git a/art/attacks/poisoning/perturbations/image_perturbations.py b/art/attacks/poisoning/perturbations/image_perturbations.py
index 9355f054a..d04cbe9d0 100644
--- a/art/attacks/poisoning/perturbations/image_perturbations.py
+++ b/art/attacks/poisoning/perturbations/image_perturbations.py
@@ -21,7 +21,6 @@ Adversarial perturbations designed to work for images.
 from typing import Optional, Tuple
 
 import numpy as np
-from PIL import Image
 
 
 def add_single_bd(x: np.ndarray, distance: int = 2, pixel_value: int = 1) -> np.ndarray:
@@ -112,6 +111,8 @@ def insert_image(
     :param blend: The blending factor
     :return: Backdoored image.
     """
+    from PIL import Image
+
     n_dim = len(x.shape)
     if n_dim == 4:
         return np.array(
diff --git a/art/visualization.py b/art/visualization.py
index b828741fd..f33fa2bfd 100644
--- a/art/visualization.py
+++ b/art/visualization.py
@@ -25,7 +25,6 @@ import os.path
 from typing import List, Optional, TYPE_CHECKING
 
 import numpy as np
-from PIL import Image
 
 from art import config
 
@@ -97,6 +96,8 @@ def save_image(image_array: np.ndarray, f_name: str) -> None:
     :param image_array: Image to be saved.
     :param f_name: File name containing extension e.g., my_img.jpg, my_img.png, my_images/my_img.png.
     """
+    from PIL import Image
+
     file_name = os.path.join(config.ART_DATA_PATH, f_name)
     folder = os.path.split(file_name)[0]
     if not os.path.exists(folder):
['art/attacks/poisoning/perturbations/image_perturbations.py', 'art/visualization.py']