[PYTHON] Machine de jugement de gorille, gorinator! !! J'ai essayé de le faire!

Auto-introduction

Je suis un étudiant professionnel d'environ 20 ans. Cela fait un an que je suis entré dans une école professionnelle. Je n'avais jamais fait de programmation avant d'entrer dans une école professionnelle. Maintenant que j'ai appris les bases de python, j'aimerais étudier en faisant diverses choses!

Ce que j'ai utilisé comme référence

J'ai fait référence à discord.py ici. https://qiita.com/mizunana/items/4afddc71f37df555078e Pour CustomVision et OpenVINO, reportez-vous ici. https://github.com/hiouchiy/IntelAI_and_Cloud/blob/master/Azure/demo1/Lesson1_AzureCognitiveService_and_OpenVINO_Collaboration.ipynb

Ce que j'ai utilisé

# Aperçu Cette fois, j'ai créé un modèle d'IA simple en utilisant Custom Vision. Et je l'ai rendu utilisable comme un robot discord # code ```python # -*- coding: utf-8 -*- import glob import random import numpy as np import glob import random import time import os import cv2 from PIL import Image import PIL import io import IPython.display from IPython.display import clear_output import discord import requests from openvino.inference_engine import IENetwork, IEPlugin

class Model(object):

def __init__(self):
    self.labels = []
    labels_filename = "labels.txt"

    # Create a list of labels.
    with open(labels_filename, 'rt') as lf:
        for l in lf:
            self.labels.append(l.strip())

def predict(self, imageFile):
    raise NotImplementedError

def convert_to_opencv(self, image):
    # RGB -> BGR conversion is performed as well.
    image = image.convert('RGB')
    r,g,b = np.array(image).T
    opencv_image = np.array([b,g,r]).transpose()
    return opencv_image

def crop_center(self, img,cropx,cropy):
    h, w = img.shape[:2]
    startx = w//2-(cropx//2)
    starty = h//2-(cropy//2)
    return img[starty:starty+cropy, startx:startx+cropx]

def resize_down_to_1600_max_dim(self, image):
    h, w = image.shape[:2]
    if (h < 1600 and w < 1600):
        return image

    new_size = (1600 * w // h, 1600) if (h > w) else (1600, 1600 * h // w)
    return cv2.resize(image, new_size, interpolation = cv2.INTER_LINEAR)

def resize_to_256_square(self, image):
    h, w = image.shape[:2]
    return cv2.resize(image, (256, 256), interpolation = cv2.INTER_LINEAR)

def update_orientation(self, image):
    exif_orientation_tag = 0x0112
    if hasattr(image, '_getexif'):
        exif = image._getexif()
        if (exif != None and exif_orientation_tag in exif):
            orientation = exif.get(exif_orientation_tag, 1)
            # orientation is 1 based, shift to zero based and flip/transpose based on 0-based values
            orientation -= 1
            if orientation >= 4:
                image = image.transpose(Image.TRANSPOSE)
            if orientation == 2 or orientation == 3 or orientation == 6 or orientation == 7:
                image = image.transpose(Image.FLIP_TOP_BOTTOM)
            if orientation == 1 or orientation == 2 or orientation == 5 or orientation == 6:
                image = image.transpose(Image.FLIP_LEFT_RIGHT)
    return image

class OpenVINOModel(Model):

def __init__(self, target_device):
    super(OpenVINOModel, self).__init__()

    # These are set to the default names from exported models, update as needed.
    model_xml = 'model.xml'
    model_bin = 'model.bin'

    # Plugin initialization for specified device and load extensions library if specified
    # Set the desired device name as 'device' parameter. This sample support these 3 names: CPU, GPU, MYRIAD
    ie = IEPlugin(device=target_device, plugin_dirs='')

    # Read IR
    self.net = IENetwork(model=model_xml, weights=model_bin)

    self.input_blob = next(iter(self.net.inputs))
    self.out_blob = next(iter(self.net.outputs))
    self.net.batch_size = 1

    # Loading model to the plugin
    self.exec_net = ie.load(network=self.net)

def predict(self, imageFile):
    start1 = time.time() 

    # Load from a file
    image = Image.open(imageFile)

    # Update orientation based on EXIF tags, if the file has orientation info.
    image = super().update_orientation(image)

    # Convert to OpenCV format
    image = super().convert_to_opencv(image)

    # If the image has either w or h greater than 1600 we resize it down respecting
    # aspect ratio such that the largest dimension is 1600
    image = super().resize_down_to_1600_max_dim(image)

    # We next get the largest center square
    h, w = image.shape[:2]
    min_dim = min(w,h)
    max_square_image = super().crop_center(image, min_dim, min_dim)

    # Resize that square down to 256x256
    augmented_image = super().resize_to_256_square(max_square_image)

    # Get the input size of the model
    n, c, h, w = self.net.inputs[self.input_blob].shape

    # Crop the center for the specified network_input_Size
    augmented_image = super().crop_center(augmented_image, w, h)
    frame = augmented_image

    #
    augmented_image = augmented_image.transpose((2, 0, 1))

    images = np.ndarray(shape=(n, c, h, w))
    images[0] = augmented_image

    start2 = time.time() 
    predictions = self.exec_net.infer(inputs={self.input_blob: images})
    infer_time = time.time() - start2

    # Print the highest probability label
    predictions = predictions[self.out_blob]
    highest_probability_index = predictions[0].argsort()[-1:][::-1]
    
    if highest_probability_index[0] == 1 and predictions[0][0] > 1e-12:
        print("Classe humaine1")
        score = predictions[0]
        send_message = "Vous avez un faible coefficient de gorille.\n Si vous voulez l'élever, vous devriez manger 3 bananes par jour."
    
    elif highest_probability_index[0] == 1 and predictions[0][0] > 1e-6:
        print("Classe humaine2")
        score = predictions[0]
        send_message = "Toi, peut-être que ton ancêtre est un gorille(Mensonge)"
    
    elif highest_probability_index[0] == 1:
        print("Classe humaine3")
        score = predictions[0]
        send_message = "Peut-être que votre vie précédente était un gorille?"
    
    elif highest_probability_index[0] == 0 and predictions[0][1] > 1e-12:
        print("Gorille classe1")
        score = predictions[0]
        send_message = "Tu es un véritable gorille\n Vous pouvez devenir un gorille légendaire!"
    elif highest_probability_index[0] == 0 and predictions[0][1] > 1e-6:
        print("Gorille classe2")
        score = predictions[0]
        send_message = "Le coefficient de gorille est un peu bas\n Si vous voulez être plus extrême, courez dans la jungle et aidez les gorilles autour de vous!"
    
    elif highest_probability_index[0] == 0:
        print("Gorille classe3")
        score = predictions[0]
        send_message = "Vous êtes un gorille plus qu'une personne!"
    

    return score,send_message 

def download_img(url, file_name): r = requests.get(url, stream=True) if r.status_code == 200: with open(file_name, 'wb') as f: f.write(r.content)

def run_inference(target_device='CPU'): model = OpenVINOModel('CPU') file_list = glob.glob("images/*.png ") img_path = random.choice(file_list)

return model.predict(img_path)

TOKEN = 'Voici le jeton du bot' client = discord.Client()

#Traitement qui fonctionne au démarrage @client.event async def on_ready(): #Une notification de connexion sera affichée dans le terminal après le démarrage print('Vous êtes maintenant connecté')

#Traitement qui fonctionne lors de la réception d'un message @client.event async def on_message(message): #Ignorer si l'expéditeur du message est Bot if message.author.bot: return

#Jugement de savoir s'il a été prononcé
if message.content.startswith('/pic'):
    #Il y a beaucoup d'informations quand je les reçois de discord ici
    juge_img = str(message.attachments[0])

    #Divisez les informations une par une et faites-en un élément de la liste
    juge_img_cre = juge_img.split(' ')
    
    #Maintenant, je veux le contenu de l'url, alors je coupe les parties qui n'ont pas besoin de l'URL et j'obtiens cette URL_Défini comme img
    get_img = juge_img_cre[3].lstrip("url='").rstrip("'>")
    download_img(get_img, "images/image.png ")
    
    deta = run_inference(target_device='CPU')

    await message.channel.send("Votre coefficient de gorille est"+str(deta[0][0])+"\n"+deta[1])

client.run(TOKEN)

 La plupart du temps, j'ai utilisé le site auquel je faisais référence.
## Où j'ai lutté
 Je ne savais rien de la création d'un robot discord pour la première fois, mais ce avec quoi j'ai eu du mal était de savoir comment juger quand une image a été envoyée et comment enregistrer l'image et la transmettre au modèle.

 Tout d'abord, le jugement envoyé a été résolu en envoyant un commentaire à l'image.

 Et c'était un peu difficile de sauvegarder l'image.
 Tout d'abord, j'ai fait ** download_img ** en regardant le site référencé.
 J'ai fait un léger changement car le site ne fonctionnait pas à cause de la différence entre le site auquel je faisais référence et l'environnement de développement.

OpenVINO
 OpenVINO est un processeur qu'Intel a mis en place pour effectuer des traitements tels que l'apprentissage automatique.
 Je l'ai utilisé en classe cette fois, mais la vitesse a énormément changé, au début je pensais qu'il n'était pas nécessaire d'être aussi rapide, mais quand j'ai fait une vidéo sans images fixes, j'ai dit qu'il valait mieux avoir moins de décalage Je voulais l'utiliser parce que j'étais malade, alors je l'ai utilisé cette fois.
# Impressions
 J'étais intéressé par l'IA et suis entré dans une école professionnelle. Au début, je faisais les bases de la programmation, donc je ne pouvais pas faire beaucoup d'IA, alors j'ai commencé à essayer de faire quelque chose de simple.

 L'utilisation de la vision personnalisée facilite la création d'un modèle et la création d'un robot discord n'est pas trop difficile!

 Désormais, je souhaite faire mon propre modèle et faire des choses intéressantes tout en apportant diverses améliorations!

 En passant, je suis venu au bureau des impôts quand on m'a demandé de demander une déclaration de revenus parce que ma famille en avait besoin et que je n'avais pas le temps, mais j'attends ** 100 minutes **, ce qui est à égalité avec les attractions populaires de Disneyland. .. Je ferai de mon mieux.


Recommended Posts

Machine de jugement de gorille, gorinator! !! J'ai essayé de le faire!
J'ai créé une API Web
[Zaif] J'ai essayé de faciliter le commerce de devises virtuelles avec Python
Quand j'ai essayé de créer un VPC avec AWS CDK mais que je n'ai pas pu le faire
Un débutant en apprentissage automatique a essayé de créer un modèle de prédiction de courses de chevaux avec python
J'ai essayé de faire de l'IA pour Smash Bra
Un débutant en apprentissage automatique a tenté de créer une IA de jugement Sheltie en un jour
J'ai fait de mon mieux pour créer une fonction d'optimisation, mais cela n'a pas fonctionné.
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
J'ai essayé de faire sonner le téléphone lorsqu'il a été publié sur le poste IoT
Les débutants en Python ont créé un chat BOT alors j'ai essayé de résumer comment le faire
J'ai essayé de faciliter la modification du paramètre du proxy authentifié sur Jupyter
J'ai essayé de faire un "putain de gros convertisseur de littérature"
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
Développer la source devicetree pour faciliter la lecture
Suite ・ J'ai essayé de créer Slackbot après avoir étudié Python3
Les débutants en apprentissage automatique essaient de créer un arbre de décision
Comment utiliser Decorator dans Django et comment le créer
J'ai essayé de créer une application OCR avec PySimpleGUI
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
[Git] J'ai essayé de faciliter la compréhension de l'utilisation de git stash en utilisant un exemple concret.
J'ai essayé de déboguer.
Introduction à l'apprentissage automatique
J'ai essayé de découvrir les grandes lignes de Big Gorilla
Essayez de le faire avec GUI, PyQt en Python
Oncle SE avec un cerveau endurci a essayé d'étudier l'apprentissage automatique
J'ai essayé de créer diverses "données factices" avec Python faker
Vous qui coloriez le journal pour le rendre plus facile à voir
Une doublure qui formate JSON pour le rendre plus facile à voir
Lorsque j'essaye de créer Apache SSL, cela ne démarre pas.
J'ai essayé l'apprentissage automatique pour convertir des phrases en style XX
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
Un débutant en python a essayé de faire un stage dans une entreprise informatique
J'ai créé un éditeur de texte simple en utilisant PyQt
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
J'ai essayé de rendre possible l'envoi automatique d'un e-mail en double-cliquant simplement sur l'icône [Python]
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Introduction ~
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Implémentation ~