podprojekt indywidualny
BIN
etykiety.h5
42
game.py
@ -6,11 +6,14 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
import astar
|
import astar
|
||||||
import uczenie_kacper as kacper
|
import uczenie_kacper as kacper
|
||||||
|
import uczenie_adamO as adamO
|
||||||
|
|
||||||
smieci_path = ''
|
smieci_path = ''
|
||||||
|
smieci_w_kontenerach = "resources\\smieci w kontenerach"
|
||||||
|
|
||||||
# PODAJ OSOBE PRZED URUCHOMIENIEM (kacper/adamB/adamO)
|
# PODAJ OSOBE PRZED URUCHOMIENIEM (kacper/adamB/adamO)
|
||||||
osoba = 'kacper'
|
osoba = 'adamO'
|
||||||
|
rfc = None
|
||||||
|
|
||||||
if osoba == 'kacper':
|
if osoba == 'kacper':
|
||||||
smieci_path = 'resources/smieci'
|
smieci_path = 'resources/smieci'
|
||||||
@ -18,6 +21,7 @@ elif osoba == 'adamB':
|
|||||||
smieci_path = 'resources/smieci_stare'
|
smieci_path = 'resources/smieci_stare'
|
||||||
else:
|
else:
|
||||||
smieci_path = 'resources/smieci_stare'
|
smieci_path = 'resources/smieci_stare'
|
||||||
|
rfc = adamO.rozpocznijUczenie()
|
||||||
|
|
||||||
pygame.init()
|
pygame.init()
|
||||||
|
|
||||||
@ -101,7 +105,7 @@ def game():
|
|||||||
elif osoba == 'adamB':
|
elif osoba == 'adamB':
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
pass
|
rodzaj = adamO.przewidz(smiec, rfc)
|
||||||
|
|
||||||
if rodzaj == "paper":
|
if rodzaj == "paper":
|
||||||
obiekty["smieciarka"].dodajPapier(smiec)
|
obiekty["smieciarka"].dodajPapier(smiec)
|
||||||
@ -138,8 +142,8 @@ def game():
|
|||||||
obiekty["kontener_plastik"].dodajSmiec(smiec)
|
obiekty["kontener_plastik"].dodajSmiec(smiec)
|
||||||
|
|
||||||
clock.tick(7)
|
clock.tick(7)
|
||||||
|
|
||||||
pygame.quit()
|
pygame.quit()
|
||||||
|
return rfc
|
||||||
|
|
||||||
|
|
||||||
def rysowaniePlanszy(obiekty):
|
def rysowaniePlanszy(obiekty):
|
||||||
@ -195,15 +199,19 @@ def utworzObiekty():
|
|||||||
pygame.display.set_caption("Inteligentna śmieciarka")
|
pygame.display.set_caption("Inteligentna śmieciarka")
|
||||||
|
|
||||||
# kontenery
|
# kontenery
|
||||||
if os.path.exists('resources/smieci w kontenerach'):
|
if not os.path.exists(smieci_w_kontenerach):
|
||||||
shutil.rmtree("resources/smieci w kontenerach")
|
os.makedirs(smieci_w_kontenerach)
|
||||||
os.makedirs('resources/smieci w kontenerach')
|
else:
|
||||||
|
for dir in os.listdir(os.getcwd() + "\\" + smieci_w_kontenerach):
|
||||||
|
files = os.listdir(os.getcwd() + "\\" + smieci_w_kontenerach + "\\" + dir)
|
||||||
|
for file in files:
|
||||||
|
os.remove(os.getcwd() + "\\" + smieci_w_kontenerach + "\\" + dir + "\\" + file)
|
||||||
|
|
||||||
kontener_plastik = modele.Kontener(0, 0, "plastik")
|
kontener_szklo = modele.Kontener(4, 4, "glass")
|
||||||
kontener_plastik.setImage(pygame.image.load(
|
kontener_szklo.setImage(pygame.image.load(
|
||||||
"resources/plansza/pojemnik_plastik.png"))
|
"resources/plansza/pojemnik_szklo.png"))
|
||||||
plansza[0, 0].setJestKontenerem(True)
|
plansza[4, 4].setJestKontenerem(True)
|
||||||
plansza[0, 0].setObiekt(kontener_plastik)
|
plansza[4, 4].setObiekt(kontener_szklo)
|
||||||
|
|
||||||
kontener_metal = modele.Kontener(0, 4, "metal")
|
kontener_metal = modele.Kontener(0, 4, "metal")
|
||||||
kontener_metal.setImage(pygame.image.load(
|
kontener_metal.setImage(pygame.image.load(
|
||||||
@ -211,17 +219,17 @@ def utworzObiekty():
|
|||||||
plansza[0, 4].setJestKontenerem(True)
|
plansza[0, 4].setJestKontenerem(True)
|
||||||
plansza[0, 4].setObiekt(kontener_metal)
|
plansza[0, 4].setObiekt(kontener_metal)
|
||||||
|
|
||||||
kontener_papier = modele.Kontener(4, 0, "papier")
|
kontener_papier = modele.Kontener(4, 0, "paper")
|
||||||
kontener_papier.setImage(pygame.image.load(
|
kontener_papier.setImage(pygame.image.load(
|
||||||
"resources/plansza/pojemnik_papier.png"))
|
"resources/plansza/pojemnik_papier.png"))
|
||||||
plansza[4, 0].setJestKontenerem(True)
|
plansza[4, 0].setJestKontenerem(True)
|
||||||
plansza[4, 0].setObiekt(kontener_papier)
|
plansza[4, 0].setObiekt(kontener_papier)
|
||||||
|
|
||||||
kontener_szklo = modele.Kontener(4, 4, "szklo")
|
kontener_plastik = modele.Kontener(0, 0, "plastic")
|
||||||
kontener_szklo.setImage(pygame.image.load(
|
kontener_plastik.setImage(pygame.image.load(
|
||||||
"resources/plansza/pojemnik_szklo.png"))
|
"resources/plansza/pojemnik_plastik.png"))
|
||||||
plansza[4, 4].setJestKontenerem(True)
|
plansza[0, 0].setJestKontenerem(True)
|
||||||
plansza[4, 4].setObiekt(kontener_szklo)
|
plansza[0, 0].setObiekt(kontener_plastik)
|
||||||
|
|
||||||
# domy
|
# domy
|
||||||
doms_array = ['resources/plansza/domy/dom1.png', 'resources/plansza/domy/dom2.png',
|
doms_array = ['resources/plansza/domy/dom1.png', 'resources/plansza/domy/dom2.png',
|
||||||
|
6
main.py
@ -1,10 +1,10 @@
|
|||||||
import pygame
|
|
||||||
import game
|
import game
|
||||||
|
import uczenie_adamO
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
print("poczatek programu")
|
rfc = game.game()
|
||||||
game.game()
|
uczenie_adamO.wyswietlZdjecia(rfc)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -193,7 +193,6 @@ class Kontener(pygame.sprite.Sprite):
|
|||||||
WIDTH, HEIGHT)
|
WIDTH, HEIGHT)
|
||||||
self.smieci = []
|
self.smieci = []
|
||||||
self.typ = typ
|
self.typ = typ
|
||||||
os.makedirs("resources/smieci w kontenerach/" + self.typ)
|
|
||||||
|
|
||||||
def dodajSmiec(self, smiec):
|
def dodajSmiec(self, smiec):
|
||||||
self.smieci.append(smiec)
|
self.smieci.append(smiec)
|
||||||
|
BIN
resources/smieci w kontenerach/glass/glass138.jpg
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
resources/smieci w kontenerach/glass/glass152.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/glass/glass217.jpg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
resources/smieci w kontenerach/glass/glass256.jpg
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
resources/smieci w kontenerach/glass/glass363.jpg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
resources/smieci w kontenerach/glass/glass367.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/glass/glass424.jpg
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
resources/smieci w kontenerach/glass/glass441.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
resources/smieci w kontenerach/glass/glass447.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/glass/glass464.jpg
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
resources/smieci w kontenerach/glass/glass55.jpg
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
resources/smieci w kontenerach/metal/metal131.jpg
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
resources/smieci w kontenerach/metal/metal227.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/metal/metal273.jpg
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
resources/smieci w kontenerach/metal/metal361.jpg
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
resources/smieci w kontenerach/metal/metal53.jpg
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
resources/smieci w kontenerach/metal/metal77.jpg
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
resources/smieci w kontenerach/metal/metal93.jpg
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
resources/smieci w kontenerach/paper/paper111.jpg
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
resources/smieci w kontenerach/paper/paper114.jpg
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
resources/smieci w kontenerach/paper/paper175.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/paper/paper204.jpg
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
resources/smieci w kontenerach/paper/paper233.jpg
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
resources/smieci w kontenerach/paper/paper235.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
resources/smieci w kontenerach/paper/paper242.jpg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
resources/smieci w kontenerach/paper/paper301.jpg
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
resources/smieci w kontenerach/paper/paper334.jpg
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
resources/smieci w kontenerach/paper/paper498.jpg
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
resources/smieci w kontenerach/paper/paper507.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
resources/smieci w kontenerach/paper/paper516.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
resources/smieci w kontenerach/paper/paper527.jpg
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
resources/smieci w kontenerach/paper/paper590.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
resources/smieci w kontenerach/paper/paper67.jpg
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
resources/smieci w kontenerach/paper/paper76.jpg
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
resources/smieci w kontenerach/plastic/paper263.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic110.jpg
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic113.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic132.jpg
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic151.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic168.jpg
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic191.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic215.jpg
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic219.jpg
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic312.jpg
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic319.jpg
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic34.jpg
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic368.jpg
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic389.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic403.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic408.jpg
Normal file
After Width: | Height: | Size: 27 KiB |
@ -11,19 +11,19 @@ h5_dane = 'parametry_zdjec.h5'
|
|||||||
h5_etykiety = 'etykiety.h5'
|
h5_etykiety = 'etykiety.h5'
|
||||||
|
|
||||||
|
|
||||||
def hu_moments(zdj):
|
def wyznaczHuMomenty(zdj):
|
||||||
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
|
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
|
||||||
momenty = cv2.HuMoments(cv2.moments(zdj)).flatten()
|
momenty = cv2.HuMoments(cv2.moments(zdj)).flatten()
|
||||||
return momenty
|
return momenty
|
||||||
|
|
||||||
|
|
||||||
def haralick(zdj):
|
def wyznaczHaralick(zdj):
|
||||||
szare_zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
|
szare_zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
|
||||||
haralick = mahotas.features.haralick(szare_zdj).mean(axis=0)
|
haralick = mahotas.features.haralick(szare_zdj).mean(axis=0)
|
||||||
return haralick
|
return haralick
|
||||||
|
|
||||||
|
|
||||||
def histogram(zdj, mask=None):
|
def wyznaczHistogram(zdj, mask=None):
|
||||||
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2HSV)
|
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2HSV)
|
||||||
hist = cv2.calcHist([zdj], [0, 1, 2], mask, [8, 8, 8], [0, 256, 0, 256, 0, 256])
|
hist = cv2.calcHist([zdj], [0, 1, 2], mask, [8, 8, 8], [0, 256, 0, 256, 0, 256])
|
||||||
cv2.normalize(hist, hist)
|
cv2.normalize(hist, hist)
|
||||||
@ -46,11 +46,11 @@ for klasa in klasy:
|
|||||||
zdj = cv2.resize(zdj, rozmiar_zdj) # zmiana rozmiaru
|
zdj = cv2.resize(zdj, rozmiar_zdj) # zmiana rozmiaru
|
||||||
|
|
||||||
# wyznaczanie parametrow zdjecia
|
# wyznaczanie parametrow zdjecia
|
||||||
fv_hu_moments = hu_moments(zdj)
|
momenty = wyznaczHuMomenty(zdj)
|
||||||
fv_haralick = haralick(zdj)
|
haralick = wyznaczHaralick(zdj)
|
||||||
fv_histogram = histogram(zdj)
|
histogram = wyznaczHistogram(zdj)
|
||||||
|
|
||||||
wiersz = np.hstack([fv_hu_moments, fv_histogram, fv_haralick]) # ustaw poziomo, jeden za drugim
|
wiersz = np.hstack([momenty, histogram, haralick]) # ustaw poziomo, jeden za drugim
|
||||||
etykiety_zdj.append(klasa)
|
etykiety_zdj.append(klasa)
|
||||||
dane.append(wiersz)
|
dane.append(wiersz)
|
||||||
|
|
||||||
|
129
uczenie_adamO.py
@ -0,0 +1,129 @@
|
|||||||
|
import h5py
|
||||||
|
import numpy as np
|
||||||
|
import os
|
||||||
|
import glob
|
||||||
|
import cv2
|
||||||
|
import warnings
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.ensemble import RandomForestClassifier
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import mahotas
|
||||||
|
import random
|
||||||
|
from math import ceil
|
||||||
|
|
||||||
|
warnings.filterwarnings('ignore')
|
||||||
|
|
||||||
|
rozmiar_zbioru_testowego = 0.20
|
||||||
|
katalog_uczacy = "resources\\smieci_stare"
|
||||||
|
katalog_testujacy = "resources\\smieci w kontenerach"
|
||||||
|
h5_parametry = 'parametry_zdjec.h5'
|
||||||
|
h5_etykiety = 'etykiety.h5'
|
||||||
|
rozmiar_zdj = tuple((500, 500))
|
||||||
|
|
||||||
|
|
||||||
|
def wyznaczHuMomenty(zdj):
|
||||||
|
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
|
||||||
|
momenty = cv2.HuMoments(cv2.moments(zdj)).flatten()
|
||||||
|
return momenty
|
||||||
|
|
||||||
|
|
||||||
|
def wyznaczHistogram(zdj, mask=None):
|
||||||
|
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2HSV)
|
||||||
|
hist = cv2.calcHist([zdj], [0, 1, 2], mask, [8, 8, 8], [0, 256, 0, 256, 0, 256])
|
||||||
|
cv2.normalize(hist, hist)
|
||||||
|
return hist.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
def wyznaczHaralick(zdj):
|
||||||
|
szare_zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
|
||||||
|
haralick = mahotas.features.haralick(szare_zdj).mean(axis=0)
|
||||||
|
return haralick
|
||||||
|
|
||||||
|
|
||||||
|
def rozpocznijUczenie():
|
||||||
|
klasy = os.listdir(katalog_uczacy)
|
||||||
|
klasy.sort()
|
||||||
|
|
||||||
|
h5f_parametry = h5py.File(h5_parametry, 'r')
|
||||||
|
h5f_etykiety = h5py.File(h5_etykiety, 'r')
|
||||||
|
|
||||||
|
dane = h5f_parametry['dataset_1']
|
||||||
|
etykiety = h5f_etykiety['dataset_1']
|
||||||
|
|
||||||
|
dane = np.array(dane)
|
||||||
|
etykiety = np.array(etykiety)
|
||||||
|
|
||||||
|
h5f_parametry.close()
|
||||||
|
h5f_etykiety.close()
|
||||||
|
|
||||||
|
(uczenieDane, testowanieDane, uczenieEtykiety, testowanieEtykiety) = train_test_split(np.array(dane),
|
||||||
|
np.array(etykiety),
|
||||||
|
test_size=rozmiar_zbioru_testowego)
|
||||||
|
|
||||||
|
rfc = RandomForestClassifier(max_depth=15, n_jobs=4, random_state=1)
|
||||||
|
rfc.fit(uczenieDane, uczenieEtykiety)
|
||||||
|
print("uzyskana skutecznosc: ", rfc.score(testowanieDane, testowanieEtykiety))
|
||||||
|
return rfc
|
||||||
|
|
||||||
|
|
||||||
|
def przewidz(zdjecie, rfc):
|
||||||
|
klasy = os.listdir(katalog_uczacy)
|
||||||
|
klasy.sort()
|
||||||
|
zdj = cv2.imread(zdjecie)
|
||||||
|
zdj = cv2.resize(zdj, rozmiar_zdj)
|
||||||
|
|
||||||
|
# wyznaczanie parametrow zdjecia
|
||||||
|
momenty = wyznaczHuMomenty(zdj)
|
||||||
|
haralick = wyznaczHaralick(zdj)
|
||||||
|
histogram = wyznaczHistogram(zdj)
|
||||||
|
|
||||||
|
wiersz = np.hstack([momenty, histogram, haralick]) # ustaw poziomo, jeden za drugim
|
||||||
|
wiersz = wiersz.reshape(1, -1) # zmniejsz wymiar z 2 do 1
|
||||||
|
przewidywany_typ = rfc.predict(wiersz)[0] # zwraca wartosc 0,1,2,3
|
||||||
|
return klasy[przewidywany_typ] # zwraca glass,metal,paper,plastic
|
||||||
|
|
||||||
|
|
||||||
|
def wyswietlZdjecia(rfc):
|
||||||
|
if rfc is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
path = os.getcwd()
|
||||||
|
|
||||||
|
klasy = os.listdir(katalog_testujacy)
|
||||||
|
klasy.sort()
|
||||||
|
wszystkie_pliki = []
|
||||||
|
|
||||||
|
for dir in os.listdir(katalog_testujacy):
|
||||||
|
os.chdir(path + "\\" + katalog_testujacy + "\\" + dir)
|
||||||
|
pliki = glob.glob('*.jpg')
|
||||||
|
for i in range(len(pliki)):
|
||||||
|
pliki[i] = dir + "\\" + pliki[i]
|
||||||
|
wszystkie_pliki.append(pliki)
|
||||||
|
os.chdir(path)
|
||||||
|
|
||||||
|
wszystkie_pliki = sum(wszystkie_pliki, [])
|
||||||
|
rozmiar = ceil(0.25 * len(wszystkie_pliki))
|
||||||
|
wybrane_zdjecia = random.sample(wszystkie_pliki, k=rozmiar)
|
||||||
|
print("ilosc wybranych zdjec: ",len(wybrane_zdjecia))
|
||||||
|
|
||||||
|
for i in wybrane_zdjecia:
|
||||||
|
zdjecie = cv2.imread(path + "\\" + katalog_testujacy + "\\" + i)
|
||||||
|
zdjecie = cv2.resize(zdjecie, rozmiar_zdj)
|
||||||
|
|
||||||
|
# wyznaczanie parametrow zdjecia
|
||||||
|
momenty = wyznaczHuMomenty(zdjecie)
|
||||||
|
haralick = wyznaczHaralick(zdjecie)
|
||||||
|
histogram = wyznaczHistogram(zdjecie)
|
||||||
|
|
||||||
|
wiersz = np.hstack([momenty, histogram, haralick]) # ustaw poziomo, jeden za drugim
|
||||||
|
wiersz = wiersz.reshape(1, -1) # zmniejsz wymiar z 2 do 1
|
||||||
|
|
||||||
|
przewidywany = rfc.predict(wiersz)[0]
|
||||||
|
prawdopodobienstwo = rfc.predict_proba(wiersz)
|
||||||
|
|
||||||
|
cv2.putText(zdjecie, klasy[przewidywany], (3, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), thickness=3)
|
||||||
|
cv2.putText(zdjecie, str(prawdopodobienstwo), (3, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), thickness=1)
|
||||||
|
cv2.putText(zdjecie, i, (3, 460), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), thickness=2)
|
||||||
|
|
||||||
|
plt.imshow(cv2.cvtColor(zdjecie, cv2.COLOR_BGR2RGB))
|
||||||
|
plt.show()
|