Documentation officielle de ImageAI en Fran?ais !¶
ImageAI est une biblioth?que python d?velopp?e pour permettre aux d?veloppeurs, chercheurs, ?tudiants de construire des applications et des syst?mes qui int?grent l?apprentissage profond et la vision assist?e par ordinateur en utilisant simplement quelques lignes de code. Cette documentation est fournie pour donner assez de d?tails sur toutes classes et fonctions disponibles dans ImageAI, couples a un certain nombre d?exemples de code.
ImageAI est un projet d?velopp? par Moses Olafenwa et John Olafenwa, the AI Commons team.
Le dossier official GitHub de ImageAI est https://github.com/OlafenwaMoses/ImageAI

Installation de ImageAI¶
ImageAI n?cessite que vous ayez Python 3.5.1 ou sup?rieur installe ainsi que d?autres librairies et biblioth?ques python. Avant de proc?der a l?installation de ImageAI vous devez installer les ?l?ments suivants?:
Python 3.5.1 or superieur, telecharger Python
pip3 , ` telecharger PyPi <https://pypi.python.org/pypi/pip/>`_
Tensorflow 1.4.0 or superieur
pip3 install --upgrade tensorflow
Numpy 1.13.1 or superieur
pip3 install numpy
SciPy .19.1 or superieur
pip3 install scipy
OpenCV
pip3 install opencv-python
Pillow
pip3 install pillow
Matplotlib
pip3 install matplotlib
h5py
pip3 install h5py
Keras
pip3 install keras
Une fois que vous avez install? tous ces packages sur votre ordinateur, vous pouvez installer ImageAI en utilisant la commande pip ci-dessous. Installation de ImageAI
pip3 install https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.2/imageai-2.0.2-py3-none-any.whl
Une fois que ImageAI est install?, vous pouvez en quelques lignes de code accomplir les t?ches de vision assist?e par ordinateur les plus puissantes comme vous pouvez le voir ci-dessous. Reconnaissance d?Image
Retrouver tous les codes et la documentation via les liens dans la section en bas de page.

- convertible : 52.459555864334106
- sports_car : 37.61284649372101
- pickup : 3.1751200556755066
- car_wheel : 1.817505806684494
- minivan : 1.7487050965428352
D?tection d?objets sur Image
Retrouver tous les codes et la documentation via les liens dans la section en bas de page.

D?tection d?objets sur Vid?o
Retrouver tous les codes et la documentation via les liens dans la section en bas de page.

Analyse de d?tection Vid?o
Retrouver tous les codes et la documentation via les liens dans la section en bas de page.

Inf?rence et entrainement personnalise pour reconnaissance d?images
Retrouver tous les codes et la documentation via les liens dans la section en bas de page.

Suivez les liens dans la section contenu ci-dessous pour retrouver tous les exemples et la documentation compl?te des classes et fonctions disponibles.
Classes de pr?diction¶
ImageAI fournit un ensemble de classes puissantes et faciles ? utiliser pour accomplir les t?ches de reconnaissance sur les images. Vous pouvez pourrez accomplir toutes ces taches de pointe de vision assist?e par ordinateur avec du code python allant de 5 ? 12 lignes de code. Une fois que le python installe, d?autres biblioth?ques et ImageAI installes dans votre ordinateur, il n?y a aucune limite aux applications incroyables que vous pouvez cr?er. Trouvez ci-dessous les classes et leur fonction respective rendues disponibles pour votre utilisation. Ces classes peuvent ?tre int?gr?es dans n?importe quelle programme python traditionnel que vous d?veloppez, que cela soit un site internet, une application Windows/Linux/MacOS ou un syst?me qui supporte ou fait partir d?un r?seau local.
======= imageai.Prediction.ImagePrediction =======
La classe ImagePrediction vous fournit des fonctions pour utiliser les mod?les de reconnaissance d?images les plus pointus tel SqueezeNet, ResNet, InceptionV3 et DenseNet qui ont ?t? pr?-entraines sur la base de donn?es ImageNet-1000. Ceci pour dire que vous pouvez utiliser ces classes pour d?tecter et reconnaitre plus de 1000 diff?rents objets sur n?importe quelle image ou ensemble d?images. Pour initialiser la classe dans votre code, vous allez cr?er une instance dans votre code comme suit?:
from imageai.Prediction import ImagePrediction
prediction = ImagePrediction()
Nous avons fourni les mod?les pr?-entraines de reconnaissance d?images des algorithmes suivants SqueezeNet, ResNet, InceptionV3 et DenseNet que vous allez utiliser dans la classe ImagePrediction pour faire la reconnaissance sur les images. Trouvez ci-dessous le lien pour t?l?charger les mod?les. Vous pouvez t?l?charger le mod?le que vous voulez utiliser.
Telechargez le modele SqueezeNet
` T?l?chargez le mod?le InceptionV3 <https://github.com/OlafenwaMoses/ImageAI/releases/tag/1.0 />`_
` T?l?chargez le mod?le DenseNet <https://github.com/OlafenwaMoses/ImageAI/releases/tag/1.0 />`_
Apr?s avoir cr?? une nouvelle instance de la classe ImagePrediction, Vous pouvez utiliser les fonctions ci-dessous pour d?finir les valeurs des propri?t?s et commencer la reconnaissance.
.setModelTypeAsSqueezeNet() , cette fonction ?tablit comme mod?le pour votre instance de reconnaissance d?image que vous avez cr??, le mod?le SqueezeNet?; ce qui veut dire que vous accomplirez vos taches de pr?diction en utilisant les mod?les pr?-entrain?s de SqueezeNet que vous avez t?l?charg? avec le lien ci-dessus. Trouvez le code ci-dessous?:
prediction.setModelTypeAsSqueezeNet()
.setModelTypeAsResNet() , cette fonction ?tablit comme mod?le pour votre instance de reconnaissance d?image que vous avez cr??, le mod?le ResNet?; ce qui veut dire que vous accomplirez vos taches de pr?diction en utilisant les mod?les pr?-entrain?s de ResNet que vous avez t?l?charg? avec le lien ci-dessus. Trouvez le code ci-dessous?:
prediction.setModelTypeAsResNet()
.setModelTypeAsInceptionV3() , cette fonction ?tablit comme mod?le pour votre instance de reconnaissance d?image que vous avez cr??, le mod?le InceptionV3?; ce qui veut dire que vous accomplirez vos taches de pr?diction en utilisant les mod?les pr?-entrain?s de InceptionV3 que vous avez t?l?charg? avec le lien ci-dessus. Trouvez le code ci-dessous?:
prediction.setModelTypeAsInceptionV3()
.setModelTypeAsDenseNet() , cette fonction ?tablit comme mod?le pour votre instance de reconnaissance d?image que vous avez cr??, le mod?le DenseNet?; ce qui veut dire que vous accomplirez vos taches de pr?diction en utilisant les mod?les pr?-entrain?s de DenseNet que vous avez t?l?charg? avec le lien ci-dessus. Trouvez le code ci-dessous?:
prediction.setModelTypeAsDenseNet()
- .setModelPath() , cette fonction accepte une chaine de caract?re qui doit ?tre le chemin vers le fichier mod?le que vous avez t?l?charg?, il doit correspondre au type de mod?le que vous avez choisi pour votre instance de pr?diction/d?tection sur image. Trouvez un exemple de code, et param?tres de fonction ci-dessous?::
prediction.setModelPath(“resnet50_weights_tf_dim_ordering_tf_kernels.h5”)
– param?tre model_path (requis) : Il s?agit du chemin vers votre fichier mod?le t?l?charg?.
.loadModel() , Cette fonction charge le mod?le ? partir du chemin que vous avez sp?cifi? dans l?appel de fonction ci-dessus dans votre instance de pr?diction. Trouvez un exemple de code ci-dessous?:
prediction.loadModel()
– param?tre prediction_speed (optionnel) : Ce param?tre vous permet de r?duire jusquՈ 80% le temps qu?il faut pour la tache de pr?diction sur une image, ce qui conduit ? une l?g?re r?duction de la pr?cision. Ce param?tre accepte les chaines de caract?res. Les valeurs disponibles sont “normal”, “fast”, “faster” et “fastest”. La valeur par d?faut est “normal”.
.predictImage() , C?est la fonction qui effectue la tache de pr?diction a proprement parle sur une image. Elle peut ?tre appel?e plusieurs fois sur plusieurs images une fois que le mod?le a ?t? charge dans l?instance de pr?diction. Trouvez un exemple de code, et param?tres de fonction ci-dessous?:
predictions, probabilities = prediction.predictImage("image1.jpg", result_count=10)
– param?tre image_input (requis) : Il fait r?f?rence au chemin vers votre fichier images, tableau Numpy de votre image ou le fichier flux de votre image, d?pendamment du type que vous avez choisi.
—param?tre result_count (optionnel) : Il fait r?f?rence au nombre possible de pr?dictions qui doivent ?tre retourne. Le param?tre a une valeur par d?faut de 5.
– param?tre input_type (optionnel) : Il fait r?f?rence au type de la valeur d?entr?e dans le param?tre image_input. Il est ?file? par d?faut et accepte ?array? et ?stream? aussi. ?
—valeur retourn?e prediction_results (une liste python) : La premi?re valeur renvoy?e par la fonction predictImage est une liste qui contient tous les r?sultats possibles de pr?diction. Les r?sultats sont arrang?s dans l?ordre descendant de probabilit? de pourcentage.
– valeur retourn?e prediction_probabilities (une liste python) :
La seconde valeur renvoy?e par la fonction predictImage est une liste qui contient les pourcentages de probabilit? correspondant ? toutes les pr?dictions possibles dans prediction_results
.predictMultipleImages() , Cette fonction pour accomplir la pr?dictions sur 2 ou plusieurs images ? la fois. Trouvez un exemple de code, et param?tres de fonction ci-dessous?:
results_array = multiple_prediction.predictMultipleImages(all_images_array, result_count_per_image=5) for each_result in results_array: predictions, percentage_probabilities = each_result["predictions"], each_result["percentage_probabilities"] for index in range(len(predictions)): print(predictions[index] , " : " , percentage_probabilities[index]) print("-----------------------")
– param?tre sent_images_array (requis) : Il fait r?f?rence a une liste qui contient le chemin vers les fichiers images, les tableaux Numpy de vos images ou les fichiers de flux de vos images, d?pendamment de type sp?cifie pour la valeur d?entr?e.
– param?tre result_count_per_image (optionnel) : Il fait r?f?rence au nombre de possible de pr?dictions renvoy?es pour chaque image. Ce param?tre a pour valeur par d?faut 2.
– param?tre input_type (optionnel) : Il fait r?f?rence au format dans lequel vos images sont repr?sent?es dans la liste contenu dans le param?tre sent_images_array. Il est par d?faut ?file? et accepte aussi ?array? et ?stream?.
– valeur retourn?e output_array (une liste python) : La valeur retourn?e par la fonction predictMultipleImages est une liste qui contient des dictionnaires. Chaque dictionnaire correspond ? une image contenue dans le tableau transmis a sent_images_array. Chaque dictionnaire a une propri?t? “prediction_results” qui est la liste de tous les r?sultats de pr?dictions sur l?image a cet indice ainsi que la ?prediction_probabilities? qui est la liste correspondant au pourcentage de probabilit? de chaque r?sultat.
Exemple de code
Trouver ci-dessous un ?chantillon de code pour la pr?diction sur une image?:
from imageai.Prediction import ImagePrediction
import os
execution_path = os.getcwd()
prediction = ImagePrediction()
prediction.setModelTypeAsResNet()
prediction.setModelPath(os.path.join(execution_path, "resnet50_weights_tf_dim_ordering_tf_kernels.h5"))
prediction.loadModel()
predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "image1.jpg"), result_count=10)
for eachPrediction, eachProbability in zip(predictions, probabilities):
print(eachPrediction , " : " , eachProbability)
Trouvez ci-dessous un ?chantillon de code pour la d?tection/pr?diction sur plusieurs images?:
from imageai.Prediction import ImagePrediction
import os
execution_path = os.getcwd()
multiple_prediction = ImagePrediction()
multiple_prediction.setModelTypeAsResNet()
multiple_prediction.setModelPath(os.path.join(execution_path, "resnet50_weights_tf_dim_ordering_tf_kernels.h5"))
multiple_prediction.loadModel()
all_images_array = []
all_files = os.listdir(execution_path)
for each_file in all_files:
if(each_file.endswith(".jpg") or each_file.endswith(".png")):
all_images_array.append(each_file)
results_array = multiple_prediction.predictMultipleImages(all_images_array, result_count_per_image=5)
for each_result in results_array:
predictions, percentage_probabilities = each_result["predictions"], each_result["percentage_probabilities"]
for index in range(len(predictions)):
print(predictions[index] , " : " , percentage_probabilities[index])
print("-----------------------")
Les Classes de detection¶
ImageAI fournit un ensemble de classes et fonctions puissantes et faciles ? utiliser pour la D?tection et Extraction d?objets dans une image. ImageAI vous permet d?utiliser les algorithmes de pointe en apprentissage profond tel que RetinaNet, YOLOv3 et TinyYOLOv3. Avec ImageAI vous pouvez accomplir des taches de d?tection et d?analyse d?images. Trouvez ci-dessous les classes et leurs fonctions respectives mise ? votre disposition pour votre utilisation. Ces classes peuvent ?tre int?gr?es dans tout programme Python traditionnel que vous d?veloppez ; que ce soit un site internet, une application Windows/Linux/MacOS ou un syst?me qui supporte ou fait partir d?un r?seau local.
======= imageai.Detection.ObjectDetection =======
Cette classe ObjectDetection vous fournit les fonctions pour accomplir la d?tection d?objets sur une image ou un ensemble d?images, utilisant les mod?les pr?-entraines sur la base de donn?es COCO. Les mod?les support?s sont RetinaNet, YOLOv3 et TinyYOLOv3. Ceci veut dire que vous pouvez d?tecter et reconnaitre 80 diff?rents types communs d?objets de tous les jours. Pour commencer, t?l?charger n?importe quel mod?le que vous voulez utiliser via les liens ci-dessous?:
T?l?charger le mod?le RetinaNet - resnet50_coco_best_v2.0.1.h5
T?l?charger le mod?le YOLOv3 - yolo.h5
T?l?charger le mod?le TinyYOLOv3 - yolo-tiny.h5
Une fois que vous avez t?l?charger le mod?le de votre choix, vous devez cr?er une instance de la classe ObjectDetection comme dans l?exemple ci-dessous?:
from imageai.Detection import ObjectDetection
detector = ObjectDetection()
Une fois que vois vous avez cr?? une instance de la classe, vous pouvez utiliser les fonctions ci-dessous pour choisir convenablement les propri?t?s d?instance et de commencer la d?tection d?objets sur les images.
.setModelTypeAsRetinaNet() , cette fonction ?tablit comme type de mod?le pour l?instance de d?tection d?objets que vous avez cr?? le mod?le RetinaNet, ceci veut dire que vous accomplirez la tache de d?tection d?objets ? l?aide de mod?le pr?-entrain? de RetinaNet que vous avez t?l?charg? par les liens ci-dessus. Trouvez un exemple de code ci-dessous?:
detector.setModelTypeAsRetinaNet()
.setModelTypeAsYOLOv3() , cette fonction ?tablit comme type de mod?le pour l?instance de d?tection d?objets que vous avez cr?? le mod?le YOLOv3, ceci veut dire que vous accomplirez la tache de d?tection d?objets ? l?aide de mod?le pr?-entrain? de YOLOv3 que vous avez t?l?charg? par les liens ci-dessus. Trouvez un exemple de code ci-dessous?:
detector.setModelTypeAsYOLOv3()
.setModelTypeAsTinyYOLOv3() , cette fonction ?tablit comme type de mod?le pour l?instance de d?tection d?objets que vous avez cr?? le mod?le TinyYOLOv3, ceci veut dire que vous accomplirez la tache de d?tection d?objets ? l?aide de mod?le pr?-entrain? de TinyYOLOv3 que vous avez t?l?charg? par les liens ci-dessus. Trouvez un exemple de code ci-dessous?:
detector.setModelTypeAsTinyYOLOv3()
.setModelPath() , Cette fonction prend en argument une chaine de caract?res qui doit ?tre le chemin vers le fichier mod?le que vous avez t?l?charg? et doit correspondre au type de mod?le choisi pour votre instance de d?tection d?objets. Trouvez un exemple de code et de param?tres de fonction ci-dessous :
detector.setModelPath(“yolo.h5”)
– param?tre model_path (requis) : c?est le chemin vers votre mod?le t?l?charg?.
.loadModel() , Cette fonction charge le mod?le ? partir du chemin que vous avez sp?cifi? dans l?appel de fonction ci-dessus de votre instance de d?tection d?objets. Trouver un exemple de code ci-dessous?:
detector.loadModel()
– param?tre detection_speed (optionnel) : Ce param?tre vous permet de r?duire jusquՈ 80% le temps qu?il faut pour d?tecter les objets sur une image ce qui conduit ? une l?g?re r?duction de la pr?cision. Ce param?tre accepte des valeurs de type chaines de caract?res. Les valeurs disponibles sont normal, fast, faster, fastest et flash. La valeur par d?faut est normal
.detectObjectsFromImage() ,C?est la fonction qui accomplit la d?tection d?objets apr?s que le mod?le ait ?t? charg?. Elle peut ?tre appel?e plusieurs fois pour d?tecter les objets dans plusieurs images. Trouvez un exemple de code ci-dessous?:
detections = detector.detectObjectsFromImage(input_image="image.jpg", output_image_path="imagenew.jpg", minimum_percentage_probability=30)
– param?tre input_image (requis) : Il fait r?f?rence au chemin vers le fichier image sur lequel vous voulez faire la d?tection. Ce param?tre peut ?tre le tableau Numpy ou le fichier flux de l?image si vous donner la valeur “array” ou “stream” au param?tre input_type.
—param?tre output_image_path (requis seulement si input_type = “file” ) : Il fait r?f?rence au chemin vers le lieu de sauvegarde de l?image d?tect?e ou d?tection. Il n?est requis que si input_type = “file”.
– param?tre minimum_percentage_probability (optionnel) : Ce param?tre est utilis? pour d?terminer l?int?grit? des r?sultats de d?tections. R?duire cette valeur permettra de d?tecter plus d?objets alors que l?augmenter permet d?avoir des objets d?tect?s avec la plus grande pr?cision. La valeur par d?faut est 50.
—param?tre output_type (optionnel) : ce param?tre permet de d?finir le format dans lequel l?image de d?tections sera produit. Les valeurs disponibles sont ?file?(fichier) et ?array?(tableau). La valeur par d?faut est ?file?. Si ce param?tre est d?finit comme ?array?, la fonction va renvoyer un tableau Numpy pour l?image de d?tection. Retrouvez un exemple ci-dessous?::
returned_image, detections = detector.detectObjectsFromImage(input_image=”image.jpg”, output_type=”array”, minimum_percentage_probability=30)—param?tre display_percentage_probability (optionnel) : Ce param?tre peut ?tre utilis? pour cacher le pourcentage de probabilit? de chaque objet d?tect? dans l?image de d?tect?e si sa valeur est d?finie ? ?False?. La valeur par d?faut est ?True?.
– param?tre display_object_name (optionnel) : Ce param?tre peut ?tre utilis? pour cacher le nom de chaque objet d?tect? dans l?image de d?tection si sa valeur est d?finie comme ?False?. La valeur par d?faut est ?True?.
—param?tre extract_detected_objects (optionnel) : ce param?tre peut ?tre utilis? pour extraire et sauvegarder/ retourner chaque objet d?tect? dans une image dans une image s?par?e. Sa valeur par d?faut est ?False?.
– valeurs renvoy?es : Les valeurs renvoy?es vont d?pendre des param?tres envoy?s dans la fonction detectObjectsFromImage(). Retrouvez les commentaires et le code ci-dessous?:
“”“
Si tous les param?tres n?cessaires sont d?finis et ‘output_image_path’ est d?fini vers le chemin o? le fichier de d?tection sera sauvegard?, la fonction va renvoyer?: 1. un tableau de dictionnaires, avec chaque dictionnaire correspondant aux objets d?tect?s dans l?image. Chaque dictionnaire a les propri?t?s suivantes?:
- *Nom (chaine de caract?res – string)
- percentage_probability (float)
- box_points (tuple de coordonn?es x1,y1,x2 et y2)
“”“
detections = detector.detectObjectsFromImage(input_image=”image.jpg”, output_image_path=”imagenew.jpg”, minimum_percentage_probability=30)
“”“
Si tous les param?tres requis sont d?finis et output_type = ‘array’, la fonction va renvoyer 1. Un tableau Numpy de l?image de d?tection. 2. Un tableau de dictionnaires, avec chaque dictionnaire correspondant aux objets d?tect?s dans l?image. Chaque dictionnaire contient les propri?t?s suivantes?: * Nom (string ? chaine de caract?res) * percentage_probability (float) * box_points (tuple de coordonn?es x1,y1,x2 et y2)
“”” returned_image, detections = detector.detectObjectsFromImage(input_image=”image.jpg”, output_type=”array”, minimum_percentage_probability=30)
“”“
Si extract_detected_objects = True et ‘output_image_path’ est d?fini par le chemin vers le lieu de sauvegarde de l?image de d?tection, la fonction renvoie?:
1. Un tableau de dictionnaires, chaque dictionnaire correspond aux objets d?tect?s dans l?image. Chaque dictionnaire contient les propri?t?s suivantes?: * Nom (string) * percentage_probability (float) * box_points (tuple de coordonn?es x1,y1,x2 et y2) 2. Un tableau de chaine de caract?res repr?sentant les chemins des images de chaque objet extrait de l?image de d?part.
“”” detections, extracted_objects = detector.detectObjectsFromImage(input_image=”image.jpg”, output_image_path=”imagenew.jpg”, extract_detected_objects=True, minimum_percentage_probability=30)
- “”“
- Si extract_detected_objects = True et output_type = ‘array’, la fonction va renvoyer?:
- Un tableau Numpy de l?image de d?tection.
2. Un tableau de dictionnaires, avec chaque dictionnaire correspondant aux objets d?tect?s dans l?image. Chaque dictionnaire contient les propri?t?s suivantes?: * nom(string) * percentage_probability (float) * box_points (tuple de coordonn?es x1,y1,x2 et y2)
3. Un tableau de tableaux Numpy de chaque objet d?tect? dans l?image “”” returned_image, detections, extracted_objects = detector.detectObjectsFromImage(input_image=”image.jpg”, output_type=”array”, extract_detected_objects=True, minimum_percentage_probability=30)
.CustomObjects() ,C?est la fonction que vous utiliserez lorsque vous ne voulez faire la d?tection que d?un nombre limit? d?objets. Elle renvoie un dictionnaire d?objets et leur valeur ?True? ou ?False?. Pour d?tecter les objets s?lectionn?s dans une image, vous devrez utiliser les dictionnaires renvoy?s par cette fonction avec la fonction ** detectCustomObjectsFromImage()** . Retrouvez les d?tails dans les commentaires et le code ci-dessous?:
"""
Il y?a 80 possible objets que vous pouvez d?tecter avec la classe ObjectDetection, vous pouvez les voir ci-dessous.
Person(personne), bicycle(v?lo), car(voiture), motorcycle(moto), airplane(avion), Bus(bus), train(train), truck(camion), boat(bateau), traffic light(feu de signalisation), fire hydrant (bouche d?incendie), stop_sign (panneau stop), parking meter (parc m?tre), bench (banc), bird (oiseau), cat (chat), dog (chien), horse (cheval), sheep (brebis), cow (vache), elephant (elephant), bear (ours), zebra (zebre), giraffe (girafe), backpack (sac ? dos), umbrella (parapluie), handbag (sac ? main), tie (cravate), suitcase (valise), frisbee (frisbee), skis (skis), snowboard (snowboard), sports ball(balle de sport), kite (cerf - volant), baseball bat (batte de baseball), baseball glove (gang de baseball), skateboard (skateboard), surfboard (planche de surf), tennis racket (raquette de tennis), bottle (bouteille), wine glass (verre de vin), cup (gobelet), fork (fourchette), knife (couteau), spoon (cuill?re), bowl (bolle), banana (banane), apple (pomme), sandwich (sandwich), orange (orange), broccoli (brocoli), carrot (carotte), hot dog (hot dog), pizza (pizza), donut (beignet), cake(g?teau), chair (chaise), couch(canape), potted plant(plante a pot), bed(lit), dining table(table de diner), toilet(toilette), tv(t?l?vision), laptop(ordinateur), mouse(souris), remote(t?l?commande), keyboard(clavier), cell phone(t?l?phone portable), microwave(micro-onde), oven (four), toaster(grille pain), sink(?vier), refrigerator (r?frig?rateur), book (cahier), clock (horloge), vase(vase) , scissors(ciseaux), teddy bear(ours en peluche), hair dryer(s?che cheveux), toothbrush(brosse ? dent).
Pour d?tecter uniquement certains des objets ci-dessus, vous devrez instancier la fonction CustomObjects et d?finir le ou les noms des objets que vous voulez d?tecter. Le reste sera d?fini ? ?False? par d?faut. Dans l?exemple ci-dessous, nous d?tectons uniquement ?person?(personne) et ?dog?(chien).
“”” custom = detector.CustomObjects(person=True, dog=True)
.detectCustomObjectsFromImage(), Cette fonction a tous les param?tres et renvoie toutes les valeurs de la fonction ** detectObjectsFromImage()**, avec une petite diff?rence. Cette fonction ne fait la d?tection sur une image que d?objets s?lectionn?s. Contrairement ? la fonction ** detectObjectsFromImage()**, elle a besoin d?un param?tre suppl?mentaire qui est custom_objet qui lui r?cup?re le dictionnaire renvoy? par la fonction ** CustomObjects()**. Dans l?exemple ci-dessous, nous avons d?fini la fonction de d?tection pour qu?elle ne reconnaisse que?les personnes et les chiens?:
custom = detector.CustomObjects(person=True, dog=True) detections = detector.detectCustomObjectsFromImage( custom_objects=custom, input_image=os.path.join(execution_path , "image3.jpg"), output_image_path=os.path.join(execution_path , "image3new-custom.jpg"), minimum_percentage_probability=30)
** Exemple de code pour la d?tection d?objets sur Image **
Trouvez ci-dessous un exemple de code pour d?tecter les objets sur une image?:
from imageai.Detection import ObjectDetection
import os
execution_path = os.getcwd()
detector = ObjectDetection()
detector.setModelTypeAsYOLOv3()
detector.setModelPath( os.path.join(execution_path , "yolo.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"), minimum_percentage_probability=30)
for eachObject in detections:
print(eachObject["name"] , " : ", eachObject["percentage_probability"], " : ", eachObject["box_points"] )
print("--------------------------------")
- a.. ImageAI documentation master file, created by
- sphinx-quickstart on Tue Jun 12 06:13:09 2018. You can adapt this file completely to your liking, but it should at least contain the root toctree directive.
Analyse et d?tection sur Vid?o et flux vid?o temp r?el Vid?o¶
ImageAI fournit un ensemble de classes et de fonctions puissantes et facile ? utiliser pour faire de la D?tection et du tracking d?objets dans une Vid?o et L?**analyse vid?o**. ImageAI vous permet d?utiliser ou d?employer tous les algorithmes de pointes d?apprentissage profond tel que RetinaNet, YOLOv3 et TinyYOLOv3. Avec ImageAI vous pouvez effectuer des taches de d?tection et analyser des vid?os et des flux vid?o temps r?el ? partir des cameras IP et de celle de vos appareils. Trouvez ci-dessous les diff?rentes classes et les fonctions respectives mise ? votre disposition pour votre utilisation. Ces classes peuvent ?tre int?gr? ? tout programme python traditionnel que vous d?veloppez, que cela soit un site internet, une application Windows/Linux/MacOS ou un syst?me qui supporte ou fait partie d?un r?seau local.
======= imageai.Detection.VideoObjectDetection =======
La classe VideoObjectDetection vous fournit des fonctions pour d?tecter les objets dans une vid?o ou un flux vid?o provenant d?une cam?ra ou d?une cam?ra IP en utilisant les mod?les pr?-entrain? ? partir de la base de donn?es COCO. Les mod?les supportes sont RetinaNet, YOLOv3 et TinyYOLOv3. Ceci veut dire que vous pouvez d?tecter et reconnaitre 80 diff?rents types d?objets de la vie de tous les jours dans les vid?os. Pour commencer, t?l?charger un des mod?les pr?-entrain? que vous voulez utiliser via les liens ci-dessous.
T?l?charger le mod?le RetinaNet - resnet50_coco_best_v2.0.1.h5
` T?l?charger le mod?le YOLOv3 - yolo.h5 <https://github.com/OlafenwaMoses/ImageAI/releases/tag/1.0 />`_
` T?l?charger le mod?le TinyYOLOv3 - yolo-tiny.h5 <https://github.com/OlafenwaMoses/ImageAI/releases/tag/1.0 />`_
Une fois que vous avez t?l?charg? le mod?le que vous choisissez d?utiliser, cr?ez une instance de VideoObjectDetection comme vous pouvez le voir ci-dessous?:
from imageai.Detection import VideoObjectDetection
detector = VideoObjectDetection()
Une fois que vous avez cr?? une instance de la classe, vous pouvez appeler les fonctions ci-dessous pour param?trer ses propri?t?s et d?tecter les objets dans une vid?o.
- .setModelTypeAsRetinaNet() , cette fonction ?tablit comme type de mod?le pour l?instance de d?tection d?objets que vous avez cr?? le mod?le
RetinaNet, ce qui veut dire que vous accomplirez votre t?che de d?tection d?objets en utilisant le mod?le pr?-entrain? RetinaNet que vous avez pr?c?demment t?l?charg? par le lien ci-dessus. Trouvez ci-dessous un exemple de code?:
detector.setModelTypeAsRetinaNet()
- .setModelTypeAsYOLOv3() , cette fonction ?tablit comme type de mod?le pour l?instance de d?tection d?objets que vous avez cr?? le mod?le
YOLOv3, ce qui veut dire que vous accomplirez votre t?che de d?tection d?objets en utilisant le mod?le pr?-entrain? YOLOv3 que vous avez pr?c?demment t?l?charg? par le lien ci-dessus. Trouvez ci-dessous un exemple de code?:
detector.setModelTypeAsYOLOv3()
- .setModelTypeAsTinyYOLOv3() , cette fonction ?tablit comme type de mod?le pour l?instance de d?tection d?objets que vous avez cr?? le mod?le
TinyYOLOv3, ce qui veut dire que vous accomplirez votre t?che de d?tection d?objets en utilisant le mod?le pr?-entrain? TinyYOLOv3 que vous avez pr?c?demment t?l?charg? par le lien ci-dessus. Trouvez ci-dessous un exemple de code?:
detector.setModelTypeAsTinyYOLOv3()
.setModelPath() , cette fonction accepte une chaine de caract?re qui doit ?tre le chemin vers le fichier mod?le que vous avez t?l?charg? et doit correspondre au type de mod?le choisi pour votre instance de d?tection d?objets. Trouver un exemple de code et de param?tres de la fonction ci-dessous?:
detector.setModelPath("yolo.h5")
– param?tre model_path (requis) : C?est le chemin vers le fichier mod?le t?l?charg?.
.loadModel() , Cette fonction charge le mod?le ? partir du chemin que vous avez sp?cifi? dans l?appel ci-dessus de fonction de votre instance de d?tection d?objets. Trouver un exemple de code ci-dessous?:
detector.loadModel()
– param?tre detection_speed (optionnel) : Ce param?tre vous permet de r?duire de 80% le temps qu?il faut pour d?tecter les objets sur une vid?o, ce qui conduira ? une l?g?re baisse de la pr?cision. Ce param?tre accepte des valeurs de type chaine de caract?res. Les valeurs disponibles sont “normal”, “fast”, “faster”, “fastest” et “flash”. La valeur par d?faut est??normal?.
.detectObjectsFromVideo() , Il s?agit de la fonction qui accomplit la d?tection d?objets sur un fichier vid?o ou un flux vid?o direct apr?s que le mod?le ait ?t? charg? dans l?instance que vous avez cr??. Retrouvez ci-apr?s un exemple de code complet?:
from imageai.Detection import VideoObjectDetection import os execution_path = os.getcwd() detector = VideoObjectDetection() detector.setModelTypeAsYOLOv3() detector.setModelPath( os.path.join(execution_path , "yolo.h5")) detector.loadModel() video_path = detector.detectObjectsFromVideo(input_file_path=os.path.join(execution_path, "traffic.mp4"), output_file_path=os.path.join(execution_path, "traffic_detected") , frames_per_second=20, log_progress=True) print(video_path)
– parametre input_file_path (requis si vous ne tenez pas compte de camera_input) : Il fait r?f?rence au chemin vers le fichier vid?o sur lequel vous voulez faire la d?tection.
—param?tre output_file_path (requis si save_detected_video n?a pas la valeur False) : Il fait r?f?rence vers l?emplacement de l?enregistrement du fichier vid?o d?tect?. Par d?faut, cette fonction enregistre les vid?os dans le format .avi.
– param?tre frames_per_second (optionnel, mais recommand?) :
Ce param?tre vous permet de d?finir le nombre de frames par seconde pour la vid?o d?tect?e qui sera enregistr?e. Sa valeur par d?faut est 20 mais nous recommandons que vous d?finissiez la valeur qui sied pour votre vid?o ou vid?o-direct.
– param?tre log_progress (optionnel) : D?finir ce param?tre a ?True? affiche le progr?s de la vid?o ou flux direct pendant qu?il est d?tecter dans la console. Il fera un rapport sur chaque frame d?tect? pendant qu?il progresse. La valeur par d?faut est ?False?
—param?tre return_detected_frame (optionnel) :
Ce param?tre vous permet de retourner le frame d?tect? comme tableau Numpy pour chaque frame, seconde et minute de la vid?o d?tect?e. Le tableau Numpy retourn? sera envoy? respectivement a per_frame_function, per_second_function et per_minute_function (d?tails ci-dessous)
– param?tre camera_input (optionnel) : Ce param?tre peut ?tre assigne en remplacement de input_file_path si vous voulez d?tecter des objets dans le flux vid?o de la cam?ra. Vous devez instancier la fonction VideoCapture() d? OpenCV et de charger l?objet dans ce param?tre.
Ci-dessous un exemple complet de code?:
from imageai.Detection import VideoObjectDetection import os import cv2 execution_path = os.getcwd() camera = cv2.VideoCapture(0) detector = VideoObjectDetection() detector.setModelTypeAsYOLOv3() detector.setModelPath(os.path.join(execution_path , "yolo.h5")) detector.loadModel() video_path = detector.detectObjectsFromVideo(camera_input=camera, output_file_path=os.path.join(execution_path, "camera_detected_video") , frames_per_second=20, log_progress=True, minimum_percentage_probability=30) print(video_path)—param?tre minimum_percentage_probability (optionnel) : Ce param?tre est utilis? pour d?terminer l?int?grit? des r?sultats de d?tection. Diminuer la valeur permet d?afficher plus d?objets alors que l?accroitre permet de s?assurer que les objets d?tect?s ont la pr?cision la plus ?lev?e. La valeur par d?faut est 50.
– param?tre display_percentage_probability (optionnel) : Ce param?tre peut ?tre utilis? pour cacher le pourcentage de probabilit? pour chaque objet d?tect? dans la vid?o d?tect? si sa valeur est ?False?. La valeur par d?faut est ?True?.
—param?tre display_object_name (optionnel) : Ce param?tre peut ?tre utilise pour cacher le nom de chaque objet d?tecte dans la vid?o s?il est d?fini ? False. La valeur par d?faut est True.
– param?tre save_detected_video (optionnel) : Ce param?tre peut ?tre utilis? pour sauvegarder ou non la vid?o de d?tection. Sa valeur par d?faut est True.
—param?tre per_frame_function (optionnel) : Ce param?tre pour permet de transmettre le nom d?une fonction que vous d?finissez. Puis, pour chaque frame de la vid?o qui est d?tect?e, la fonction sera d?finie dans le param?tre qui sera ex?cut? et la donn?e analytique de la vid?o sera transmise ? la fonction. Les donn?es renvoy?es peuvent ?tre visualis?es ou enregistr?es dans une base de donn?es NoSQL pour une utilisation et visualisation ult?rieure.
Ci-dessous un exemple complet de code?:
"""
Ce param?tre vous permet de d?finir dans une fonction ou vous voulez faire une ex?cution chaque fois qu?une image de vid?o est d?tect?e. Si ce param?tre est d?fini par une fonction, apr?s qu?une image de la vid?o soit d?tect?e, la fonction sera ex?cut?e avec les valeurs suivantes en entr?e?: * Num?ro de position de la frame de la vid?o. * Un tableau de dictionnaires, avec chaque dictionnaire correspondant ? chaque objet d?tect?. Chaque dictionnaire contient?: ‘name’, ‘percentage_probability’ et ‘box_points’ * Un dictionnaire avec pour clefs le nom de chaque unique objet et le nombre d?instance de chaque objet pr?sent. * Si return_detected_frame est d?fini a ?True?, le tableau Numpy de la frame d?tect?e sera transmis comme quatri?me valeur dans la fonction.
“”“from imageai.Detection import VideoObjectDetection import os
def forFrame(frame_number, output_array, output_count): print(“FOR FRAME ” , frame_number) print(“Output for each object : “, output_array) print(“Output count for unique objects : “, output_count) print(“————END OF A FRAME ————–”)
video_detector = VideoObjectDetection() video_detector.setModelTypeAsYOLOv3() video_detector.setModelPath(os.path.join(execution_path, “yolo.h5”)) video_detector.loadModel()
video_detector.detectObjectsFromVideo(input_file_path=os.path.join(execution_path, “traffic.mp4”), output_file_path=os.path.join(execution_path, “video_frame_analysis”) , frames_per_second=20, per_frame_function=forFrame, minimum_percentage_probability=30)
Dans l?exemple ci-dessus, chaque image ou frame de la vid?o est trait?e et d?tect?e, la fonction va recevoir et renvoyer les donn?es analytiques pour chaque objet d?tect? dans la frame de la vid?o comme vous pouvez le voir ci-dessous?:
Output for each object : [{'box_points': (362, 295, 443, 355), 'name': 'boat', 'percentage_probability': 26.666194200515747}, {'box_points': (319, 245, 386, 296), 'name': 'boat', 'percentage_probability': 30.052968859672546}, {'box_points': (219, 308, 341, 358), 'name': 'boat', 'percentage_probability': 47.46982455253601}, {'box_points': (589, 198, 621, 241), 'name': 'bus', 'percentage_probability': 24.62330162525177}, {'box_points': (519, 181, 583, 263), 'name': 'bus', 'percentage_probability': 27.446213364601135}, {'box_points': (493, 197, 561, 272), 'name': 'bus', 'percentage_probability': 59.81815457344055}, {'box_points': (432, 187, 491, 240), 'name': 'bus', 'percentage_probability': 64.42965269088745}, {'box_points': (157, 225, 220, 255), 'name': 'car', 'percentage_probability': 21.150341629981995}, {'box_points': (324, 249, 377, 293), 'name': 'car', 'percentage_probability': 24.089913070201874}, {'box_points': (152, 275, 260, 327), 'name': 'car', 'percentage_probability': 30.341443419456482}, {'box_points': (433, 198, 485, 244), 'name': 'car', 'percentage_probability': 37.205660343170166}, {'box_points': (184, 226, 233, 260), 'name': 'car', 'percentage_probability': 38.52525353431702}, {'box_points': (3, 296, 134, 359), 'name': 'car', 'percentage_probability': 47.80363142490387}, {'box_points': (357, 302, 439, 359), 'name': 'car', 'percentage_probability': 47.94844686985016}, {'box_points': (481, 266, 546, 314), 'name': 'car', 'percentage_probability': 65.8585786819458}, {'box_points': (597, 269, 624, 318), 'name': 'person', 'percentage_probability': 27.125394344329834}]
Output count for unique objects : {'bus': 4, 'boat': 3, 'person': 1, 'car': 8}
------------END OF A FRAME --------------
Ci-dessous est le code complet qui a une fonction qui r?cup?re les donn?es analytiques et les visualise?; ainsi que la frame d?tect?e en temps r?el pendant que la vid?o est trait?e et analys?e?:
from imageai.Detection import VideoObjectDetection
import os
from matplotlib import pyplot as plt
execution_path = os.getcwd()
color_index = {'bus': 'red', 'handbag': 'steelblue', 'giraffe': 'orange', 'spoon': 'gray', 'cup': 'yellow', 'chair': 'green', 'elephant': 'pink', 'truck': 'indigo', 'motorcycle': 'azure', 'refrigerator': 'gold', 'keyboard': 'violet', 'cow': 'magenta', 'mouse': 'crimson', 'sports ball': 'raspberry', 'horse': 'maroon', 'cat': 'orchid', 'boat': 'slateblue', 'hot dog': 'navy', 'apple': 'cobalt', 'parking meter': 'aliceblue', 'sandwich': 'skyblue', 'skis': 'deepskyblue', 'microwave': 'peacock', 'knife': 'cadetblue', 'baseball bat': 'cyan', 'oven': 'lightcyan', 'carrot': 'coldgrey', 'scissors': 'seagreen', 'sheep': 'deepgreen', 'toothbrush': 'cobaltgreen', 'fire hydrant': 'limegreen', 'remote': 'forestgreen', 'bicycle': 'olivedrab', 'toilet': 'ivory', 'tv': 'khaki', 'skateboard': 'palegoldenrod', 'train': 'cornsilk', 'zebra': 'wheat', 'tie': 'burlywood', 'orange': 'melon', 'bird': 'bisque', 'dining table': 'chocolate', 'hair drier': 'sandybrown', 'cell phone': 'sienna', 'sink': 'coral', 'bench': 'salmon', 'bottle': 'brown', 'car': 'silver', 'bowl': 'maroon', 'tennis racket': 'palevilotered', 'airplane': 'lavenderblush', 'pizza': 'hotpink', 'umbrella': 'deeppink', 'bear': 'plum', 'fork': 'purple', 'laptop': 'indigo', 'vase': 'mediumpurple', 'baseball glove': 'slateblue', 'traffic light': 'mediumblue', 'bed': 'navy', 'broccoli': 'royalblue', 'backpack': 'slategray', 'snowboard': 'skyblue', 'kite': 'cadetblue', 'teddy bear': 'peacock', 'clock': 'lightcyan', 'wine glass': 'teal', 'frisbee': 'aquamarine', 'donut': 'mincream', 'suitcase': 'seagreen', 'dog': 'springgreen', 'banana': 'emeraldgreen', 'person': 'honeydew', 'surfboard': 'palegreen', 'cake': 'sapgreen', 'book': 'lawngreen', 'potted plant': 'greenyellow', 'toaster': 'ivory', 'stop sign': 'beige', 'couch': 'khaki'}
resized = False
def forFrame(frame_number, output_array, output_count, returned_frame):
plt.clf()
this_colors = []
labels = []
sizes = []
counter = 0
for eachItem in output_count:
counter += 1
labels.append(eachItem + " = " + str(output_count[eachItem]))
sizes.append(output_count[eachItem])
this_colors.append(color_index[eachItem])
global resized
if (resized == False):
manager = plt.get_current_fig_manager()
manager.resize(width=1000, height=500)
resized = True
plt.subplot(1, 2, 1)
plt.title("Frame : " + str(frame_number))
plt.axis("off")
plt.imshow(returned_frame, interpolation="none")
plt.subplot(1, 2, 2)
plt.title("Analysis: " + str(frame_number))
plt.pie(sizes, labels=labels, colors=this_colors, shadow=True, startangle=140, autopct="%1.1f%%")
plt.pause(0.01)
video_detector = VideoObjectDetection()
video_detector.setModelTypeAsYOLOv3()
video_detector.setModelPath(os.path.join(execution_path, "yolo.h5"))
video_detector.loadModel()
plt.show()
video_detector.detectObjectsFromVideo(input_file_path=os.path.join(execution_path, "traffic.mp4"), output_file_path=os.path.join(execution_path, "video_frame_analysis") , frames_per_second=20, per_frame_function=forFrame, minimum_percentage_probability=30, return_detected_frame=True)
-- *param?tre* **per_second_function** (optionnel) : Ce param?tre vous permet de transmettre le nom d?une fonction que vous d?finissez. Puis, pour chaque seconde de la vid?o qui est d?tect?e, la fonction sera transmise dans le param?tre sera ex?cut?e et les donn?es analytiques de la vid?o seront envoy?es dans la fonction. Les donn?es renvoy?es peuvent ?tre visualis?es ou sauvegard?es dans une base de donn?es NoSQL pour une utilisation et visualisation future.
Ci-dessous un exemple complet de code?::
"""
Ce param?tre vous permet de transmettre dans une fonction o? vous voulez faire une ex?cuter apr?s que chaque seconde de la vid?o soit d?tect?e. Si le param?tre est d?fini comme une fonction, seconde apr?s que le vid?o soit d?tect?, la fonction sera ex?cut?e avec les valeurs suivantes en argument?:
-- num?ro de position du second
-- un tableau de dictionnaire dont les clefs sont les num?ros de position de chaque frame pr?sente ? la derni?re seconde, et la valeur de chaque clef est le tableau de chaque frame qui contient les dictionnaires de chaque objet d?tect? dans la frame.
-- Un tableau de dictionnaires, avec chaque dictionnaire ? chaque frame de la seconde pr?c?dente, et les cl?s pour chaque dictionnaire sont les noms de num?ros d?objets uniques d?tect?s dans chaque frame, et les cl?s sont le nombre d?instances des objets trouv?s dans le frame.
-- Un dictionnaire avec pour cl? le nom de chaque unique objet d?tect? dans toutes les secondes pass?es, at les valeurs cl?s sont les moyennes d?instance d?objets trouv?s dans toutes les frames contenus dans les secondes pass?es.
-- Si return_detected_frame est d?fini aa ?True?, le tableau Numpy du frame de d?tection sera envoy? comme cinqui?me param?tre dans la fonction.
"""
from imageai.Detection import VideoObjectDetection
import os
def forSeconds(second_number, output_arrays, count_arrays, average_output_count):
print("SECOND : ", second_number)
print("Array for the outputs of each frame ", output_arrays)
print("Array for output count for unique objects in each frame : ", count_arrays)
print("Output average count for unique objects in the last second: ", average_output_count)
print("------------END OF A SECOND --------------")
video_detector = VideoObjectDetection()
video_detector.setModelTypeAsYOLOv3()
video_detector.setModelPath(os.path.join(execution_path, "yolo.h5"))
video_detector.loadModel()
video_detector.detectObjectsFromVideo(input_file_path=os.path.join(execution_path, "traffic.mp4"), output_file_path=os.path.join(execution_path, "video_second_analysis") , frames_per_second=20, per_second_function=forSecond, minimum_percentage_probability=30)
Dans l?exemple ci-dessus, chaque seconde dans la vid?o est trait?e et d?tect?e, la fonction va recevoir et renvoyer les donn?es analytiques des objets d?tect?s dans la vid?o comme vous pouvez le voir ci-dessous?:
Array for the outputs of each frame [[{'box_points': (362, 295, 443, 355), 'name': 'boat', 'percentage_probability': 26.666194200515747}, {'box_points': (319, 245, 386, 296), 'name': 'boat', 'percentage_probability': 30.052968859672546}, {'box_points': (219, 308, 341, 358), 'name': 'boat', 'percentage_probability': 47.46982455253601}, {'box_points': (589, 198, 621, 241), 'name': 'bus', 'percentage_probability': 24.62330162525177}, {'box_points': (519, 181, 583, 263), 'name': 'bus', 'percentage_probability': 27.446213364601135}, {'box_points': (493, 197, 561, 272), 'name': 'bus', 'percentage_probability': 59.81815457344055}, {'box_points': (432, 187, 491, 240), 'name': 'bus', 'percentage_probability': 64.42965269088745}, {'box_points': (157, 225, 220, 255), 'name': 'car', 'percentage_probability': 21.150341629981995}, {'box_points': (324, 249, 377, 293), 'name': 'car', 'percentage_probability': 24.089913070201874}, {'box_points': (152, 275, 260, 327), 'name': 'car', 'percentage_probability': 30.341443419456482}, {'box_points': (433, 198, 485, 244), 'name': 'car', 'percentage_probability': 37.205660343170166}, {'box_points': (184, 226, 233, 260), 'name': 'car', 'percentage_probability': 38.52525353431702}, {'box_points': (3, 296, 134, 359), 'name': 'car', 'percentage_probability': 47.80363142490387}, {'box_points': (357, 302, 439, 359), 'name': 'car', 'percentage_probability': 47.94844686985016}, {'box_points': (481, 266, 546, 314), 'name': 'car', 'percentage_probability': 65.8585786819458}, {'box_points': (597, 269, 624, 318), 'name': 'person', 'percentage_probability': 27.125394344329834}],
[{'box_points': (316, 240, 384, 302), 'name': 'boat', 'percentage_probability': 29.594269394874573}, {'box_points': (361, 295, 441, 354), 'name': 'boat', 'percentage_probability': 36.11513376235962}, {'box_points': (216, 305, 340, 357), 'name': 'boat', 'percentage_probability': 44.89373862743378}, {'box_points': (432, 198, 488, 244), 'name': 'truck', 'percentage_probability': 22.914741933345795}, {'box_points': (589, 199, 623, 240), 'name': 'bus', 'percentage_probability': 20.545457303524017}, {'box_points': (519, 182, 583, 263), 'name': 'bus', 'percentage_probability': 24.467085301876068}, {'box_points': (492, 197, 563, 271), 'name': 'bus', 'percentage_probability': 61.112016439437866}, {'box_points': (433, 188, 490, 241), 'name': 'bus', 'percentage_probability': 65.08989334106445}, {'box_points': (352, 303, 442, 357), 'name': 'car', 'percentage_probability': 20.025095343589783}, {'box_points': (136, 172, 188, 195), 'name': 'car', 'percentage_probability': 21.571354568004608}, {'box_points': (152, 276, 261, 326), 'name': 'car', 'percentage_probability': 33.07966589927673}, {'box_points': (181, 225, 230, 256), 'name': 'car', 'percentage_probability': 35.111838579177856}, {'box_points': (432, 198, 488, 244), 'name': 'car', 'percentage_probability': 36.25282347202301}, {'box_points': (3, 292, 130, 360), 'name': 'car', 'percentage_probability': 67.55480170249939}, {'box_points': (479, 265, 546, 314), 'name': 'car', 'percentage_probability': 71.47912979125977}, {'box_points': (597, 269, 625, 318), 'name': 'person', 'percentage_probability': 25.903674960136414}],................,
[{'box_points': (133, 250, 187, 278), 'name': 'umbrella', 'percentage_probability': 21.518094837665558}, {'box_points': (154, 233, 218, 259), 'name': 'umbrella', 'percentage_probability': 23.687003552913666}, {'box_points': (348, 311, 425, 360), 'name': 'boat', 'percentage_probability': 21.015766263008118}, {'box_points': (11, 164, 137, 225), 'name': 'bus', 'percentage_probability': 32.20453858375549}, {'box_points': (424, 187, 485, 243), 'name': 'bus', 'percentage_probability': 38.043853640556335}, {'box_points': (496, 186, 570, 264), 'name': 'bus', 'percentage_probability': 63.83994221687317}, {'box_points': (588, 197, 622, 240), 'name': 'car', 'percentage_probability': 23.51653128862381}, {'box_points': (58, 268, 111, 303), 'name': 'car', 'percentage_probability': 24.538707733154297}, {'box_points': (2, 246, 72, 301), 'name': 'car', 'percentage_probability': 28.433072566986084}, {'box_points': (472, 273, 539, 323), 'name': 'car', 'percentage_probability': 87.17672824859619}, {'box_points': (597, 270, 626, 317), 'name': 'person', 'percentage_probability': 27.459821105003357}]
]
Array for output count for unique objects in each frame : [{'bus': 4, 'boat': 3, 'person': 1, 'car': 8},
{'truck': 1, 'bus': 4, 'boat': 3, 'person': 1, 'car': 7},
{'bus': 5, 'boat': 2, 'person': 1, 'car': 5},
{'bus': 5, 'boat': 1, 'person': 1, 'car': 9},
{'truck': 1, 'bus': 2, 'car': 6, 'person': 1},
{'truck': 2, 'bus': 4, 'boat': 2, 'person': 1, 'car': 7},
{'truck': 1, 'bus': 3, 'car': 7, 'person': 1, 'umbrella': 1},
{'bus': 4, 'car': 7, 'person': 1, 'umbrella': 2},
{'bus': 3, 'car': 6, 'boat': 1, 'person': 1, 'umbrella': 3},
{'bus': 3, 'car': 4, 'boat': 1, 'person': 1, 'umbrella': 2}]
Output average count for unique objects in the last second: {'truck': 0.5, 'bus': 3.7, 'umbrella': 0.8, 'boat': 1.3, 'person': 1.0, 'car': 6.6}
------------END OF A SECOND --------------
Ci-dessous est le code complet qui a une fonction qui analyse les donn?es analytiques et les visualise, et le frame d?tect? ?la fin de la seconde en temps r?el pendant que la vid?o est trait?e et analys?e :
from imageai.Detection import VideoObjectDetection import os from matplotlib import pyplot as plt
execution_path = os.getcwd()
color_index = {‘bus’: ‘red’, ‘handbag’: ‘steelblue’, ‘giraffe’: ‘orange’, ‘spoon’: ‘gray’, ‘cup’: ‘yellow’, ‘chair’: ‘green’, ‘elephant’: ‘pink’, ‘truck’: ‘indigo’, ‘motorcycle’: ‘azure’, ‘refrigerator’: ‘gold’, ‘keyboard’: ‘violet’, ‘cow’: ‘magenta’, ‘mouse’: ‘crimson’, ‘sports ball’: ‘raspberry’, ‘horse’: ‘maroon’, ‘cat’: ‘orchid’, ‘boat’: ‘slateblue’, ‘hot dog’: ‘navy’, ‘apple’: ‘cobalt’, ‘parking meter’: ‘aliceblue’, ‘sandwich’: ‘skyblue’, ‘skis’: ‘deepskyblue’, ‘microwave’: ‘peacock’, ‘knife’: ‘cadetblue’, ‘baseball bat’: ‘cyan’, ‘oven’: ‘lightcyan’, ‘carrot’: ‘coldgrey’, ‘scissors’: ‘seagreen’, ‘sheep’: ‘deepgreen’, ‘toothbrush’: ‘cobaltgreen’, ‘fire hydrant’: ‘limegreen’, ‘remote’: ‘forestgreen’, ‘bicycle’: ‘olivedrab’, ‘toilet’: ‘ivory’, ‘tv’: ‘khaki’, ‘skateboard’: ‘palegoldenrod’, ‘train’: ‘cornsilk’, ‘zebra’: ‘wheat’, ‘tie’: ‘burlywood’, ‘orange’: ‘melon’, ‘bird’: ‘bisque’, ‘dining table’: ‘chocolate’, ‘hair drier’: ‘sandybrown’, ‘cell phone’: ‘sienna’, ‘sink’: ‘coral’, ‘bench’: ‘salmon’, ‘bottle’: ‘brown’, ‘car’: ‘silver’, ‘bowl’: ‘maroon’, ‘tennis racket’: ‘palevilotered’, ‘airplane’: ‘lavenderblush’, ‘pizza’: ‘hotpink’, ‘umbrella’: ‘deeppink’, ‘bear’: ‘plum’, ‘fork’: ‘purple’, ‘laptop’: ‘indigo’, ‘vase’: ‘mediumpurple’, ‘baseball glove’: ‘slateblue’, ‘traffic light’: ‘mediumblue’, ‘bed’: ‘navy’, ‘broccoli’: ‘royalblue’, ‘backpack’: ‘slategray’, ‘snowboard’: ‘skyblue’, ‘kite’: ‘cadetblue’, ‘teddy bear’: ‘peacock’, ‘clock’: ‘lightcyan’, ‘wine glass’: ‘teal’, ‘frisbee’: ‘aquamarine’, ‘donut’: ‘mincream’, ‘suitcase’: ‘seagreen’, ‘dog’: ‘springgreen’, ‘banana’: ‘emeraldgreen’, ‘person’: ‘honeydew’, ‘surfboard’: ‘palegreen’, ‘cake’: ‘sapgreen’, ‘book’: ‘lawngreen’, ‘potted plant’: ‘greenyellow’, ‘toaster’: ‘ivory’, ‘stop sign’: ‘beige’, ‘couch’: ‘khaki’}
resized = False
def forSecond(frame2_number, output_arrays, count_arrays, average_count, returned_frame):
plt.clf()
this_colors = [] labels = [] sizes = []
counter = 0
- for eachItem in average_count:
- counter += 1 labels.append(eachItem + ” = ” + str(average_count[eachItem])) sizes.append(average_count[eachItem]) this_colors.append(color_index[eachItem])
global resized
- if (resized == False):
- manager = plt.get_current_fig_manager() manager.resize(width=1000, height=500) resized = True
plt.subplot(1, 2, 1) plt.title(“Second : ” + str(frame_number)) plt.axis(“off”) plt.imshow(returned_frame, interpolation=”none”)
plt.subplot(1, 2, 2) plt.title(“Analysis: ” + str(frame_number)) plt.pie(sizes, labels=labels, colors=this_colors, shadow=True, startangle=140, autopct=”%1.1f%%”)
plt.pause(0.01)
video_detector = VideoObjectDetection() video_detector.setModelTypeAsYOLOv3() video_detector.setModelPath(os.path.join(execution_path, “yolo.h5”)) video_detector.loadModel()
plt.show()
video_detector.detectObjectsFromVideo(input_file_path=os.path.join(execution_path, “traffic.mp4”), output_file_path=os.path.join(execution_path, “video_second_analysis”) , frames_per_second=20, per_second_function=forSecond, minimum_percentage_probability=30, return_detected_frame=True, log_progress=True)
—param?tre per_minute_function (optionnel) : Ce param?tre peut ?tre transmis en argument du nom de la fonction que vous d?finissez. Puis, pour chaque frame de la vid?o qui est d?tect?e, le param?tre qui a ?t? transmis dans la fonction sera interpr?t? et les donn?es analytiques de la vid?o seront transmis ? la fonction. Les donn?es retourn?es sont de m?me nature que per_second_function?; la diff?rence est qu?elle ne tient compte que de tous les frames de la derni?re minute de la vid?o.
Retrouvez une exemple de fonction pour ces param?tres ci-dessous?:
- def forMinute(minute_number, output_arrays, count_arrays, average_output_count):
- print(“MINUTE : “, minute_number) print(“Array for the outputs of each frame “, output_arrays) print(“Array for output count for unique objects in each frame : “, count_arrays) print(“Output average count for unique objects in the last minute: “, average_output_count) print(“————END OF A MINUTE ————–”)
—param?tre video_complete_function (optionnel) : Ce param?tre peut ?tre transmis en argument d?une fonction que vous d?finissez. Une fois que tous les frames de la vid?o sont totalement d?tect?s, le param?tre transmis sera interpr?t? et les donn?es analytiques de la vid?o seront transmis ? la fonction. Les donn?es retourn?es ont la m?me nature que per_second_function et per_minute_function?; les diff?rences sont qu?aucun index n?est renvoy? et ici tous les frames de la vid?o sont couvertes.
Retrouvez une exemple de fonction pour ces param?tres ci-dessous?:
- def forFull(output_arrays, count_arrays, average_output_count):
- print(“Array for the outputs of each frame “, output_arrays) print(“Array for output count for unique objects in each frame : “, count_arrays) print(“Output average count for unique objects in the entire video: “, average_output_count) print(“————END OF THE VIDEO ————–”)
Apprentissage personnalis? et pr?diction des Classes¶
ImageAI fournit des classes puissante et n?anmoins facile ? utiliser pour entrainer des algorithmes a la pointe de la technologies tel que SqueezeNet, ResNet , InceptionV3 et DenseNet sur votre propre base de donn?es avec juste 5 lignes de code pour g?n?rer votre propre mod?le personnalis?. Une fois que vous avez entrain? votre propre mod?le, vous pouvez utiliser la classe CustomImagePrediction fournit par ImageAI pour utiliser votre mod?le pour reconnaitre et faire la d?tection sur une image ou un ensemble d?images.
======= imageai.Prediction.Custom.ModelTraining =======
La classe ModelTraining vous permet d?entrainer un des quatre algorithme d?apprentissage profond suivant (SqueezeNet, ResNet , InceptionV3 et DenseNet) sur votre base de donn?es d?images pour g?n?rer votre propre mod?le. Votre base de donn?es d?images doit contenir au moins deux diff?rentes classes/types d?images (chat et chien) et vous devez ressembler au moins 500 images de chaque classe pour obtenir le maximum de pr?cision possible.
Le processus d?entrainement g?n?r? un fichier JSON qui fait une correspondance entre les types d?objets dans votre base d?images et cr?? des mod?les. Vous ferez le choix du mod?le avec la pr?cision la plus ?lev?e et qui puisse faire la pr?diction en utilisant le mod?le et le fichier JSON g?n?r?.
Puisse la t?che d?apprentissage est gourmande en ressource, nous recommandons fortement de la faire ? l?aide d?un ordinateur ?quip? d?un GPU NVIDIA et ayant le version GPU de Tensorflow install?e. Faire l?apprentissage sur un CPU va demander beaucoup d?heures et de jours. Avec un syst?me informatique ?quip? d?un GPU NVIDIA cela ne devrait prendre que quelques heures. Vous pouvez utiliser Google Colab pour cette exp?rience, puisqu?il est ?quip? d?un GPU NVIDIA K80.
Pour entrainer votre mod?le de pr?diction, vous devez pr?parer les images que vous voulez utiliser pour entrainer votre mod?le. Vous pr?parerez les images comme suit?:
– Cr?er un dossier avec le nom que vous aimeriez donner avec votre base de donn?es (ex: Chats)
—Dans le dossier que vous avez pr?c?demment cr?e, cr?er un dossier que vous nommerez ?train?
– A cote du dossier train, cr?er un autre dossier et nommez le ?test?
—Dans le dossier ?train?, cr?ez un dossier pour chaque type d?objets que vous aimeriez que votre mod?le reconnaisse et nomme le dossier selon la classe ? pr?dire (ex?: chien, chat, ?cureuil, serpents)
– Dans chaque dossier pr?sent dans votre dossier ?train?, mettez-y les images de chaque objet ou classe. Ces images seront utilis?es pour l?apprentissage de votre mod?le.
—pour g?n?rer un mod?le qui puisse ?tre viable pour des applications robustes, Je vous recommande d?avoir au moins 500 images ou de plus par objets. 1000 images per objets serait mieux.
– Dans le dossier ?Test?, cr?er des dossiers et nommez les selon les noms que vous avez utilis? pour le dossier ?Train?. Mettez environ 100 ? 200 images correspondantes dans chaque dossier. Ces images seront celle utilis?es pour tester le mod?le apr?s l?avoir entrain?.
—Une fois que vous avez fait cela, la structure des dossiers de votre base d?images devrait ?tre comme suit::
animaux//train//chien//chien-train-images animaux//train//chat// chat -train-images animaux//train//lion // lion -train-images animaux//train//serpent// serpent -train-images
animaux//test//chien //chien-test-images animaux//test//chat // chat -test-images animaux//test//lion// lion -test-images animaux//test//serpent // serpent -test-images
Une fois que votre base de donn?es est pr?te, vous pouvez cr?er une instance de la classe ModelTraining. Retrouver un exemple ci-dessous?:
from imageai.Prediction.Custom import ModelTraining
model_trainer = ModelTraining()
Une fois que vous avez cr?? l?instance ci-dessous, vous pouvez utiliser les fonctions ci-dessous pour commencer le processus d?entrainement.
.setModelTypeAsSqueezeNet() , Cette fonction ?tablit comme type de mod?le pour votre instance d?entrainement le mod?le SqueezeNet, ceci veut dire que l?algorithme SqueezeNet sera utilis? pour entrainer votre mod?le. Trouver un exemple de code ci-dessous?:
model_trainer.setModelTypeAsSqueezeNet()
.setModelTypeAsResNet() , Cette fonction ?tablit comme type de mod?le pour votre instance d?entrainement le mod?le ResNet, ceci veut dire que l?algorithme ResNet sera utilis? pour entrainer votre mod?le. Trouver un exemple de code ci-dessous
model_trainer.setModelTypeAsResNet()
.setModelTypeAsInceptionV3() , Cette fonction ?tablit comme type de mod?le pour votre instance d?entrainement le mod?le ** InceptionV3**, ceci veut dire que l?algorithme ** InceptionV3** sera utilis? pour entrainer votre mod?le. Trouver un exemple de code ci-dessous?:
model_trainer.setModelTypeAsInceptionV3()
.setModelTypeAsDenseNet() , Cette fonction ?tablit comme type de mod?le pour votre instance d?entrainement le mod?le DenseNet, ceci veut dire que l?algorithme DenseNet sera utilis? pour entrainer votre mod?le. Trouver un exemple de code ci-dessous?:
model_trainer.setModelTypeAsDenseNet()
.setDataDirectory() , Cette fonction prend en argument une chaine de caract?re qui doit ?tre le chemin vers le dossier qui contient les sous-dossiers test et train qui contiennent votre base d?images. Retrouver un exemple d?utilisation de la fonction, et de ses param?tres ci-dessous
prediction.setDataDirectory("C:/Users/Moses/Documents/Moses/AI/Custom Datasets/animaux")
– parametre data_directory (obligatoire) : Il s?agit du chemin vers le dossier qui contient votre base d?images.
.trainModel() , Il s?agit de la fonction qui commence le processus d?entrainement. Une fois commenc?, il cr?era un fichier JSON dans le dossier dataset/json (ex animaux/json) qui contient la correspondance de chaque classe dans la base d?images. Le fichier JSON sera utilis? pendant la d?tection personnalis?e pour produire les r?sultats. Trouvez un exemple de code ci-dessous
model_trainer.trainModel(num_objects=4, num_experiments=100, enhance_data=True, batch_size=32, show_network_summary=True)
– param?tre num_objects (obligatoire) : Ceci fait r?f?rence au nombre de diff?rentes classes dans votre base d?images.
—param?tre num_experiments (obligatoire) : Il repr?sente le nombre de fois que l?algorithme sera entrain? sur la base d?images. La pr?cision de votre entrainement augmente avec le nombre d?it?rations ou d?entrainement. Cependant la pr?cision atteint son maximum avec un certain nombre d?it?ration et nombre d?pend de la taille et de la nature de base de donn?es.
– param?tre enhance_data (optionnel) : Ce param?tre est utilis? pour transformer votre base d?images en g?n?rant plus dՎchantillons pour la phase d?entrainement. Par d?faut sa valeur est ?False?. N?anmoins, il est important de lui donner la valeur ?True? lorsque votre base d?images contient moins de 1000 images par classe.
—param?tre batch_size (optionnel) : Pendant la phase d?entrainement, L?algorithme est entrain? sur un ensemble d?images en parall?le. A cause de cela, la valeur par d?faut est mise ? 32. Vous pouvez accroitre ou d?croitre cette valeur selon votre connaissance du syst?me que vous utilisez pour l?apprentissage. Si vous envisagez de changer cette valeur, vous devrez utiliser des multiples de 8 pour optimiser le processus d?apprentissage.
– param?tre show_network_summary (optionnel) : Lorsque ce param?tre a la valeur ?True?, il affiche la structure de l?algorithme que vous utilisez pour l?apprentissage sur vos images dans une petite console avant de commencer l?apprentissage. Sa valeur par d?faut est ?False?.
—param?tre initial_learning_rate (optionnel) : Ce param?tre a une haute valeur technique. Il d?termine et contr?le le comportement de votre apprentissage, ce qui est critique pour la pr?cision ? r?aliser. Vous pouvez changer la valeur de ce param?tre si vous avez une pleine compr?hension de sa fonctionnalit?.
– training_image_size initial_learning_rate (optionnel) : Il repr?sente la taille que vos images prendront pendant le processus d?apprentissage, peu importe leur taille d?origine. La valeur par d?faut est de 224 et elle ne doit pas aller en dessous de 100. Augmenter sa valeur permettra de gagner en pr?cision mais augmentera aussi le temps d?apprentissage et vice-versa.
Exemple de code pour un model apprentissage personnalise
Trouvez ci-dessous un exemple de code lors de l?apprentissage d?un mod?le personnalis? sur votre base d?images?:
from imageai.Prediction.Custom import ModelTraining
model_trainer = ModelTraining()
model_trainer.setModelTypeAsResNet()
model_trainer.setDataDirectory(r"C:/Users/Moses/Documents/Moses/AI/Custom Datasets/animaux")
model_trainer.trainModel(num_objects=10, num_experiments=100, enhance_data=True, batch_size=32, show_network_summary=True)
Ci-dessous est un aper?u de r?sultat lorsque l?apprentissage commence?:
Epoch 1/100
1/25 [>.............................] - ETA: 52s - loss: 2.3026 - acc: 0.2500
2/25 [=>............................] - ETA: 41s - loss: 2.3027 - acc: 0.1250
3/25 [==>...........................] - ETA: 37s - loss: 2.2961 - acc: 0.1667
4/25 [===>..........................] - ETA: 36s - loss: 2.2980 - acc: 0.1250
5/25 [=====>........................] - ETA: 33s - loss: 2.3178 - acc: 0.1000
6/25 [======>.......................] - ETA: 31s - loss: 2.3214 - acc: 0.0833
7/25 [=======>......................] - ETA: 30s - loss: 2.3202 - acc: 0.0714
8/25 [========>.....................] - ETA: 29s - loss: 2.3207 - acc: 0.0625
9/25 [=========>....................] - ETA: 27s - loss: 2.3191 - acc: 0.0556
10/25 [===========>..................] - ETA: 25s - loss: 2.3167 - acc: 0.0750
11/25 [============>.................] - ETA: 23s - loss: 2.3162 - acc: 0.0682
12/25 [=============>................] - ETA: 21s - loss: 2.3143 - acc: 0.0833
13/25 [==============>...............] - ETA: 20s - loss: 2.3135 - acc: 0.0769
14/25 [===============>..............] - ETA: 18s - loss: 2.3132 - acc: 0.0714
15/25 [=================>............] - ETA: 16s - loss: 2.3128 - acc: 0.0667
16/25 [==================>...........] - ETA: 15s - loss: 2.3121 - acc: 0.0781
17/25 [===================>..........] - ETA: 13s - loss: 2.3116 - acc: 0.0735
18/25 [====================>.........] - ETA: 12s - loss: 2.3114 - acc: 0.0694
19/25 [=====================>........] - ETA: 10s - loss: 2.3112 - acc: 0.0658
20/25 [=======================>......] - ETA: 8s - loss: 2.3109 - acc: 0.0625
21/25 [========================>.....] - ETA: 7s - loss: 2.3107 - acc: 0.0595
22/25 [=========================>....] - ETA: 5s - loss: 2.3104 - acc: 0.0568
23/25 [==========================>...] - ETA: 3s - loss: 2.3101 - acc: 0.0543
24/25 [===========================>..] - ETA: 1s - loss: 2.3097 - acc: 0.0625Epoch 00000: saving model to C:\Users\Moses\Documents\Moses\W7\AI\Custom Datasets\IDENPROF\idenprof-small-test\idenprof\models\model_ex-000_acc-0.100000.h5
25/25 [==============================] - 51s - loss: 2.3095 - acc: 0.0600 - val_loss: 2.3026 - val_acc: 0.1000
Expliquons les d?tails ci-dessus?:
- La ligne Epoch 1/100 signifie que le r?seau fait le premier apprentissage sur les 100 voulus. 0
- La ligne 1/25 [>………………………..] - ETA: 52s - loss: 2.3026 - acc: 0.2500 repr?sente le nombre de groupe qui ont ?t? entrain? dans la pr?sente phase d?apprentissage.
- La ligne Epoch 00000: sauvegarde le mod?le ? l?emplacement C:UsersUserPycharmProjectsImageAITestpetsmodelsmodelex-000acc-0.100000.h5 ? la fin de la phase d?apprentissage pr?sente. ex_000 repr?sente le niveau d?apprentissage tandis que acc0.100000 et valacc: 0.1000 repr?sente la pr?cision du mod?le sur l?ensemble d?images ?Test? apr?s le pr?sent apprentissage(La valeur maximale de la pr?cision est de 1.0). Ce r?sultat vous permet de connaitre le meilleur mod?le a utiliser pour la d?tection sur vos images.
Une fois que vous avez termin? l?apprentissage de votre mod?le termine, vous pouvez utiliser la classe CustomImagePrediction d?crite si dessous pour la d?tection avec votre mod?le.
======= imageai.Prediction.Custom.CustomImagePrediction =======
Cette classe peut ?tre consid?r?e comme une r?plique de imageai.Prediction.ImagePrediction puis qu?elle a les m?me fonctions, param?tres et r?sultats. La seule diff?rence est que cette classe fonctionne avec votre mod?le personnalis?. Vous aurez besoin de sp?cifier le chemin du fichier JSON g?n?r? pendant la phase d?apprentissage et aussi de sp?cifier le nombre de classe dans votre base d?image lors du chargement du mod?le. Ci-dessous est un exemple de cr?ation d?instance de la classe?:
from imageai.Prediction.Custom import CustomImagePrediction
prediction = CustomImagePrediction()
Une fois que vous avez cr?? l?instance, vous pouvez utiliser les fonctions ci-dessous pour configurer les propri?t?s de votre instance et commencer le processus de d?tection et reconnaissance sur des images.
.setModelTypeAsSqueezeNet() , Cette fonction ?tablit comme type de mod?le pour votre instance de reconnaissance et d?tection, le mod?le SqueezeNet, ceci veut dire que l?algorithme SqueezeNet g?n?r? pendant votre phase d?apprentissage personnalis?e sera utilis? pour la tache de pr?diction sur vos images. Trouver un exemple de code ci-dessous?:
prediction.setModelTypeAsSqueezeNet()
. setModelTypeAsResNet() , Cette fonction ?tablit comme type de mod?le pour votre instance de reconnaissance et d?tection, le mod?le ** ResNet**, ceci veut dire que l?algorithme ResNet g?n?r? pendant votre phase d?apprentissage personnalis?e sera utilis? pour la tache de pr?diction sur vos images. Trouver un exemple de code ci-dessous?:
prediction.setModelTypeAsResNet()
. setModelTypeAsInceptionV3 () , Cette fonction ?tablit comme type de mod?le pour votre instance de reconnaissance et d?tection, le mod?le InceptionV3, ceci veut dire que l?algorithme InceptionV3 g?n?r? pendant votre phase d?apprentissage personnalis?e sera utilis? pour la tache de pr?diction sur vos images. Trouver un exemple de code ci-dessous?:
prediction.setModelTypeAsInceptionV3()
. setModelTypeAsDenseNet() , Cette fonction ?tablit comme type de mod?le pour votre instance de reconnaissance et d?tection, le mod?le ** DenseNet**, ceci veut dire que l?algorithme DenseNet g?n?r? pendant votre phase d?apprentissage personnalis?e sera utilis? pour la tache de pr?diction sur vos images. Trouver un exemple de code ci-dessous?:
prediction.setModelTypeAsDenseNet()
.setModelPath() , cette fonction accepte une chaine de caract?re qui doit ?tre le chemin vers le fichier mod?le g?n?r? pendant votre phase d?apprentissage et doit correspondre au type de mod?le que vous avez d?fini pour votre instance de reconnaissance d?images. Trouver un exemple de code, et de param?tres de fonction ci-dessous?:
prediction.setModelPath("resnet_model_ex-020_acc-0.651714.h5")
– param?tre model_path (requis) : Il s?agit du chemin vers le fichier mod?le t?l?charg?.
.setJsonPath() , cette fonction prend en argument une chaine de caract?re qui repr?sente le chemin vers le fichier JSON g?n?r? pendant la phase d?apprentissage du mod?le personnalis?. Trouvez ci-dessous un exemple de code et de param?tres de la fonction?:
prediction.setJsonPath("model_class.json")
– param?tre model_path (requis) : Il s?agit du chemin vers le fichier mod?le t?l?charg?.
.loadModel() , Cette fonction charge le mod?le ? partir du chemin sp?cifi? dans votre appel de fonction ci-dessus pour votre instance de pr?diction d?images. Au param?tre num_objects vous devrez donner la valeur correspondant au nombre de classes dans votre base d?images. Trouvez ci-dessous un exemple de code et de param?tres de la fonction?:
prediction.loadModel(num_objects=4)
– param?tre num_objects (requis) : La valeur de ce param?tre doit correspondre au nombre de classe dans votre base d?images.
– param?tre prediction_speed (optionnel) : Ce param?tre vous permet de r?duire le temps de pr?diction sur une image d?environ 80% ce qui conduit ? une l?g?re r?duction de la pr?cision. Ce param?tre prend des valeurs de type chaine de caract?re. Les valeurs disponibles sont?: “normal”, “fast”, “faster” et “fastest”. La valeur par d?faut est “normal”
.predictImage() , C?est la fonction qui accomplit ? proprement parler la pr?diction sur une image. Elle peut ?tre appeler plusieurs fois sur plusieurs images une fois que le mod?le a ?t? charge dans l?instance de pr?diction. Trouver ci-dessous un exemple de code, de param?tres de fonction ainsi que les valeurs renvoy?es?:
predictions, probabilities = prediction.predictImage("image1.jpg", result_count=2)
– param?tre image_input (requis) : Il fait r?f?rence au chemin vers votre image, le tableau de type Numpy de votre image ou le flux de votre image, d?pendamment de type de valeur d?entr?e sp?cifi?e.
—param?tre result_count (optionnel) : il fait r?f?rence au nombre possible de pr?diction qui peuvent ?tre donne. Ce param?tre a pour valeur par d?faut 5.
– param?tre input_type (optionnel) : Il fait r?f?rence au type de la valeur d?entr?e que vous passez au param?tre image_input. Il est de type ?file? par d?faut et accepte ?stream ?et ?array ?aussi.
—valeur retourn?e prediction_results (une liste python) :
La premi?re valeur retourn?e par la fonction predictImage est une liste qui contient tous les r?sultats possibles de pr?diction. Les r?sultats sont ordonn?s en ordre descendant de pourcentage de probabilit?.
– valeur retourn?e prediction_probabilities (une liste python) :
La premi?re valeur retourn?e par la fonction predictImage est une liste qui contient les pourcentages de probabilit? correspondantes a toutes les pr?dictions possibles dans prediction_results
.predictMultipleImages() , Cette fonction peut ?tre utilis?e pour effectuer la tache de pr?diction sur 2 ou plusieurs images en une seule fois. Trouvez ci-dessous un exemple de code, param?tres de fonction et de valeurs renvoy?es?:
results_array = multiple_prediction.predictMultipleImages(all_images_array, result_count_per_image=2) for each_result in results_array: predictions, percentage_probabilities = each_result["predictions"], each_result["percentage_probabilities"] for index in range(len(predictions)): print(predictions[index] , " : " , percentage_probabilities[index]) print("-----------------------")
– param?tre sent_images_array (requis) : Il fait r?f?rence a une liste qui contient le chemin vers vos fichiers image, vos tableau Numpy de vos images ou vos fichiers de flux d?images, d?pendamment du type de valeur d?entr?e sp?cifi?e.
– param?tre result_count_per_image (optionnel) : Il fait r?f?rence au nombre possible de pr?dictions qui doivent ?tre donn?es pour chaque image. Ce param?tre a pour valeur par d?faut 2.
– param?tre input_type (optionnel) : Il fait r?f?rence au format de vos images ont dans la liste du param?tre sent_images_array. Il est de type ?file? par d?faut et accepte ?stream ?et ?array ?aussi.
– valeur retourn?e output_array (une liste python) :
La valeur retourn?e par la fonction predictMultipleImages est une liste qui contient des dictionnaires. Chaque dictionnaire correspond ? une image contenue dans le tableau envoy?e ? sent_images_array. Chaque dictionnaire a une propriete “prediction_results” qui est une liste de tous les resultats de prediction pour l?image a cet indice aussi bien que la probabilite de prediction “prediction_probabilities” qui est une liste de pourcentage de probabilite correspondant a chaque resultat.
Exemple de code
Trouvez ci-dessous un ?chantillon de code pour la pr?diction personnalis??:
from imageai.Prediction.Custom import CustomImagePrediction
import os
execution_path = os.getcwd()
prediction = CustomImagePrediction()
prediction.setModelTypeAsResNet()
prediction.setModelPath(os.path.join(execution_path, "resnet_model_ex-020_acc-0.651714.h5"))
prediction.setJsonPath(os.path.join(execution_path, "model_class.json"))
prediction.loadModel(num_objects=4)
predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "4.jpg"), result_count=5)
for eachPrediction, eachProbability in zip(predictions, probabilities):
print(eachPrediction , " : " , eachProbability)