Computer vision
Scarica zip esercizi
Introduzione
ATTENZIONE: Ciò che segue è solo una bozza MOLTO IN-PROGRESS !!!!!
Installazione
Se hai con Anaconda:
apri Anaconda Navigator
seleziona tab
Environments
sulla sinistraseleziona l’ambiente (se non hai idea di cosa scegliere, seleziona
base (root)
)sulla destra, seleziona
Not installed
cerca
opencv
e installalo
Se hai Linux / Ubuntu:
sudo apt update
sudo apt install python3-opencv
Riferimenti
Mettiamo qua una lista di riferimenti per lavorare con Python e le immagini:
Che fare
scompatta lo zip in una cartella, dovresti ottenere qualcosa del genere:
computer-vision
computer-vision.ipynb
computer-vision-sol.ipynb
jupman.py
ATTENZIONE: Per essere visualizzato correttamente, il file del notebook DEVE essere nella cartella szippata.
apri il Jupyter Notebook da quella cartella. Due cose dovrebbero aprirsi, prima una console e poi un browser. Il browser dovrebbe mostrare una lista di file: naviga la lista e apri il notebook
computer-vision.ipynb
Prosegui leggendo il file degli esercizi, ogni tanto al suo interno troverai delle scritte ESERCIZIO, che ti chiederanno di scrivere dei comandi Python nelle celle successive.
Scorciatoie da tastiera:
Per eseguire il codice Python dentro una cella di Jupyter, premi
Control+Invio
Per eseguire il codice Python dentro una cella di Jupyter E selezionare la cella seguente, premi
Shift+Invio
Per eseguire il codice Python dentro una cella di Jupyter E creare una nuova cella subito dopo, premi
Alt+Invio
Se per caso il Notebook sembra inchiodato, prova a selezionare
Kernel -> Restart
1. Anonimizzazione facce
Proponiamo un semplice programmino per anonimizzare volti.
Facendo partire la cella seguente, dovrebbe caricare una foto, mostrare i rettangoli sulle facce e anonimizzarla, salvandola in 'results/simple_output.png'
. Non è detto che trovi tutti i volti, potreste dover aggiustare dei parametri. Alcune foto di test sono fornite nella cartella images
, di quelle nei campi da calcio a seconda della foto i volti vengono riconosciuti oppure no.
[1]:
# A simple algorithm for face detection which also allows the user to automatically hide the detected faces. Moreover, in the case the detection missed some face, those can be manually selected and obscured.
# At the moment the implemented hiding methods are four:
# - *Blur*
# - *Pixel Shuffle*
# - *Image Swap*
# - *Negative*
import numpy as np
import cv2
# fonte: https://en.wikipedia.org/wiki/File:Amateur_Football_in_Kilkenny-Ireland.jpg
#filename = 'images/football/Amateur_Football_in_Kilkenny-Ireland.jpg'
# fonte: https://commons.wikimedia.org/wiki/File:Ronaldo_-_Manchester_United_vs_Chelsea.jpg
#filename = 'images/football/800px-Ronaldo_-_Manchester_United_vs_Chelsea.jpg'
# fonte: https://commons.wikimedia.org/wiki/File:6_a_side_football_-_5_a_side_football_-_7_a_side_football_-_Ballerz_league.jpg
#filename = 'images/football/6_a_side_football_-_5_a_side_football_-_7_a_side_football_-_Ballerz_league.jpg'
# fonte: https://commons.wikimedia.org/wiki/File:2018_IBSA_Blind_Football_Madrid_Argentina.JPG
filename = 'images/football/800px-2018_IBSA_Blind_Football_Madrid_Argentina.jpeg'
#filename = "images/square_faces.jpg"
grrr = "images/grrr_reaction.png"
# Loading image
img_raw = cv2.imread(filename)
img_raw_copy = cv2.imread(filename)
grrr_image = cv2.imread(grrr)
# print(img_raw[1:10,1:10])
# Converting image to grey-scale
img_raw_grey = cv2.cvtColor(img_raw, cv2.COLOR_BGR2GRAY)
# Create and load the CascadeClassifier for face detection
haar_cascade_face = cv2.CascadeClassifier()
loaded = haar_cascade_face.load('resources/haarcascade_frontalface_default.xml')
'''
Returns a rectangle around the face.
@param scale_factor: compensate the distance of the face from the camera
@param minNeighbors: number of neighbors for a rectangle to be considered as a face
'''
# scaleFactor: 1 - 1.5 2.0 massimo
# minNeighbors = tra 1 e 6 NON è il numero di facce
faces_rects = haar_cascade_face.detectMultiScale(img_raw_grey, scaleFactor = 1.2, minNeighbors = 3);
print('facce trovate: ', len(faces_rects))
for (x,y,w,h) in faces_rects:
# print(x, y, w,h)
cv2.rectangle(img_raw_copy, (x, y), (x+w, y+h), (0, 255, 0), 2)
# UNCOMMENT THE DESIRED HIDING METHOD
# 1] BLUR
img_raw[y:y+h, x:x+w] = cv2.blur(img_raw[y:y+h, x:x+w], (40, 40))
# 2] SHUFFLING PIXELS
# np.random.shuffle(img_raw[y:y+h, x:x+w].flat)
# 3] NEGATIVE
#img_raw[y:y+h, x:x+w] = cv2.bitwise_not(img_raw[y:y+h, x:x+w])
# 4] EMOJI
#grrr_resize = cv2.resize(grrr_image, (w, h))
#img_raw[y:y+h, x:x+w] = grrr_resize
pass
cv2.namedWindow("img_copy")
cv2.imshow("img_copy", img_raw_copy)
# togli i commenti per permettere all'utente di selezionare manualmente un riquadro attorno al volto
#fromCenter = False
#roi = cv2.selectROI("", img_raw, fromCenter)
#img_raw[roi[1]:roi[1]+roi[3], roi[0]:roi[0]+roi[2]] = cv2.blur(img_raw[roi[1]:roi[1]+roi[3], roi[0]:roi[0]+roi[2]], (40, 40))
out_filename = 'results/simple_output.png'
cv2.imwrite('results/simple_output.png', img_raw)
print("immagine anonimizzata salvata in: " + out_filename)
# mostra l'immagine in Jupyter:
# ATTENZIONE: a volte blocca l'esecuzione della cella e bisogna far ripartire il kernel Jupyter.
#cv2.namedWindow("img")
#cv2.imshow("img", img_raw)
facce trovate: 3
immagine anonimizzata salvata in: results/simple_output.png
[2]:
[ ]: