fbpixel
Étiquettes : , ,
4
(1)

Pour entrainer un réseau de neurone à la détection et à la reconnaissance d’objet, il faut une banque d’image sur laquelle travailler. Nous allons voir comment télécharger un grand nombre d’images à partir de Google avec Python. Pour pouvoir entrainer un réseau de neurones, il est nécessaire d’avoir un grand nombre de données. Plus il y a de données, meilleur sera l’entrainement. Dans notre cas nous souhaitons entrainer un réseau de neurones à reconnaitre un objet en particulier. Pour cela, nous créons un script Python qui va venir télécharger les fichiers sur internet et les placer dans un dossier.

Configurer Python3

Téléchargez les librairies Selenium et OpenCV (optional)

python3 -m pip install selenium
python3 -m pip install opencv-python

télécharger le fichier geckodriver

N.B.: Nous n’utilisons la librairie OpenCV seulement pour vérifier que OpenCV peut ouvrir et utiliser les images afin de ne pas encombrer le dossier inutilement

Script Python de téléchargement d’image

Ce script lance une recherche sur Google Image et enregistre les images trouvées dans le dossier spécifié pour la banque d’images.

N.B.: N’oubliez pas de préciser le chemin du fichier geckodriver GECKOPATH, le chemin vers le dossier de destination et la mot-clés pour la recherche Google.

import sys
import os
import time 

#Imports Packages
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import TimeoutException,WebDriverException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

import cv2

########################################################################
GECKOPATH = "PATH-TO-GECKODRIVER"
parent_dir = "PATH-TO-FOLDER"
search='coffee mug'
########################################################################

# path 
folderName=search.replace(" ","_")
directory = os.path.join(parent_dir, folderName,'img') 
   
# Create the directory 
try: 
	if not os.path.exists(directory):
		os.makedirs(directory) #os.mkdir(directory)
except OSError as error: 
	print("ERROR : {}".format(error)) 


sys.path.append(GECKOPATH)  
#Opens up web driver and goes to Google Images
browser = webdriver.Firefox()#Firefox(firefox_binary=binary)

#load google image
browser.get('https://www.google.ca/imghp?hl=en')

delay = 10 # seconds
try:
	btnId="L2AGLb"
	myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID , btnId))) #id info-address-place-wrapper 
	elm=browser.find_element_by_id(btnId)
	elm.click()
	print("Popup is passed!")
except TimeoutException as e:
	print("Loading took too much time!")



# get and fill search bar
box = browser.find_element_by_xpath('//*[@id="sbtc"]/div/div[2]/input')
box.send_keys(search)
box.send_keys(Keys.ENTER)


#Will keep scrolling down the webpage until it cannot scroll no more
last_height = browser.execute_script('return document.body.scrollHeight')
while True:
	browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
	time.sleep(5)
	new_height = browser.execute_script('return document.body.scrollHeight')
	try:
		browser.find_element_by_xpath('//*[@id="islmp"]/div/div/div/div/div[5]/input').click()
		time.sleep(5)
	except:
		print("button not found")
		pass
		
	if new_height == last_height:
		break
	last_height = new_height
	
imgList=[]
for i in range(1, 1000):
	try:
		browser.find_element_by_xpath('//*[@id="islrg"]/div[1]/div['+str(i)+']/a[1]/div[1]/img').screenshot(directory+'\{}.png'.format(i))
		imgList.add(directory+'\{}.png'.format(i))
		
	except:
		pass
browser.quit()
 
#Test images with OpenCV
for img in imgList:
	try:   
		cv2.imread(img)
	except Exception as e:
		os.remove(img)
		print("remove {}".format(img))

BONUS: Gestion d’une popup

Dans le code j’ai rajouté une commande permettant de gérer la popup qui apparait à l’ouverture de la page internet. Il va attendre que le bouton avec le bon identifiant soit chargé avant d’appuyer dessus.

delay = 10 # seconds
try:
	btnId="L2AGLb"
	myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID , btnId))) #id info-address-place-wrapper 
	elm=browser.find_element_by_id(btnId)
	elm.click()
	print("Popup is passed!")
except TimeoutException as e:
	print("Loading took too much time!")

Résultat

Le script va parcourir les résultats de Google et faire des captures d’écran de chaque image pour les placer dans notre base de données et former une banque d’images.

Vous avez désormais une banque d’image que vous pouvez utiliser pour de la reconnaissance visuelle par exemple ou faire du traitement d’image.

Applications

  • Développer des algorithmes de traitement d’image
  • Entrainer des réseaux de neurones à la détection et reconnaissance d’objet

Sources

How useful was this post?

Click on a star to rate it!

Average rating 4 / 5. Vote count: 1

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?