Ressources pour obtenir des ensembles de données d'images que vous ne connaissez peut-être pas

Bonjour, Habr! Comme vous le savez, les ensembles de données sont le carburant de l'apprentissage automatique. Des sites tels que Kaggle, ImageNet, Google Dataset Search et Visual Genom sont les sources pour obtenir des ensembles de données que les gens utilisent généralement et qui sont largement entendus, mais il est assez rare de trouver des personnes qui utilisent des sites tels que Bing Image Search pour trouver des données. et Instagram. Par conséquent, dans cet article, je vais vous montrer à quel point il est facile d'obtenir des données à partir de ces sources en écrivant deux petits programmes en Python.



Recherche d'images Bing



La première chose à faire est de suivre le lien, de cliquer sur le bouton Obtenir la clé API et de vous inscrire en utilisant l'un des réseaux sociaux proposés (Microsoft, Facebook, LinkedIn ou GitHub). Une fois le processus d'enregistrement terminé, vous serez redirigé vers la page Vos API, qui devrait ressembler (ce qui est couvert, ce sont vos clés API):



1



Passons à l'écriture de code. Nous importons les bibliothèques requises:



from requests import exceptions
import requests
import cv2
import os


Ensuite, vous devez spécifier certains paramètres: clé API (vous devez choisir l'une des deux clés proposées), spécifier les conditions de recherche, le nombre maximum d'images par requête, et également définir l'URL finale:



subscription_key = "YOUR_API_KEY"
search_terms = ['girl', 'man']
number_of_images_per_request = 100
search_url = "https://api.cognitive.microsoft.com/bing/v7.0/images/search"


Maintenant, écrivons trois petites fonctions qui:

1) Créez un dossier séparé pour chaque terme de recherche:



def create_folder(name_folder):
    path = os.path.join(name_folder)

    if not os.path.exists(path):
        os.makedirs(path)
        print('------------------------------')
        print("create folder with path {0}".format(path))
        print('------------------------------')

    else:
        print('------------------------------')
        print("folder exists {0}".format(path))
        print('------------------------------')
        return path


2) Renvoie le contenu de la réponse du serveur en JSON:



def get_results():
    search = requests.get(search_url, headers=headers, 
                          params=params)
    search.raise_for_status()
    return search.json()


3) :



def write_image(photo):
    r = requests.get(v["contentUrl"], timeout=25)
    f = open(photo, "wb")
    f.write(r.content)
    f.close()


:



for category in search_terms:
    folder = create_folder(category)
    headers = {"Ocp-Apim-Subscription-Key": subscription_key}
    params = {"q": category, "offset": 0,
              "count": number_of_images_per_request}
    results = get_results()
    total = 0

    for offset in range(0, results["totalEstimatedMatches"],
                        number_of_images_per_request):
        params["offset"] = offset
        results = get_results()

        for v in results["value"]:
            try:
                ext = v["contentUrl"][v["contentUrl"].
                                          rfind("."):]
                photo = os.path.join(category, "{}{}".
                                     format('{}'.format(category)
                                     + str(total).zfill(6), ext))

                write_image(photo)
                print("saving: {}".format(photo))
                image = cv2.imread(photo)
                if image is None:
                    print("deleting: {}".format(photo))
                    os.remove(photo)
                    continue

                total += 1

            except Exception as e:
                if type(e) in EXCEPTIONS:
                    continue


Instagram



:



from selenium import webdriver
from time import sleep
import pyautogui
from bs4 import BeautifulSoup
import requests
import shutil


, selenium, geckodriver. , , #bird. 26 . , geckodriver, , :



browser=webdriver.Firefox(executable_path='/path/to/geckodriver')
browser.get('https://www.instagram.com/explore/tags/bird/')


6 , :

1) . login.send_keys(' ') password.send_keys(' ') :



def enter_in_account():
    button_enter = browser.find_element_by_xpath("//*[@class='sqdOP  L3NKy   y3zKF     ']")
    button_enter.click()
    sleep(2)
    login = browser.find_element_by_xpath("//*[@class='_2hvTZ pexuQ zyHYP']")
    login.send_keys('')
    sleep(1)
    password = browser.find_element_by_xpath("//*[@class='_2hvTZ pexuQ zyHYP']")
    password.send_keys('')
    enter = browser.find_element_by_xpath(
        "//*[@class='                    Igw0E     IwRSH      eGOV_         _4EzTm                                                                                                              ']")
    enter.click()
    sleep(4)
    not_now_button = browser.find_element_by_xpath("//*[@class='sqdOP yWX7d    y3zKF     ']")
    not_now_button.click()
    sleep(2)


2) :



def find_first_post():
    sleep(3)
    pyautogui.moveTo(450, 800, duration=0.5)
    pyautogui.click()


, , , - , , , moveTo() .



3) :



def get_url():
    sleep(0.5)
    pyautogui.moveTo(1740, 640, duration=0.5)
    pyautogui.click()
    return browser.current_url


, : .



4) html- :



def get_html(url):
    r = requests.get(url)
    return r.text


5) URL :



def get_src(html):
    soup = BeautifulSoup(html, 'lxml')
    src = soup.find('meta', property="og:image")
    return src['content']


6) . filename :



def download_image(image_name, image_url):
    filename = 'bird/bird{}.jpg'.format(image_name)
    r = requests.get(image_url, stream=True)

    if r.status_code == 200:
        r.raw.decode_content = True
        with open(filename, 'wb') as f:
            shutil.copyfileobj(r.raw, f)
        print('Image sucessfully Downloaded')

    else:
        print('Image Couldn\'t be retreived')




. , , , , . , pyautogui, , , . , , .

, Ubuntu 18.04. GitHub.




All Articles