Рубрики
Без рубрики

Без данных на компьютер компьютер Модель обучения за 10 минут или меньше!

Сначала мы будем соскребать набор данных, используя приложение для консоли Nodejs и Azure Cognitive Service Bing Search to … Теги с узлом, Python, MachineLearning, Jupyter.

Сначала мы будем соскребать набор данных, используя приложение для консоли Nodejs и Azure Cognitive Service Bing Поиск Чтобы создать набор данных изображений в минутах. Затем используйте Лазурный когнитивный сервис Пользовательское видение SDK Для автоматизации создания проекта пользовательского видения, загрузка и тег на ваши изображения, затем тренируйте и протестируйте модель с помощью SDK Python Custy Vision SDK в ноутбуках Jupyter.

Создание поиска Bing API Azure Resource

  • Перейти к portal.azure.com.
  • Выберите «Создать ресурс»
  • Выберите «AI + Машинное обучение»
  • Выберите «поиск Bing»
  • Заполните необходимые поля
  • Выберите «Создать»
  • Когда развертывание добивается успеха, вы получите уведомление в правом верхнем углу.
  • Выберите «Перейти к ресурсу»
  • Выберите «Клавиши» из левой ручной навигации для ресурса.
  • Мы вернемся к Ключи Когда мы готовы называть это из нашего приложения.

Создать пользовательский ресурс Vision в Azure

  • Перейти к portal.azure.com.
  • Выберите «Создать ресурс»
  • Поиск “Пользовательское видение”
  • Выберите «Создать»
  • Заполните необходимые поля
  • Выберите «Создать»
  • Когда развертывание добивается успеха, вы получите уведомление в правом верхнем углу.
  • Выберите «Перейти к ресурсу»
git clone https://github.com/cassieview/ImageScraperAndCustomVisionMagic.git

Теперь мы готовы запустить приложение и соскребать наш набор набора данных, используя API поиска Bing.

  • Обновите ключ в верхней части скрипта к ключу от ресурса поиска Bing Вы создали
const subscriptionKey = "add your key here";
  • Обновите SearchberList В скрипте, чтобы соскрести тип изображений, необходимых для модель пользовательского видения
var searchTermList = ["cardinal", "bluejay"];
  • Чтобы запустить приложение, откройте клемму VS код (Ctrl + рубашка +) и используйте следующую команду
node index.js
  • Вот полный файл сценария index.js:
"use strict";

var https = require("https");
var fs = require("fs");
var download = require("image-downloader");
// Replace the subscriptionKey string value with your valid subscription key.
const subscriptionKey = "add your key here";
// Verify the endpoint URI.  At this writing, only one endpoint is used for Bing
// search APIs.  In the future, regional endpoints may be available.  If you
// encounter unexpected authorization errors, double-check this host against
// the endpoint for your Bing Search instance in your Azure dashboard.
const host = "api.cognitive.microsoft.com";
const path = "/bing/v7.0/images/search";
//filter by license
const filter = "&qft=+filterui:license-L2_L3_L4&FORM=IRFLTR";

var searchAndSaveImages = (search) => {
  console.log("Searching images for: " + search);
  //set global to current search term

  let request_params = {
    method: "GET",
    hostname: host,
    path: path + "?q=" + encodeURIComponent(`${search}`) + filter,
    headers: {
      "Ocp-Apim-Subscription-Key": subscriptionKey,
    },
  };
  var req = https.request(request_params, (response) => {
    console.log("statusCode:", response.statusCode);
    let body = "";
    response.on("data", (d) => {
      body += d;
    });
    response.on("end", () => {
      let imageResults = JSON.parse(body);
      console.log(`Image result count: ${imageResults.value.length}`);
      if (imageResults.value.length > 0) {
        //create directory folder for current search term
        let rootDir = `./birds`;
        let searchDir = `${rootDir}/${search}`;
        let testDir = `${searchDir}/test`;
        let trainDir = `${searchDir}/train`;

        if (!fs.existsSync(rootDir)) {
          fs.mkdirSync(rootDir);
        }
        if (!fs.existsSync(searchDir)) {
          fs.mkdirSync(searchDir);
          fs.mkdirSync(testDir);
          fs.mkdirSync(trainDir);
        }
        //create count so we can split the results between test and train folder
        let count = 0;

        //save image results
        imageResults.value.forEach((imageResult) => {
          let destDir = count % 3 == 0 ? testDir : trainDir;
          let options = {
            url: imageResult.contentUrl,
            dest: `./${destDir}/${imageResult.imageId}.png`,
          };

          download
            .image(options)
            .then(({ filename, image }) => {
              console.log("File saved to", filename);
            })
            .catch((err) => {
              console.error(err);
            });
          count++;
        });
      } else {
        console.log("Couldn't find image results!");
      }
    });
    response.on("error", function (e) {
      console.log("Error: " + e.message);
    });
  });
  req.end();
};

let main = () => {
  //bird species search term list
  var searchTermList = ["cardinal", "bluejay"];
  //loop search terms
  searchTermList.forEach((term) => {
    searchAndSaveImages(term);
  });
};

//check to make sure the subscription key was updated and kick off main func
if (subscriptionKey.length === 32) {
  main();
} else {
  console.log("Invalid Bing Search API subscription key!");
  console.log("Please paste yours into the source code.");
}

  • Теперь у нас есть набор DataSet, разделенный по имени метки с поездом и папкой тестирования для каждого.

Давайте запустим ноутбук Python Jupyter, чтобы создать проект, теги, загружать данные, поезд и протестировать модель. ПРИМЕЧАНИЕ: Пользовательское видение SDK доступно на следующих языках: Python, .NET, NODE, GO и JAVA.

  • Откройте подсказку ANACONDA, перейдите к каталогу ноутбука, клонировали из GitHub и запустите Jupyter ноутбук CMD.
  • Открыть Customfisionsdkupload.ipynb ноутбук

  • Запустите следующую команду для импорта пакета.

!pip install azure-cognitiveservices-vision-customvision
  • Обновите конечную точку и ключ со значениями из ресурса, который вы создали в Azure.
ENDPOINT = "https://.cognitiveservices.azure.com/"

# Replace with a valid key
training_key = ""
publish_iteration_name = "classifyBirdModel"
prediction_resource_id ="/subscriptions//resourceGroups//providers/Microsoft.CognitiveServices/accounts/"
trainer = CustomVisionTrainingClient(training_key, endpoint=ENDPOINT)

# Create a new project
print ("Creating project...")

# Create the project based on if you need a default or compact model. Only the compact models can be exported, default is deployed with custom vision only.
#project = trainer.create_project("Bird Classification")
project = trainer.create_project(name="Bird Classification Compact", domain_id="General (compact)", classification_type="Multiclass", target_export_platforms="Basic platforms")
print("Project created!")

Перейти к customvision.ai Если вы хотите проверить проект, был создан в UI.

  • Далее Создайте список тегов из имени файлов. Вам нужно будет обновить каталог для вашего проекта.
#Create Tag List from folders in bird directory
import os
os.chdir('./bird_photos/train')
tags = [name for name in os.listdir('.') if os.path.isdir(name)]
print(tags)
  • Мы создадим три метода, которые мы будем петлю через каждый тег. Первый создает тег в пользовательском видении.
def createTag(tag):
    result = trainer.create_tag(project.id, tag)
    print(f'{tag} create with id: {result}')
    return result.id
  • Затем он принимает тег и возвращенный идентификатор тега, чтобы создать список загрузки изображения.
def createImageList(tag, tag_id):
    #set directory to current tag
    base_image_url = f"./{tag}/"
    photo_name_list = os.listdir(base_image_url)
    image_list = []
    for file_name in photo_name_list:
        with open(base_image_url+file_name, "rb") as image_contents:
            image_list.append(ImageFileCreateEntry(name=base_image_url+file_name, contents=image_contents.read(), tag_ids=[tag_id]))
    return image_list
  • Затем мы принимаем созданный список изображений и загрузите его на пользовательское видение
def uploadImageList(image_list):  
    upload_result = trainer.create_images_from_files(project.id, images=image_list)
    if not upload_result.is_batch_successful:
        print("Image batch upload failed.")
        for image in upload_result.images:
            print("Image status: ", image.status)
        exit(-1)
  • Теперь, когда мы создали наши методы, давайте Poots через каждый тег и загружать в партии. Это может занять немного, в зависимости от количества изображений и тегов, которые вы используете.
#get images names from directory
for tag in tags:
    tag_id = createTag(tag)
    print(f"tag creation done with tag id {tag_id}")
    image_list = createImageList(tag, tag_id)
    print("image_list created with length " + str(len(image_list)))

    #break list into lists of 25 and upload in batches
    for i in range(0, len(image_list), 25):
        batch = image_list[i:i + 25]
        print(f'Upload started for batch {i} total items {len(batch)} for tag {tag}...')
        uploadImageList(batch)
        print(f"Batch {i} Image upload completed. Total uploaded {len(batch)} for tag {tag}")
  • Обучать модель
import time

print ("Training...")
iteration = trainer.train_project(project.id)
while (iteration.status != "Completed"):
    iteration = trainer.get_iteration(project.id, iteration.id)
    print ("Training status: " + iteration.status)
    time.sleep(5)

  • Опубликовать конечную точку
# The iteration is now trained. Publish it to the project endpoint
trainer.publish_iteration(project.id, iteration.id, publish_iteration_name, prediction_resource_id)
print ("Done!")
  • Теперь мы можем проверить конечную точку. Вам нужно будет обновить ключ и конечную точку для вашего предсказанного конечного точка, которая была создана.
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
from msrest.authentication import ApiKeyCredentials

prediction_key = "
"
prediction_endpoint ="https://.cognitiveservices.azure.com/"
# Now there is a trained endpoint that can be used to make a prediction
predictor = CustomVisionPredictionClient(prediction_key, endpoint=prediction_endpoint)
  • Обновите каталог на образ теста/проверки
#get currect directory
os.getcwd()
#move back
os.chdir("../")
val_image_url = f"./test/American Crow/img.jpg"
  • Проверьте конечную точку и распечатайте результаты
with open(val_image_url, "rb") as image_contents:
    results = predictor.classify_image(project.id, publish_iteration_name, image_contents.read())
        # Display the results.
    for prediction in results.predictions:
        print("\t" + prediction.tag_name +
              ": {0:.2f}%".format(prediction.probability * 100))

... и сделано! Мы сбрасываем данные изображения с поиском Bing и создали модель с Azure Custom Vision SDK!

Оформить заказ Другое Когнитивные услуги и Azure Machine Обучение Чтобы узнать больше о здании AI/ML на Azure!

Оригинал: "https://dev.to/azure/from-no-data-to-computer-vision-machine-learning-model-in-10-minutes-or-less-43g2"