Сначала мы будем соскребать набор данных, используя приложение для консоли Nodejs и Azure Cognitive Service Bing Поиск Чтобы создать набор данных изображений в минутах. Затем используйте Лазурный когнитивный сервис Пользовательское видение SDK Для автоматизации создания проекта пользовательского видения, загрузка и тег на ваши изображения, затем тренируйте и протестируйте модель с помощью SDK Python Custy Vision SDK в ноутбуках Jupyter.
- VS код
- Nodejs
- Анаконда
- Создать бесплатный Azure Account
Создание поиска 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"