pyautogui==0.9.54
keyboard==0.13.5
requests==2.31.0
fpdf==1.7.2
openai==0.28.1
pip install -r requirements.txt
import sys
import os
import time
import traceback
import keyboard
import pyautogui
import base64
import openai
from fpdf import FPDF
from datetime import datetime
from pathlib import Path
# OpenAI API anahtarını ayarla
openai.api_key = "sk-proj-xxxxxxxxxxxx"
def capture_screenshot():
"""
Ekran görüntüsü alıp geçici bir dosyaya kaydeder.
"""
try:
screenshot = pyautogui.screenshot()
screenshot_path = os.path.join(os.getcwd(), "screenshot.png")
screenshot.save(screenshot_path)
return screenshot_path
except Exception as e:
print("Hata (capture_screenshot):", e)
traceback.print_exc()
return None
def encode_image_to_base64(image_path):
"""
Görüntüyü base64 formatına çevirir.
"""
try:
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
except Exception as e:
print("Hata (encode_image_to_base64):", e)
traceback.print_exc()
return None
def analyze_image_with_gpt4(image_path):
"""
Görüntüyü GPT-4 Vision API kullanarak analiz eder.
"""
base64_image = encode_image_to_base64(image_path)
if not base64_image:
return ""
try:
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "Bu görüntüyü detaylı bir şekilde analiz et ve açıkla."
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
max_tokens=1000
)
return response.choices[0].message.content
except Exception as e:
print("Hata (analyze_image_with_gpt4):", e)
traceback.print_exc()
return ""
def save_to_pdf(response_text):
"""
Gelen metni PDF olarak oluşturup Downloads klasörüne kaydeder.
"""
if not response_text.strip():
print("Kaydedilecek metin boş veya geçersiz.")
return
try:
downloads_path = str(Path.home() / "Downloads")
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
pdf_filename = os.path.join(downloads_path, f"DersNotu_{timestamp}.pdf")
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
# PDF başlığı
pdf.set_font("Arial", "B", 16)
pdf.cell(0, 10, "Ders Notu", ln=True, align="C")
pdf.ln(10)
# Normal metin
pdf.set_font("Arial", size=12)
# Unicode karakterleri ASCII'ye dönüştür
text = response_text.encode('ascii', 'replace').decode()
# Metni satır satır yazdır
for line in text.split('\n'):
pdf.multi_cell(0, 10, line)
pdf.output(pdf_filename)
print(f"PDF kaydedildi: {pdf_filename}")
except Exception as e:
print("Hata (save_to_pdf):", e)
traceback.print_exc()
def process_screenshot_silently():
"""
Sessizce ekran görüntüsü alır, GPT-4 Vision API ile analiz eder,
gelen yanıtı PDF olarak kaydeder.
"""
try:
print("Ekran görüntüsü alınıyor...")
screenshot_path = capture_screenshot()
if not screenshot_path:
print("Ekran görüntüsü alınamadı.")
return
print("GPT-4 Vision API ile analiz ediliyor...")
response = analyze_image_with_gpt4(screenshot_path)
if not response:
print("Görsel analiz edilemedi veya yanıt alınamadı.")
return
print("Yanıt PDF olarak kaydediliyor...")
save_to_pdf(response)
# İşlem tamamlandıktan sonra geçici screenshot dosyasını sil
try:
os.remove(screenshot_path)
except:
pass
except Exception as e:
print("Hata (process_screenshot_silently):", e)
traceback.print_exc()
def on_print_screen():
"""
Print Screen tuşuna basıldığında çalışacak fonksiyon.
"""
print("Print Screen yakalandı. İşleme başlanıyor...")
process_screenshot_silently()
def main():
# PrintScreen tuşu yakalandığında on_print_screen fonksiyonunu çağır
keyboard.add_hotkey("print_screen", on_print_screen)
print("Program çalışıyor. Print Screen tuşuna basarak test edebilirsiniz...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("Program sonlandırıldı.")
sys.exit(0)
if __name__ == "__main__":
main()Bu şekilde çalışması lazım.