-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
05e81bb
commit 0186c95
Showing
44 changed files
with
12,203 additions
and
0 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.