En Temel Yapılarla Görüntü Tespiti (Image Detection — Object Detection)

Bayram EKER
4 min readMar 7, 2021

--

kodlar en altta

OpenCV, bilgisayarla görme, makine öğrenimi ve görüntü işleme için çok büyük bir açık kaynak kitaplığıdır. Günümüz sistemlerinde çok önemli olan gerçek zamanlı İşlemlerde önemli bir rol oynamaktadır. Bunu kullanarak, nesneleri, yüzleri ve hatta bir insanın el yazısını tanımlamak için görüntüleri ve videoları işleyebilirsiniz. Şimdi sizlerle temelden bize sunulan özellikleri inceleyeceğiz.

Nesne Algılama, görüntü ve videolardaki nesnelerin örneklerini kütüphaneden aldığı verilerle karşılaştırarak tanımlamasıdır.

Bilgisayarla görme, görüntü işleme ve derin öğrenmeyle ilgili bir bilgisayar teknolojisidir. Bu makalede “haar” basamakları(Cascades) olarak bilinen bir özellik kullanarak nesne algılama yapacağız.

Positive images — Bu görüntüler, sınıflandıran kişinin tanımlamasını istediğimiz görüntüleri içerir.

Negative Images — Algılamak istediğimiz nesneyi içermeyen diğer her şeyin görüntüleri.

Şimdi Python ile projemize başlayalım. Ben cmd üzerinden işlemlerimi yapacağım siz isterseniz dosyalarınızı kendiniz oluşturabilirsiniz.

öncelikler komut satırına - > cd /

yani kök klasöre gidiyoruz bende kök klasör C:

C:\>mkdir opencv_detect

opencv_detect isimli dosyamı oluşturdum. içerisine girdikten sonra kodlamalara başlayacağım.

C:\>cd opencv_detect

şimdi gerekli kütüphanelere bakalım.

pip install opencv-python

kurduktan sonra bunu da kuruyoruz.

pip install matplotlib

Cascade dosyasını indirmek için tıklayın.

Yapacağımız projede resim üzerinden gideceğimiz için XML dosyasını ve PNG görüntüsünü Python komut dosyanızla aynı klasöre koyun.

import cv2from matplotlib import pyplot as plt# Resmimizi Aldık, img değişkenine koydukimg = cv2.imread("resim.jpg")# OpenCV, görüntüleri BRG olarak açar
# Ancak RGB olarak işlem yapmamız gerekir
# Gri tonlamaya da ihtiyacımız var
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# Çevreyi Oluşturduk
# resimi alıp imsho ile gösterdik
plt.subplot(1, 1, 1)plt.imshow(img_rgb)plt.show()

kod çıktısı :

Şimdi nesne tespiti için kodlarımızı tasarlayacağız

import cv2 
from matplotlib import pyplot as plt
# Resmimizi Aldık, img değişkenine koyduk
img = cv2.imread("resim.jpg")
# OpenCV, görüntüleri BRG olarak açar
# Ancak RGB olarak işlem yapmamız gerekir
# Gri tonlamaya da ihtiyacımız var
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# MinSize kullanın çünkü
# küçük ölçekli verilerde gecikme ve durma fazla olmaz
stop_data = cv2.CascadeClassifier('stop_data.xml')
found = stop_data.detectMultiScale(img_gray,
minSize =(20, 20))
# İşaret yoksa hiçbir şey yapma
amount_found = len(found)
if amount_found != 0:

# Resimde birden fazla işaret olabilir
for (x, y, width, height) in found:

# Tanınan her şeklin etrafına yeşil bir dikdörtgen çizeriz
cv2.rectangle(img_rgb, (x, y),
(x + height, y + width),
(0, 255, 0), 5)

# Resmin ortamını oluşturur ve gösterir
plt.subplot(1, 1, 1)
plt.imshow(img_rgb)
plt.show()

Kod Çıktısı :

Algoritmamızı biraz daha değiştirip görüntü içerisindeki bir nesneyi yakalamak adına kendi basit algoritmamızı geliştirelim. Yani lokalde olan bir verimizi fotoğrafımızda arayarak resim içinden onu bulmaya çalışalım

Şekil Aranan

Örneğin kalabalık içinden bir adamı canlı olarak arıyoruz ve anlık resim taraması ile kişiyi takip edeceğiz bunun için bize kişinin özellikleri ve daha önce onun adına kayıt edilmiş veri bankası gerekiyor.

Aranılan Resim

biz bu noktada en temel yöntemi kullanacağız resim içinden seçtiğimiz kareyi bulmasını isteyeceğiz onun için kodlarımıza bakalım

kütüphane olarak cv2 ve numpy yeterli

import cv2
import numpy as np

Şimdi aradığımız kareyi seçiyoruz yani şekil aranan isimli yukarıdaki resim

aranan_resim= cv2.imread('images/a.jpg')
cv2.imshow("Aranan Resim", aranan_resim)
cv2.waitKey(0)

Aranan karemize uygun bir kutu çiziyoruz

height, width = aranan_resim.shape[:2]

Şimdi ise aranılan kareyi aradığımız ana resmi sisteme tanımlayalım

aranilan_resim_org= cv2.imread('images/aa.jpg')
cv2.imshow("Original Image", aranilan_resim_org)
cv2.waitKey(0)

Resimler üzerinde tarama ve scale için gray scale uygulayalım

gray_template = cv2.cvtColor(aranan_resim, cv2.COLOR_BGR2GRAY)
gray_original = cv2.cvtColor(aranilan_resim_org, cv2.COLOR_BGR2GRAY)

Aranılan resim ve aranan resim için karşılaştırma işlemi yapalım

match = cv2.matchTemplate(gray_original, gray_template, cv2.TM_CCOEFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(match)

Bulduğumuz alanı büyük resimde kırmızı içerisine çerçeveye alalım

top_left = max_loc
bottom_right = (top_left[0]+height, top_left[1]+width)
cv2.rectangle(aranilan_resim_org, top_left, bottom_right, (0,0,255), 5)

Son olarak ekrana bulduğumuz alanı koyalım :

cv2.imshow("Bulunan Kare", aranilan_resim_org)
cv2.waitKey(0)
cv2.destroyAllWindows()

Kod Çıktımız :

İlk olarak ekrana aradığımız kare geldi ve bunu kapatalım yeni frame için

bunu kapattığımızda ise ana resmimiz ekrana geldi

son olarak bu resmi kapattığımızda ise işaretlenmiş olarak aradığımız alanı ekrana verdik

KODLAR

--

--

No responses yet