Skip to content

Commit

Permalink
add AI
Browse files Browse the repository at this point in the history
  • Loading branch information
ebubekirdgn committed Oct 6, 2024
1 parent 05e81bb commit 0186c95
Show file tree
Hide file tree
Showing 44 changed files with 12,203 additions and 0 deletions.
Binary file added 24-AI/yoloV10/0.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
59 changes: 59 additions & 0 deletions 24-AI/yoloV10/a.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
from ultralytics import YOLOv10
import cv2
import os

# YOLOv10 modelini yükle
model = YOLOv10('C:\\Users\\DoganPc\\Desktop\\Yolo\\runs\\detect\\train3\\weights\\best.pt')

# Giriş resmi ve boyutları
input_image_path = 'C:\\Users\\DoganPc\\Desktop\\Yolo\\test\\202.JPG'
input_image = cv2.imread(input_image_path)
input_image_height, input_image_width, _ = input_image.shape

# Çerçeve boyutları
frame_size = 128
overlap = 0 # Örtüşme miktarı olmadığı için 0

# Kayıt klasörünü oluştur
output_dir = './result'
os.makedirs(output_dir, exist_ok=True)

# Toplam soğan sayısını saklamak için değişkeni tanımla
total_onion_count = 0

# Her bir çerçeve için tespit sonuçlarını al ve soğan sayılarını topla
for i in range(0, input_image_height, frame_size):
for j in range(0, input_image_width, frame_size):
# Çerçeve başlangıç ve bitiş koordinatları
start_x = j
start_y = i
end_x = min(start_x + frame_size, input_image_width)
end_y = min(start_y + frame_size, input_image_height)

# Çerçeve resmini al
frame = input_image[start_y:end_y, start_x:end_x]

# Tahminlerde bulun
results = model(frame, conf=0.2)

# results değişkeninin tipini kontrol et
if isinstance(results, list):
# Listenin ilk elemanını al
results = results[0]

# Çerçeve numarasını hesapla
cerceve_numarasi = (i // frame_size) * (input_image_width // frame_size) + (j // frame_size) + 1

# Çerçeve numarasını ve tespit edilen soğan sayısını yazdır
onion_count = len(results.boxes)
print(f"Çerçeve {cerceve_numarasi}: {onion_count} soğan")

# Soğan sayısını topla
total_onion_count += onion_count

# Tespit edilen nesnelerle birlikte çerçeveyi kaydet
annotated_frame = results.plot()
cv2.imwrite(os.path.join(output_dir, f'cerceve{cerceve_numarasi}.jpg'), annotated_frame)

# Toplam soğan sayısını yazdır
print("Toplam soğan sayısı:", total_onion_count)
70 changes: 70 additions & 0 deletions 24-AI/yoloV10/b.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
from ultralytics import YOLOv10
import cv2
import os

# YOLOv10 modelini yükle
model = YOLOv10('C:\\Users\\DoganPc\\Desktop\\Yolo\\runs\\detect\\train3\\weights\\best.pt')

# Giriş resmi ve boyutları
input_image_path = 'C:\\Users\\DoganPc\\Desktop\\Yolo\\test\\202.JPG'
input_image = cv2.imread(input_image_path)
input_image_height, input_image_width, _ = input_image.shape

# Çerçeve boyutları
frame_size = 128
overlap = 0 # Örtüşme miktarı olmadığı için 0

# Klasör adı ve oluşturulması
output_folder = "result"
if not os.path.exists(output_folder):
os.makedirs(output_folder)

# Her bir çerçeve için tespit sonuçlarını al, çerçeveyi etiketlenmiş olarak kaydet ve nesne sayısını yazdır
frame_number = 1
total_onion_count = 0 # Toplam soğan sayısını saklamak için değişken
for i in range(0, input_image_height, frame_size):
for j in range(0, input_image_width, frame_size):
# Çerçeve başlangıç ve bitiş koordinatları
start_x = j
start_y = i
end_x = min(start_x + frame_size, input_image_width)
end_y = min(start_y + frame_size, input_image_height)

# Çerçeve resmini al
frame = input_image[start_y:end_y, start_x:end_x]

# Tahminlerde bulun
results = model(frame,conf=0.2)

# results değişkeninin tipini kontrol et
if isinstance(results, list):
# Listenin ilk elemanını al
results = results[0]

# Nesne sayısını al
num_objects = len(results.boxes)

# Toplam soğan sayısını güncelle
total_onion_count += num_objects

# Nesne sayısını çerçevenin sol üst köşesine yazdır
text = f"Nesne Sayisi: {num_objects}"
font_scale = min(frame_size, frame_size) / 300 # Yazı boyutunu ayarla
thickness = max(int(font_scale), 1) # Yazı kalınlığını ayarla
text_size = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, font_scale, thickness)[0] # Yazı boyutunu al
text_x = int((frame_size - text_size[0]) / 2) # Yazının x konumunu ayarla
text_y = int((frame_size + text_size[1]) / 2) # Yazının y konumunu ayarla
cv2.putText(frame, text, (text_x, text_y), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 255, 255), thickness)

# Çerçevenin etiketlenmiş halini kaydet
output_image_path = os.path.join(output_folder, "frame_{}.jpg".format(frame_number))
cv2.imwrite(output_image_path, frame) # Etiketlenmiş çerçeveyi kaydet

# Çerçevenin numarasını ve nesne sayısını yazdır
print("Çerçeve", frame_number, "- Nesne Sayısı:", num_objects)

# Sonraki çerçeve için numarayı artır
frame_number += 1

# Toplam soğan sayısını yazdır
print("Toplam soğan sayısı:", total_onion_count)
Binary file added 24-AI/yoloV10/best-milegitildi.pt
Binary file not shown.
Binary file added 24-AI/yoloV10/best.pt
Binary file not shown.
77 changes: 77 additions & 0 deletions 24-AI/yoloV10/c.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
from ultralytics import YOLOv10
import cv2
import os

# YOLOv10 modelini yükle
model = YOLOv10('C:\\Users\\DoganPc\\Desktop\\Yolo\\runs\\detect\\train3\\weights\\best.pt')

# Giriş resmi ve boyutları
input_image_path = 'C:\\Users\\DoganPc\\Desktop\\Yolo\\test\\202.JPG'
input_image = cv2.imread(input_image_path)
input_image_height, input_image_width, _ = input_image.shape

# Çerçeve boyutları
frame_size = 128
overlap = 0 # Örtüşme miktarı olmadığı için 0

# Klasör adı ve oluşturulması
output_folder = "result"
if not os.path.exists(output_folder):
os.makedirs(output_folder)

# Her bir çerçeve için tespit sonuçlarını al, çerçeveyi etiketlenmiş olarak kaydet ve nesne sayısını yazdır
frame_number = 1
total_onion_count = 0 # Toplam soğan sayısını saklamak için değişken
for i in range(0, input_image_height, frame_size):
for j in range(0, input_image_width, frame_size):
# Çerçeve başlangıç ve bitiş koordinatları
start_x = j
start_y = i
end_x = min(start_x + frame_size, input_image_width)
end_y = min(start_y + frame_size, input_image_height)

# Çerçeve resmini al
frame = input_image[start_y:end_y, start_x:end_x]

# Tahminlerde bulun
results = model(frame, conf=0.2)

# results değişkeninin tipini kontrol et
if isinstance(results, list):
# Listenin ilk elemanını al
results = results[0]

# Nesne sayısını al
num_objects = len(results.boxes)

# Toplam soğan sayısını güncelle
total_onion_count += num_objects

# Tespit edilen nesneleri çerçevele ve etiketle
for box in results.boxes:
x1, y1, x2, y2 = box.xyxy[0].cpu().numpy().astype(int) # Tensörü numpy arrayine çevirip int'e dönüştür
label = f"onion {box.conf[0].item():.2f}" # box.cls'yi stringe ve box.conf'u float'a dönüştür
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), 2) # Kırmızı çerçeve
cv2.putText(frame, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2) # Siyah yazı

# Nesne sayısını çerçevenin sol üst köşesine yazdır
text = f"Nesne Sayisi: {num_objects}"
font_scale = min(frame_size, frame_size) / 300 # Yazı boyutunu ayarla
thickness = max(int(font_scale), 2) # Yazı kalınlığını ayarla
text_size = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, font_scale, thickness)[0] # Yazı boyutunu al
text_x = 10 # Yazının x konumunu ayarla (10 piksel sağa)
text_y = 30 # Yazının y konumunu ayarla (30 piksel aşağıya)
cv2.putText(frame, text, (text_x, text_y), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 255, 255), thickness) # Beyaz yazı

# Çerçevenin etiketlenmiş halini kaydet
output_image_path = os.path.join(output_folder, f"frame_{frame_number}.jpg")
cv2.imwrite(output_image_path, frame) # Etiketlenmiş çerçeveyi kaydet

# Çerçevenin numarasını ve nesne sayısını yazdır
print(f"Çerçeve {frame_number} - Nesne Sayısı: {num_objects}")

# Sonraki çerçeve için numarayı artır
frame_number += 1

# Toplam soğan sayısını yazdır
print("Toplam soğan sayısı:", total_onion_count)
106 changes: 106 additions & 0 deletions 24-AI/yoloV10/d.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
from ultralytics import YOLOv10
import cv2
import os
import numpy as np

# YOLOv10 modelini yükle
model = YOLOv10('C:\\Users\\DoganPc\\Desktop\\Yolo\\runs\\detect\\train3\\weights\\best.pt')

# Giriş resmi ve boyutları
input_image_path = 'C:\\Users\\DoganPc\\Desktop\\Yolo\\test\\202.JPG'
input_image = cv2.imread(input_image_path)
input_image_height, input_image_width, _ = input_image.shape

# Çerçeve boyutları ve çakışma oranı
frame_size = 128
overlap = 64 # %50 çakışma

# Klasör adı ve oluşturulması
output_folder = "result"
if not os.path.exists(output_folder):
os.makedirs(output_folder)

def non_max_suppression(boxes, overlap_thresh):
if len(boxes) == 0:
return []

if boxes.dtype.kind == "i":
boxes = boxes.astype("float")

pick = []
x1 = boxes[:, 0]
y1 = boxes[:, 1]
x2 = boxes[:, 2]
y2 = boxes[:, 3]
conf = boxes[:, 4]
area = (x2 - x1 + 1) * (y2 - y1 + 1)
idxs = np.argsort(conf)[::-1]

while len(idxs) > 0:
i = idxs[0]
pick.append(i)
xx1 = np.maximum(x1[i], x1[idxs[1:]])
yy1 = np.maximum(y1[i], y1[idxs[1:]])
xx2 = np.minimum(x2[i], x2[idxs[1:]])
yy2 = np.minimum(y2[i], y2[idxs[1:]])
w = np.maximum(0, xx2 - xx1 + 1)
h = np.maximum(0, yy2 - yy1 + 1)
overlap = (w * h) / area[idxs[1:]]

idxs = np.delete(idxs, np.concatenate(([0], np.where(overlap > overlap_thresh)[0] + 1)))

return boxes[pick].astype("int")

# Her bir çerçeve için tespit sonuçlarını al, çerçeveyi etiketlenmiş olarak kaydet ve nesne sayısını yazdır
all_detections = []

for i in range(0, input_image_height - frame_size + overlap, overlap):
for j in range(0, input_image_width - frame_size + overlap, overlap):
# Çerçeve başlangıç ve bitiş koordinatları
start_x = j
start_y = i
end_x = min(start_x + frame_size, input_image_width)
end_y = min(start_y + frame_size, input_image_height)

# Çerçeve resmini al
frame = input_image[start_y:end_y, start_x:end_x]

# Tahminlerde bulun
results = model(frame, conf=0.18)

# results değişkeninin tipini kontrol et
if isinstance(results, list):
# Listenin ilk elemanını al
results = results[0]

# Tespit edilen nesneleri çerçevele ve etiketle
for box in results.boxes:
x1, y1, x2, y2 = box.xyxy[0].cpu().numpy().astype(int) # Tensörü numpy arrayine çevirip int'e dönüştür
x1 += start_x
y1 += start_y
x2 += start_x
y2 += start_y
conf = box.conf.item() # Güven skorunu al

all_detections.append([x1, y1, x2, y2, conf])

# Toplam tespit edilen nesne sayısı
total_detections = len(all_detections)

# NMS uygulama
all_detections = np.array(all_detections)
nms_detections = non_max_suppression(all_detections, 0.25)

# Tespit edilen nesneleri orijinal resimde işaretleme ve etiketleme
for (x1, y1, x2, y2, conf) in nms_detections:
confidence_percentage = conf * 100 # Güveni yüzdeye çevir
label = f"onion {confidence_percentage:.2f}%" # Yüzdeyi etiket olarak kullan
cv2.rectangle(input_image, (x1, y1), (x2, y2), (0, 0, 255), 2) # Kırmızı çerçeve

# Toplam soğan sayısını yazdır
total_onion_count = len(nms_detections)
print("Toplam soğan sayısı:", total_onion_count)

# Etiketlenmiş resmi kaydet
output_image_path = os.path.join(output_folder, "annotated_image.jpg")
cv2.imwrite(output_image_path, input_image) # Etiketlenmiş resmi kaydet
60 changes: 60 additions & 0 deletions 24-AI/yoloV10/denenecek.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@

from ultralytics import YOLOv10
import cv2
import os

# YOLOv10 modelini yükle
model = YOLOv10(f'{HOME}/runs/detect/train2/weights/best.pt')

# Giriş resmi ve boyutları
input_image_path = f'{HOME}/test/202.JPG'
input_image = cv2.imread(input_image_path)
input_image_height, input_image_width, _ = input_image.shape

# Çerçeve boyutları
frame_size = 128
overlap = 0 # Örtüşme miktarı olmadığı için 0

# Kayıt klasörünü oluştur
output_dir = f'{HOME}/result'
os.makedirs(output_dir, exist_ok=True)

# Toplam soğan sayısını saklamak için değişkeni tanımla
total_onion_count = 0

# Her bir çerçeve için tespit sonuçlarını al ve soğan sayılarını topla
for i in range(0, input_image_height, frame_size):
for j in range(0, input_image_width, frame_size):
# Çerçeve başlangıç ve bitiş koordinatları
start_x = j
start_y = i
end_x = min(start_x + frame_size, input_image_width)
end_y = min(start_y + frame_size, input_image_height)

# Çerçeve resmini al
frame = input_image[start_y:end_y, start_x:end_x]

# Tahminlerde bulun
results = model(frame, conf=0.2)

# results değişkeninin tipini kontrol et
if isinstance(results, list):
# Listenin ilk elemanını al
results = results[0]

# Çerçeve numarasını hesapla
cerceve_numarasi = (i // frame_size) * (input_image_width // frame_size) + (j // frame_size) + 1

# Çerçeve numarasını ve tespit edilen soğan sayısını yazdır
onion_count = len(results.boxes)
print(f"Çerçeve {cerceve_numarasi}: {onion_count} soğan")

# Soğan sayısını topla
total_onion_count += onion_count

# Tespit edilen nesnelerle birlikte çerçeveyi kaydet
annotated_frame = results.plot()
cv2.imwrite(os.path.join(output_dir, f'cerceve{cerceve_numarasi}.jpg'), annotated_frame)

# Toplam soğan sayısını yazdır
print("Toplam soğan sayısı:", total_onion_count)
Binary file added 24-AI/yoloV10/indir.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 0186c95

Please sign in to comment.