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!
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
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