[PYTHON] Gorilla-Urteilsmaschine, Gorinator! !! Versucht es zu schaffen!

Vorstellen

Ich bin ein professioneller Student, ungefähr 20 Jahre alt. Es ist ein Jahr her, seit ich eine Berufsschule betreten habe. Ich hatte noch nie vor dem Eintritt in eine Berufsschule programmiert. Nachdem ich die Grundlagen von Python gelernt habe, möchte ich lernen, während ich verschiedene Dinge mache!

Was ich als Referenz verwendet habe

Ich habe hier auf discord.py verwiesen. https://qiita.com/mizunana/items/4afddc71f37df555078e Informationen zu CustomVision und OpenVINO finden Sie hier. https://github.com/hiouchiy/IntelAI_and_Cloud/blob/master/Azure/demo1/Lesson1_AzureCognitiveService_and_OpenVINO_Collaboration.ipynb

Was ich benutzt habe

# Überblick Dieses Mal habe ich mit Custom Vision ein einfaches KI-Modell erstellt. Und ich habe es als Zwietrachtbot nutzbar gemacht # 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("Menschliche Klasse1")
        score = predictions[0]
        send_message = "Sie haben einen niedrigen Gorillakoeffizienten.\n Wenn Sie es aufziehen möchten, sollten Sie jeden Tag 3 Bananen essen."
    
    elif highest_probability_index[0] == 1 and predictions[0][0] > 1e-6:
        print("Menschliche Klasse2")
        score = predictions[0]
        send_message = "Sie, vielleicht ist Ihr Vorfahr ein Gorilla(Lüge)"
    
    elif highest_probability_index[0] == 1:
        print("Menschliche Klasse3")
        score = predictions[0]
        send_message = "Vielleicht war dein vorheriges Leben ein Gorilla?"
    
    elif highest_probability_index[0] == 0 and predictions[0][1] > 1e-12:
        print("Gorilla Klasse1")
        score = predictions[0]
        send_message = "Du bist ein echter Gorilla\n Du kannst ein legendärer Gorilla werden!"
    elif highest_probability_index[0] == 0 and predictions[0][1] > 1e-6:
        print("Gorilla Klasse2")
        score = predictions[0]
        send_message = "Der Gorillakoeffizient ist etwas niedrig\n Wenn du extremer sein willst, renne durch den Dschungel und hilf den Gorillas um dich herum!"
    
    elif highest_probability_index[0] == 0:
        print("Gorilla Klasse3")
        score = predictions[0]
        send_message = "Du bist mehr ein Gorilla als eine Person!"
    

    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 = 'Fügen Sie hier den Bot-Token ein' client = discord.Client()

#Verarbeitung, die beim Start ausgeführt wird @client.event async def on_ready(): #Nach dem Start wird im Terminal eine Anmeldemeldung angezeigt print('Sie sind jetzt angemeldet')

#Verarbeitung, die beim Empfang einer Nachricht ausgeführt wird @client.event async def on_message(message): #Ignorieren Sie, wenn der Absender der Nachricht Bot ist if message.author.bot: return

#Beurteilung, ob es gesprochen wurde
if message.content.startswith('/pic'):
    #Es gibt viele Informationen, wenn ich sie hier aus Zwietracht bekomme
    juge_img = str(message.attachments[0])

    #Teilen Sie die Informationen nacheinander und machen Sie sie zu einem Element der Liste
    juge_img_cre = juge_img.split(' ')
    
    #Jetzt möchte ich den Inhalt der URL, also schneide ich die Teile ab, die die URL nicht benötigen, und erhalte diese URL_Definiert als 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("Ihr Gorilla-Koeffizient ist"+str(deta[0][0])+"\n"+deta[1])

client.run(TOKEN)

 Meistens habe ich die Site verwendet, auf die ich verwiesen habe.
## Wo ich kämpfte
 Ich wusste nichts darüber, wie man zum ersten Mal einen Zwietracht-Bot erstellt, aber ich hatte Probleme damit, zu beurteilen, wann ein Bild gesendet wurde und wie man das Bild speichert und an das Modell weitergibt.

 Zunächst wurde das gesendete Urteil durch Senden eines Kommentars an das Bild gelöst.

 Und es war ein wenig schwierig, das Bild zu speichern.
 Zuerst habe ich ** download_img ** erstellt, indem ich mir die referenzierte Site angesehen habe.
 Ich habe es etwas anders gemacht, weil die Site aufgrund des Unterschieds zwischen der Site, auf die ich mich bezog, und der Entwicklungsumgebung nicht funktioniert hat.

OpenVINO
 OpenVINO ist eine CPU, die Intel für die Verarbeitung von Prozessen wie maschinellem Lernen entwickelt hat.
 Ich habe es diesmal im Unterricht benutzt, aber die Geschwindigkeit hat sich enorm geändert. Zuerst dachte ich, dass es nicht notwendig ist, so schnell zu sein, aber als ich ein Video ohne Standbilder machte, sagte ich, dass es besser wäre, weniger Verzögerung zu haben Ich wollte es benutzen, weil ich krank war, also habe ich es dieses Mal benutzt.
# Impressionen
 Ich interessierte mich für KI und trat in eine Berufsschule ein. Zuerst machte ich die Grundlagen des Programmierens, also konnte ich nicht viel KI machen, also fing ich an, etwas Einfaches zu machen.

 Mit benutzerdefinierten Visionen ist es einfach, ein Modell zu erstellen, und es ist nicht allzu schwierig, einen Zwietracht-Bot zu erstellen!

 Von nun an möchte ich mein eigenes Modell bauen und interessante Dinge machen, während ich verschiedene Verbesserungen vornehme!

 Abgesehen davon kam ich zum Finanzamt, als ich gebeten wurde, eine Steuererklärung zu beantragen, weil meine Familie diese brauchte und ich keine Zeit hatte, aber ich warte auf 100 Minuten, was den beliebten Disneyland-Attraktionen ebenbürtig ist. .. Ich werde mein Bestes geben.


Recommended Posts

Gorilla-Urteilsmaschine, Gorinator! !! Versucht es zu schaffen!
Ich habe eine Web-API erstellt
[Zaif] Ich habe versucht, den Handel mit virtuellen Währungen mit Python zu vereinfachen
Als ich versuchte, eine VPC mit AWS CDK zu erstellen, konnte ich es aber nicht schaffen
Ein Anfänger des maschinellen Lernens versuchte, mit Python ein Vorhersagemodell für Pferderennen zu erstellen
Ich habe versucht, KI für Smash Bra zu machen
Ein Anfänger des maschinellen Lernens versuchte an einem Tag, eine Sheltie-Urteils-KI zu erstellen
Ich habe mein Bestes versucht, um eine Optimierungsfunktion zu erstellen, aber es hat nicht funktioniert.
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Ich habe versucht, das Telefon klingeln zu lassen, als es auf dem IoT-Post veröffentlicht wurde
Python-Anfänger haben einen Chat-BOT erstellt, also habe ich versucht, zusammenzufassen, wie man es macht
Ich habe versucht, es einfach zu machen, die Einstellung des authentifizierten Proxys auf Jupyter zu ändern
Ich habe versucht, einen "verdammt großen Literaturkonverter" zu machen.
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
Erweitern Sie devicetree source include, um das Lesen zu vereinfachen
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Wie man Decorator in Django benutzt und wie man es macht
Ich habe versucht, eine OCR-App mit PySimpleGUI zu erstellen
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
[Git] Ich habe versucht, anhand eines konkreten Beispiels zu verstehen, wie man Git Stash verwendet.
Ich habe versucht zu debuggen.
Einführung in das maschinelle Lernen
Ich habe versucht, die Umrisse von Big Gorilla herauszufinden
Versuchen Sie es mit GUI, PyQt in Python
Onkel SE mit verhärtetem Gehirn versuchte, maschinelles Lernen zu studieren
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Sie, die das Protokoll ausmalen, um es besser sehen zu können
Ein Liner, der JSON formatiert, um die Anzeige zu vereinfachen
Wenn ich versuche, Apache SSL zu erstellen, wird es nicht gestartet.
Ich habe versucht, durch maschinelles Lernen Sätze in den XX-Stil umzuwandeln
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren
Ich habe mit PyQt einen einfachen Texteditor erstellt
Ich habe versucht, eine Site zu erstellen, mit der die aktualisierten Informationen von Azure einfach angezeigt werden können
Ich habe versucht, das automatische Senden einer E-Mail durch Doppelklicken auf das Symbol [Python] zu ermöglichen
Ich habe versucht, Othello AI mit Tensorflow zu machen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Einführung ~
Ich habe versucht, Othello AI mit Tensorflow zu erstellen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Implementierung ~