Untitled
unknown
python
a year ago
5.9 kB
9
Indexable
import cv2 import numpy as np import random from PIL import Image, ImageDraw, ImageFont import time # Pencere boyutları genislik, yukseklik = 800, 600 # Kare boyutları ve aralık kare_boyutu = 100 bosluk = 2 # Kare sayısı satir_sayisi, sutun_sayisi = 4, 5 # Ortada hizalama için başlangıç koordinatları baslangic_x = (genislik - (sutun_sayisi * kare_boyutu + (sutun_sayisi - 1) * bosluk)) // 2 baslangic_y = (yukseklik - (satir_sayisi * kare_boyutu + (satir_sayisi - 1) * bosluk)) // 2 # Metinler listesi text = open("kelimeler.txt", "r", encoding="utf-8").read() kelimeler=text.split("\n\n") # Pencere oluşturma pencere_adi = 'benzer kelimeler' cv2.namedWindow(pencere_adi) # Metin yazma fonksiyonu (PIL kullanarak) def metin_yaz(resim, metin, pozisyon, font_path='arial.ttf', font_boyutu=24, renk=(0, 0, 0)): pil_img = Image.fromarray(cv2.cvtColor(resim, cv2.COLOR_BGR2RGB)) draw = ImageDraw.Draw(pil_img) font = ImageFont.truetype(font_path, font_boyutu) draw.text(pozisyon, metin, font=font, fill=renk) resim[:] = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR) # Rastgele kareler ve kelimeler seçme fonksiyonu def rastgele_kareler_ve_metinler_sec(): rastgele_kareler = random.sample(range(satir_sayisi * sutun_sayisi), 5) rastgele_kelimeler = random.sample(kelimeler, 5) return rastgele_kareler, rastgele_kelimeler # Başlangıçta rastgele 5 kare ve metin seç rastgele_kareler, rastgele_kelimeler = rastgele_kareler_ve_metinler_sec() # Seçilen yeşil kareleri sayma yesil_kare_sayisi = 0 # Mouse callback fonksiyonu def renk_degistir(event, x, y, flags, param): global yesil_kare_sayisi, rastgele_kareler, rastgele_kelimeler if event == cv2.EVENT_LBUTTONDOWN: for i in range(satir_sayisi): for j in range(sutun_sayisi): sol_ust_x = baslangic_x + j * (kare_boyutu + bosluk) sol_ust_y = baslangic_y + i * (kare_boyutu + bosluk) sag_alt_x = sol_ust_x + kare_boyutu sag_alt_y = sol_ust_y + kare_boyutu if sol_ust_x <= x <= sag_alt_x and sol_ust_y <= y <= sag_alt_y: kare_indeksi = i * sutun_sayisi + j if kare_indeksi in rastgele_kareler: metinler = rastgele_kelimeler[rastgele_kareler.index(kare_indeksi)].split('\n') metin1 = metinler[0] metin2 = metinler[1] else: metinler = kelimeler[kare_indeksi % len(kelimeler)].split('\n') metin1 = metinler[0] metin2 = metin1 if metin1 == metin2: cv2.rectangle(param, (sol_ust_x, sol_ust_y), (sag_alt_x, sag_alt_y), (0, 0, 255), -1) # kırmızı renk metin_yaz(param, metin1, (sol_ust_x + 10, sol_ust_y + 30)) metin_yaz(param, metin2, (sol_ust_x + 10, sol_ust_y + 70)) cv2.imshow(pencere_adi, param) cv2.waitKey(500) # 0.5 saniye bekle cv2.rectangle(param, (sol_ust_x, sol_ust_y), (sag_alt_x, sag_alt_y), (192, 192, 192), -1) # eski rengi geri getir metin_yaz(param, metin1, (sol_ust_x + 10, sol_ust_y + 30)) metin_yaz(param, metin2, (sol_ust_x + 10, sol_ust_y + 70)) else: cv2.rectangle(param, (sol_ust_x, sol_ust_y), (sag_alt_x, sag_alt_y), (0, 255, 0), -1) # yeşil renk metin_yaz(param, metin1, (sol_ust_x + 10, sol_ust_y + 30)) metin_yaz(param, metin2, (sol_ust_x + 10, sol_ust_y + 70)) yesil_kare_sayisi += 1 if yesil_kare_sayisi == 5: yesil_kare_sayisi = 0 time.sleep(1) param[:] = np.ones((yukseklik, genislik, 3), dtype=np.uint8) * 255 rastgele_kareler, rastgele_kelimeler = rastgele_kareler_ve_metinler_sec() kareleri_ve_metinleri_ciz(param) break # Kareleri ve metinleri çizme fonksiyonu def kareleri_ve_metinleri_ciz(resim): for i in range(satir_sayisi): for j in range(sutun_sayisi): sol_ust_x = baslangic_x + j * (kare_boyutu + bosluk) sol_ust_y = baslangic_y + i * (kare_boyutu + bosluk) sag_alt_x = sol_ust_x + kare_boyutu sag_alt_y = sol_ust_y + kare_boyutu cv2.rectangle(resim, (sol_ust_x, sol_ust_y), (sag_alt_x, sag_alt_y), (192, 192, 192), -1) kare_indeksi = i * sutun_sayisi + j if kare_indeksi in rastgele_kareler: metinler = rastgele_kelimeler[rastgele_kareler.index(kare_indeksi)].split('\n') metin1 = metinler[0] metin2 = metinler[1] else: metinler = kelimeler[kare_indeksi % len(kelimeler)].split('\n') metin1 = metinler[0] metin2 = metin1 metin_yaz(resim, metin1, (sol_ust_x + 10, sol_ust_y + 30)) metin_yaz(resim, metin2, (sol_ust_x + 10, sol_ust_y + 70)) # Boş bir görüntü oluşturma (arka plan beyaz) resim = np.ones((yukseklik, genislik, 3), dtype=np.uint8) * 255 # Başlangıçta kareleri ve metinleri çiz kareleri_ve_metinleri_ciz(resim) # Mouse callback fonksiyonunu ayarlama cv2.setMouseCallback(pencere_adi, renk_degistir, resim) while True: cv2.imshow(pencere_adi, resim) if cv2.waitKey(1) & 0xFF == 27: # ESC tuşuna basıldığında döngüyü kır break cv2.destroyAllWindows()
Editor is loading...
Leave a Comment