תוכן דבר אדיר שאפשר לעשות עם צ'אט GPT - מתאים למזכירים-מנהלים

  • פותח הנושא lab
  • פורסם בתאריך
יצירת תוכן מקצועי באמצעות הבינה המלאכותית
  • הוסף לסימניות
  • #1
מזכיר אחד שאל אותי:
יש לו אלפי סריקות של תעודות זהות
והוא רוצה שיהיה לו קל לחפש
אז הוא רוצה שכל קובץ השם שלו יהיה המספר תעודת זהות
על פניו אין קיצורי דרך וצריך להושיב בן אדם שיעבור על כל קובץ ויעתיק ידני את המספר תז מהצילום לשם הקובץ
אבל אני אמרתי בא ננסה בAI
הכנסתי לGPT סריקה אחת ואמרתי לו לשנות את שם הקובץ למס תז ולמרבה ההפתעה הוא הסכים
1738169962428.png
 
  • הוסף לסימניות
  • #2
איזה חוסר אבטחה להכניס לצ'אט מספרי זהות של ילדים

אם כבר אפשר לבקש ממנו שייצור סקריפט אותו אפשר להריץ על התיקייה שישנה את שמות הקבצים
 
  • הוסף לסימניות
  • #3
איזה חוסר אבטחה להכניס לצ'אט מספרי זהות של ילדים

אם כבר אפשר לבקש ממנו שייצור סקריפט אותו אפשר להריץ על התיקייה שישנה את שמות הקבצים
מה ההבדל? בכל מקרה הקובץ על השרתים שלהם?
 
  • הוסף לסימניות
  • #4
מה הכוונה שרתים שלהם ? google doc/drive ?
יש הבדל מאד גדול!
כשאתה שם מידע רגיש תחת חשבון הגמיל שלך גוגל מתחיבים לך שהם שומרים על הפרטיות שלו
שאתה מעלה מידע לgbt אתה בעצם מעשיר את המודל והמידע שלהם ואין להם שום התחיבות לשמור על המידע הזה ולא לשתף אותו , אלא אם כן אתה משתמש ב AI שהם מתחיבים שהוא פרטי ומוגן למידע שלך Bedrock \ Copilot ועוד ....
 
  • הוסף לסימניות
  • #5
מה הכוונה שרתים שלהם ? google doc/drive ?
יש הבדל מאד גדול!
כשאתה שם מידע רגיש תחת חשבון הגמיל שלך גוגל מתחיבים לך שהם שומרים על הפרטיות שלו
שאתה מעלה מידע לgbt אתה בעצם מעשיר את המודל והמידע שלהם ואין להם שום התחיבות לשמור על המידע הזה ולא לשתף אותו , אלא אם כן אתה משתמש ב AI שהם מתחיבים שהוא פרטי ומוגן למידע שלך Bedrock \ Copilot ועוד ....
חשבתי שOpenAI מצהירים על פרטיות אחרת היו דולפים טוקנים וסיסמאות בקצב....
בכל אופן העניין הוא שצריך להשתמש רק בשירותים של חברות ששומרים על פרטיות גם אם זה לא ת"ז של ילדים
 
  • הוסף לסימניות
  • #6
לכאורה גם כאן צריך להעלות לו תמונה אחת אחרי השניה, לא?
פתרון יותר פשוט - להשתמש בפייתון , התמונות נשארות אצלך במחשב
נכון שאתה זה שצריך להקליד את התז אבל זה הרבה יותר פשוט ונח
בניתי בחצי דקה עם קלאוד
זה מה שביקשתי:
אני רוצה שתיצור לי קוד פייתון שאוכל לשנות שמות של הרבה תמונות יחד, אני יבחר כמה תמונות יחד, התמונות יהיו מוצגות ולא רק הסמל, מתחת לכל תמונה יהיה את שם הקובץ שאוכל לשנות, שלא יציג את סיומת הקובץ כך אוכל לשנות במהירות יותר את הקבצים ובסיום אוכל ללחוץ על כפתור אישור וכל השמות ישתנו
זה מה יצא:

1738183464063.png


דרישות מערכת:


  • Python 3.x
  • ספריית Pillow (PIL) - ניתן להתקין באמצעות pip install Pillow
  • tkinter (בדרך כלל מגיע מובנה עם Python)

תיאור התוכנה:

הכלי "מערכת שינוי שמות תמונות" מספק פתרון נוח וידידותי למשתמש לניהול ושמות קבצי התמונה שלכם. בעזרת ממשק גרפי אינטואיטיבי, תוכלו לבצע את הפעולות הבאות בקלות:

  • בחירת תמונות קלה: בחרו מספר תמונות בודדות או תיקיות שלמות בלחיצת כפתור.
  • שינוי שמות ידני: שנו שם של כל תמונה בנפרד באמצעות שדות טקסט נוחים.
  • שינוי שמות אוטומטי: השתמשו בתבניות שמות מותאמות אישית כדי לשנות שמות של קבוצות תמונות במהירות ובקלות (למשל, סידור מספרי, תאריכים ועוד).
  • סידור תמונות בגרירה: ארגנו את התמונות שלכם מחדש על ידי גרירה ושחרור פשוטים, כדי לקבוע את סדר השמות האוטומטי או סדר התצוגה.
  • תצוגה מקדימה: בדקו כל תמונה לפני שינוי השם כדי לוודא שאתם עובדים עם התמונה הנכונה.
  • Undo & Redo: בטלו או בצעו שוב פעולות שינוי שם וסידור בקלות, כדי לאפשר גמישות ותיקון טעויות.
  • גודל תמונות ממוזערות מתכוונן: התאימו את גודל התמונות הממוזערות המוצגות לצרכים שלכם.
  • שמירת הגדרות: ההגדרות שלכם נשמרות לשימוש עתידי, לנוחות מירבית.
 
  • הוסף לסימניות
  • #8
וואללה
זרמתי עם הנושא והוספתי OCR לקוד
עכשיו בלחיצת כפתור הוא מוסיף את התז לשם

אני עדיין בשלבי הפיתוח הוא לא תמיד מזהה את כל התעודות זהות
מצורף סרטון (העלתי גם בזיפ לחסומים..)

 

קבצים מצורפים

  • הקלטה 2025-01-30 000837.zip
    4 MB · צפיות: 32
  • הוסף לסימניות
  • #9
איך ניתן להשיג את הפיצ'ר הזה?

אם תוסיף עוד כמה אפשרויות OCR זה יהיה יעיל ומבוקש במשרדים.
לדוגמה להגדיר לפי אזור טקסט שנבחר, או לפי סוג מסמך. או לכתוב את שם המסמך בקובץ CRM.

בכל אשמח אם תוכל לכתוב איך ניתן לראות את התוכנה.
 
  • הוסף לסימניות
  • #10
הוא עדיין לא מושלם לכן לא העלתי לכאן - האמת שאין לי כח להמשיך כי אין לי צורך כרגע בכזה דבר ואין ככ זמן מיותר לשרוף על זה

אין לי בעיה להעלות את הקוד לכאן אבל כל מי שממשיך לפתח אותו מתחייב להעלות לכאן גרסאות עדכניות
שהוסיף וכן מתחייב שלא למכור את התוסף אלא שימוש חינמי בלבד...


דרישות מערכת עבור Windows:

  1. Python:
    • גרסת Python 3 ומעלה (מומלץ 3.7+)
    • התקנה של Python מתוך האתר הרשמי, כולל הוספת Python ל-PATH של המערכת.
  2. ספריות Python:
    • התקן את הספריות באמצעות pip במנהל החלונות (cmd או PowerShell)
      קוד:
      pip install pillow pytesseract

  3. Tesseract OCR:
    • הורד את Tesseract מהאתר הרשמי של Tesseract: https://github.com/UB-Mannheim/tesseract/wiki
    • התקן את Tesseract.
    • וודא כי הנתיב להתקנה של Tesseract מוגדר בקוד (בשורה pytesseract.pytesseract.tesseract_cmd). כברירת מחדל זה צריך להיות משהו כמו r'C:\Program Files\Tesseract-OCR\tesseract.exe' או נתיב שונה בהתאם למקום שבו Tesseract הותקן.
    • אם יש צורך בOCR של עברית, הורד את קובץ השפה של עברית והוסף אותו לתיקייה tessdata שנמצאת בתוך התיקייה של Tesseract.
בקיצור:

  • Python 3+ מותקן.
  • Pillow ו-pytesseract מותקנים באמצעות pip.
  • Tesseract OCR מותקן והנתיב שלו מוגדר בקוד.
  • אם יש צורך בOCR של עברית, קובץ השפה של עברית מותקן.
זהו, אם תמלא אחר הדרישות האלו, הקוד אמור לעבוד ב-Windows.


זה הקוד (מצורף גם בזיפ)

Python:
import tkinter as tk
from tkinter import filedialog, ttk, messagebox
from PIL import Image, ImageTk, ImageEnhance, ImageOps, ImageFilter  # Added ImageFilter
import os
import json
from typing import Dict, List, Tuple
import math
from collections import deque
import pytesseract
import re

class ImageRenamer:
    def __init__(self, root):
        self.root = root
        self.root.title("מערכת שינוי שמות תמונות")
        self.root.geometry("1024x768")

        # מילון לשמירת השמות החדשים ותמונות
        self.new_names: Dict[str, ttk.Entry] = {}
        self.thumbnail_size = self.load_settings().get('thumbnail_size', 150)
        self.files: List[str] = []
        self.photo_references = []
        self.dragged_widget = None
        self.drag_source_index = None

        # היסטוריית פעולות ל-Undo/Redo
        self.undo_stack = deque(maxlen=50)
        self.redo_stack = deque(maxlen=50)

        self.create_gui()
        self.create_preview_window()

    def create_preview_window(self):
        # חלון תצוגה מקדימה
        self.preview_window = tk.Toplevel(self.root)
        self.preview_window.title("תצוגה מקדימה")
        self.preview_window.geometry("800x600")
        self.preview_window.withdraw()  # הסתרת החלון בהתחלה

        self.preview_label = ttk.Label(self.preview_window)
        self.preview_label.pack(expand=True, fill=tk.BOTH)

        # כפתור סגירה
        close_btn = ttk.Button(self.preview_window, text="סגור",
                             command=lambda: self.preview_window.withdraw())
        close_btn.pack(pady=10)

    def create_gui(self):
        # מסגרת עליונה לכפתורים וכלי שליטה
        control_frame = ttk.Frame(self.root)
        control_frame.pack(fill=tk.X, padx=5, pady=5)

        # כפתורים שמאליים
        left_frame = ttk.Frame(control_frame)
        left_frame.pack(side=tk.LEFT, fill=tk.X)

        select_btn = ttk.Button(left_frame, text="בחר תמונות", command=self.select_files)
        select_btn.pack(side=tk.LEFT, padx=5)

        # שליטה בגודל התמונות הממוזערות
        ttk.Label(left_frame, text="גודל תמונות:").pack(side=tk.LEFT, padx=5)
        self.size_var = tk.StringVar(value=str(self.thumbnail_size))
        size_entry = ttk.Entry(left_frame, textvariable=self.size_var, width=5)
        size_entry.pack(side=tk.LEFT)

        update_size_btn = ttk.Button(left_frame, text="עדכן גודל",
                                   command=lambda: self.update_thumbnail_size(int(self.size_var.get())))
        update_size_btn.pack(side=tk.LEFT, padx=5)

        # מסגרת לשינוי שמות אוטומטי
        auto_rename_frame = ttk.LabelFrame(control_frame, text="שינוי שמות אוטומטי")
        auto_rename_frame.pack(side=tk.LEFT, padx=20)

        ttk.Label(auto_rename_frame, text="תבנית:").pack(side=tk.LEFT, padx=5)
        self.pattern_var = tk.StringVar(value="image_{:03d}")
        self.pattern_entry = ttk.Entry(auto_rename_frame, textvariable=self.pattern_var, width=15)
        self.pattern_entry.pack(side=tk.LEFT, padx=5)

        ttk.Button(auto_rename_frame, text="החל",
                  command=self.apply_auto_rename).pack(side=tk.LEFT, padx=5)

        # כפתור OCR לזיהוי מספר ת.ז.
        ocr_id_btn = ttk.Button(auto_rename_frame, text="OCR ת.ז.",
                                 command=self.apply_ocr_rename)
        ocr_id_btn.pack(side=tk.LEFT, padx=5)

        # כפתורי Undo/Redo
        undo_frame = ttk.Frame(control_frame)
        undo_frame.pack(side=tk.LEFT, padx=20)

        self.undo_btn = ttk.Button(undo_frame, text="בטל", command=self.undo_action)
        self.undo_btn.pack(side=tk.LEFT, padx=2)
        self.undo_btn.state(['disabled'])

        self.redo_btn = ttk.Button(undo_frame, text="בצע שוב", command=self.redo_action)
        self.redo_btn.pack(side=tk.LEFT, padx=2)
        self.redo_btn.state(['disabled'])

        # כפתור שמירה
        save_btn = ttk.Button(control_frame, text="שמור שינויים", command=self.save_changes)
        save_btn.pack(side=tk.RIGHT, padx=5)

        # מסגרת לתצוגת התמונות
        self.canvas_frame = ttk.Frame(self.root)
        self.canvas_frame.pack(fill=tk.BOTH, expand=True)

        # Canvas עם scrollbar
        self.canvas = tk.Canvas(self.canvas_frame)
        scrollbar_y = ttk.Scrollbar(self.canvas_frame, orient="vertical", command=self.canvas.yview)
        scrollbar_x = ttk.Scrollbar(self.canvas_frame, orient="horizontal", command=self.canvas.xview)

        scrollbar_y.pack(side=tk.RIGHT, fill=tk.Y)
        scrollbar_x.pack(side=tk.BOTTOM, fill=tk.X)

        self.canvas.configure(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
        self.canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

        # מסגרת פנימית לתוכן
        self.inner_frame = ttk.Frame(self.canvas)
        self.canvas.create_window((0, 0), window=self.inner_frame, anchor="nw")

        # הגדרת אירועי גלילה וגרירה
        self.inner_frame.bind("<Configure>", lambda e: self.canvas.configure(scrollregion=self.canvas.bbox("all")))
        self.canvas.bind_all("<MouseWheel>", self._on_mousewheel)

        # חלון מידע
        self.status_label = ttk.Label(self.root, text="")
        self.status_label.pack(pady=5)

    def load_settings(self):
        try:
            with open('image_renamer_settings.json', 'r') as f:
                return json.load(f)
        except:
            return {}

    def save_settings(self):
        settings = {
            'thumbnail_size': self.thumbnail_size,
            'pattern': self.pattern_var.get()
        }
        try:
            with open('image_renamer_settings.json', 'w') as f:
                json.dump(settings, f)
        except Exception as e:
            print(f"Error saving settings: {e}")

    def show_preview(self, file_path):
        try:
            # טעינת התמונה המקורית
            img = Image.open(file_path)

            # חישוב יחס גודל חדש לשמירה על פרופורציות
            display_size = (780, 580)  # גודל מקסימלי לתצוגה
            img.thumbnail(display_size, Image.Resampling.LANCZOS)

            # המרה ל-PhotoImage
            photo = ImageTk.PhotoImage(img)

            # עדכון התווית
            self.preview_label.configure(image=photo)
            self.preview_label.image = photo

            # הצגת החלון
            self.preview_window.deiconify()
            self.preview_window.lift()

        except Exception as e:
            messagebox.showerror("שגיאה", f"שגיאה בטעינת התמונה: {str(e)}")

    def apply_auto_rename(self):
        if not self.files:
            return

        pattern = self.pattern_var.get()
        if not pattern:
            messagebox.showerror("שגיאה", "נא להזין תבנית שם")
            return

        # שמירת מצב נוכחי להיסטוריה
        old_names = {path: entry.get() for path, entry in self.new_names.items()}

        try:
            # שינוי שמות לפי התבנית
            for i, file_path in enumerate(self.files):
                new_name = pattern.format(i + 1)  # מתחיל מ-1
                self.new_names[file_path].delete(0, tk.END)
                self.new_names[file_path].insert(0, new_name)

            # הוספת הפעולה להיסטוריה
            self.add_to_history('rename', old_names)

        except Exception as e:
            messagebox.showerror("שגיאה", f"שגיאה בשינוי שמות: {str(e)}")

    def add_to_history(self, action_type, old_state):
        if action_type == 'remove':
            self.undo_stack.append(('remove', old_state)) # old_state is a tuple of (files_list, new_names_dict)
        else:
            self.undo_stack.append((action_type, old_state))
        self.redo_stack.clear()
        self.update_undo_redo_buttons()

    def undo_action(self):
        if not self.undo_stack:
            return

        action_type, old_state = self.undo_stack.pop()

        # שמירת המצב הנוכחי ל-redo
        current_state = (self.files.copy(), {path: entry.get() for path, entry in self.new_names.items()})
        self.redo_stack.append((action_type, current_state))

        if action_type == 'remove':
            self.files, self.new_names = old_state
            self.display_images() # Refresh display after undo remove
        elif action_type == 'reorder':
            self.files = old_state
            self.display_images()
        elif action_type in ['rename', 'ocr_rename', 'save']:
            for path, old_name in old_state.items():
                if path in self.new_names:
                    self.new_names[path].delete(0, tk.END)
                    self.new_names[path].insert(0, old_name)

        self.update_undo_redo_buttons()

    def redo_action(self):
        if not self.redo_stack:
            return

        action_type, old_state = self.redo_stack.pop()

        # שמירת המצב הנוכחי ל-undo
        current_state = (self.files.copy(), {path: entry.get() for path, entry in self.new_names.items()})
        self.undo_stack.append((action_type, current_state))

        if action_type == 'remove':
            self.files, self.new_names = old_state
            self.display_images() # Refresh display after redo remove
        elif action_type == 'reorder':
            self.files = old_state
            self.display_images()
        elif action_type in ['rename', 'ocr_rename', 'save']:
            for path, new_name in old_state.items():
                if path in self.new_names:
                    self.new_names[path].delete(0, tk.END)
                    self.new_names[path].insert(0, new_name)

        self.update_undo_redo_buttons()

    def update_undo_redo_buttons(self):
        self.undo_btn.state(['!disabled'] if self.undo_stack else ['disabled'])
        self.redo_btn.state(['!disabled'] if self.redo_stack else ['disabled'])

    def setup_drag_and_drop(self, frame, file_path, index):
        frame.bind("<Button-1>", lambda e: self.start_drag(e, frame, index))
        frame.bind("<B1-Motion>", self.drag)
        frame.bind("<ButtonRelease-1>", self.drop)

    def start_drag(self, event, widget, index):
        self.dragged_widget = widget
        self.drag_source_index = index

    def drag(self, event):
        if not self.dragged_widget:
            return
        pass

    def drop(self, event):
        if not self.dragged_widget or self.drag_source_index is None:
            return

        x = event.x_root - self.root.winfo_rootx()
        y = event.y_root - self.root.winfo_rooty()

        target_index = self.find_drop_target(x, y)

        if target_index is not None and target_index != self.drag_source_index:
            old_order = self.files.copy()

            file_to_move = self.files.pop(self.drag_source_index)
            self.files.insert(target_index, file_to_move)

            self.add_to_history('reorder', old_order)

            self.display_images()

        self.dragged_widget = None
        self.drag_source_index = None

    def find_drop_target(self, x, y):
        for idx, frame in enumerate(self.inner_frame.winfo_children()):
            bbox = frame.winfo_geometry()
            x1, y1, width, height = map(int, bbox.replace('x', '+').split('+'))
            if x1 <= x <= x1 + width and y1 <= y <= y1 + height:
                return idx
        return None

    def _on_mousewheel(self, event):
        self.canvas.yview_scroll(int(-1*(event.delta/120)), "units")

    def update_thumbnail_size(self, new_size):
        if new_size < 50:
            new_size = 50
        elif new_size > 500:
            new_size = 500

        self.thumbnail_size = new_size
        self.size_var.set(str(new_size))
        self.save_settings()
        if self.files:
            self.display_images()

    def select_files(self):
        new_files = filedialog.askopenfilenames(
            title="בחר תמונות",
            filetypes=[
                ("Image files", "*.png *.jpg *.jpeg *.gif *.bmp")
            ]
        )

        if new_files:
            self.files = list(new_files)
            self.status_label.config(text=f"נבחרו {len(self.files)} תמונות")
            self.undo_stack.clear()
            self.redo_stack.clear()
            self.update_undo_redo_buttons()
            self.display_images()

    def display_images(self):
        # ניקוי תצוגה קודמת
        for widget in self.inner_frame.winfo_children():
            widget.destroy()
        self.photo_references.clear()
        self.new_names.clear()

        if not self.files:
            return

        canvas_width = self.canvas.winfo_width()
        num_columns = max(1, canvas_width // (self.thumbnail_size + 20))

        for idx, file_path in enumerate(self.files):
            row = idx // num_columns
            col = idx % num_columns

            frame = ttk.Frame(self.inner_frame)
            frame.grid(row=row, column=col, padx=10, pady=10)

            try:
                img = Image.open(file_path)
                img.thumbnail((self.thumbnail_size, self.thumbnail_size))
                photo = ImageTk.PhotoImage(img)
                self.photo_references.append(photo)

                img_button = ttk.Button(frame, image=photo,
                                      command=lambda fp=file_path: self.show_preview(fp))
                img_button.image = photo
                img_button.pack()

                filename = os.path.splitext(os.path.basename(file_path))[0]
                entry = ttk.Entry(frame, width=min(30, self.thumbnail_size // 10))
                entry.insert(0, filename)
                entry.pack(pady=5)

                file_size = os.path.getsize(file_path) / (1024 * 1024)
                size_label = ttk.Label(frame, text=f"{file_size:.1f} MB")
                size_label.pack()

                self.new_names[file_path] = entry

                self.setup_drag_and_drop(frame, file_path, idx)

                # כפתור הסרה
                remove_btn = ttk.Button(frame, text="X", width=1, command=lambda fp=file_path: self.remove_image(fp))
                remove_btn.pack(side=tk.TOP, anchor=tk.NE) # הצבה בפינה ימנית עליונה

            except Exception as e:
                messagebox.showerror("שגיאה", f"שגיאה בטעינת התמונה {file_path}: {str(e)}")

    def extract_id_number_from_image(self, image_path):
        """
        מחלץ מספר תעודת זהות (9 ספרות) מתמונה באמצעות OCR, כולל שיפור תמונה לטשטוש.
        """
        try:
            img = Image.open(image_path)

            # **עיבוד תמונה מקדים לשיפור OCR**
            img_gray = img.convert('L') # המרה לגווני אפור
            img_blur = img_gray.filter(ImageFilter.GaussianBlur(radius=1)) # טשטוש גאוסיאני קל - הוספנו טשטוש
            img_contrast = ImageEnhance.Contrast(img_blur).enhance(2.0) # הגברת קונטרסט
            img_sharp = ImageEnhance.Sharpness(img_contrast).enhance(2.0) # הגברת חדות
            img_threshold = ImageOps.autocontrast(img_sharp) # סף אדפטיבי (אוטומטי)
            # img_threshold = img_gray.point(lambda p: 0 if p < 150 else 255, '1') # סף בינארי - אפשר לנסות במקום autocontrast

            # המרת התמונה המעובדת לטקסט באמצעות OCR
            config_params = '--psm 6' # מצב פילוח עמוד 6 - בלוק טקסט בודד - הוספנו psm
            # config_params = '--psm 6 -c tessedit_char_whitelist=0123456789' # אפשרות לנסות whitelist רק ספרות (מורכב יותר)
            text = pytesseract.image_to_string(img_threshold, lang='heb+eng', config=config_params) # שימוש בתמונה המעובדת, הוספנו config

            print(f"טקסט OCR גולמי עבור {image_path}: \n{text}") # הדפסת טקסט גולמי לדיבוג - חשוב לבדוק

            # המשך זיהוי מספר ת.ז. עם הביטוי הרגולרי
            id_numbers_spaced = re.findall(r'\b([\d\s]+)\b', text) # ביטוי רגולרי - אולי כללי מדי
            if id_numbers_spaced:
                for spaced_id in id_numbers_spaced:
                    id_number = "".join(filter(str.isdigit, spaced_id))
                    if len(id_number) == 9:
                        return id_number
            return None
        except Exception as e:
            print(f"שגיאת OCR עבור {image_path}: {e}")
            return None

    def apply_ocr_rename(self):
        if not self.files:
            return

        old_names = {path: entry.get() for path, entry in self.new_names.items()}

        try:
            for file_path in self.files:
                id_number = self.extract_id_number_from_image(file_path)
                if id_number:
                    self.new_names[file_path].delete(0, tk.END)
                    self.new_names[file_path].insert(0, id_number)
                    self.status_label.config(text=f"זוהה מספר ת.ז. {id_number} עבור {os.path.basename(file_path)}")
                else:
                    self.status_label.config(text=f"לא זוהה מספר ת.ז. עבור {os.path.basename(file_path)}")
        except Exception as e:
            messagebox.showerror("שגיאה", f"שגיאה בביצוע OCR: {str(e)}")

        self.add_to_history('ocr_rename', old_names)

    def remove_image(self, file_path):
        """
        מסיר תמונה מרשימת התמונות המוצגות.
        """
        if file_path not in self.files:
            return

        # שמירת מצב נוכחי להיסטוריה
        old_state = (self.files.copy(), self.new_names.copy())
        self.add_to_history('remove', old_state)

        # הסרת הקובץ מהרשימות
        self.files.remove(file_path)
        if file_path in self.new_names:
            del self.new_names[file_path]

        self.display_images() # רענון התצוגה

    def save_changes(self):
        old_names = {path: os.path.splitext(os.path.basename(path))[0]
                    for path in self.files}

        success_count = 0
        error_count = 0

        for old_path in self.files:
            new_name = self.new_names[old_path].get().strip()
            if new_name:
                directory = os.path.dirname(old_path)
                extension = os.path.splitext(old_path)[1]
                new_path = os.path.join(directory, new_name + extension)

                try:
                    if old_path != new_path:
                        os.rename(old_path, new_path)
                        success_count += 1
                except Exception as e:
                    error_count += 1
                    messagebox.showerror("שגיאה", f"שגיאה בשינוי שם הקובץ {old_path}: {str(e)}")

        if success_count > 0:
            self.add_to_history('save', old_names)

        status = f"הושלם בהצלחה! {success_count} קבצים שונו"
        if error_count:
            status += f", {error_count} שגיאות"

        messagebox.showinfo("סיום", status)
        if success_count > 0:
            self.files = []
            self.new_names.clear()
            self.display_images()

    def on_closing(self):
        self.save_settings()
        self.root.quit()

if __name__ == "__main__":
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # נתיב Tesseract - **ודא שנכון!**
    root = tk.Tk()
    app = ImageRenamer(root)
    root.protocol("WM_DELETE_WINDOW", app.on_closing)
    root.mainloop()
 

קבצים מצורפים

  • משנה שמות לתמונות כולל OCR לתעודות זהות.zip
    KB 5.4 · צפיות: 24
  • הוסף לסימניות
  • #11
בשביל להמשיך לפתח את התוסף אתם פשוט צריכים להעתיק את הקוד ולהדביק באחד הבינות הזמינות לכן ולשאול איך ניתן עוד לפתח אותו..
או אם יש לכם רעיון חדש להוסיף לתוכנה פשוט תכתבו לו מה אתם רוצים שיהיה בו ושיוסיף את זה לקוד
אשמח שתשתפו בתוצאות
 
  • תודה
Reactions: z.w
  • הוסף לסימניות
  • #13
זה ממש חוסר אחריות,
אסור להעלות פרטים אישיים של ילדים ותלמידים (וגם לא של הוריהם)
למערכת של בינה מלאכותית.
 
  • הוסף לסימניות
  • #14
איפה אתה רואה שהקבצים כבר נמצאים בענן?
צריך לבקש קוד ואותו להריץ אופליין
מי שרוצה LLM שישמש כOCR (שמוצלח הרבה יותר ממודלי OCR וותיקים) לרוב צריך שהתמונה תשלח לשרת כל שהוא ולקבל חזרה טקסט
זה ממש חוסר אחריות,
אסור להעלות פרטים אישיים של ילדים ותלמידים (וגם לא של הוריהם)
למערכת של בינה מלאכותית.
כנ"ל להעלות לגוגל דרייב ולהגדיר כקובץ ציבור כדי שיהיה נח לשתף (בעיני ראיתי) .....
 
  • הוסף לסימניות
  • #15
מי שרוצה LLM שישמש כOCR (שמוצלח הרבה יותר ממודלי OCR וותיקים) לרוב צריך שהתמונה תשלח לשרת כל שהוא ולקבל חזרה טקסט
צריך סה"כ לחלץ מספר תעודת זהות, OCR פשוט עם רג'קס יעשה את העבודה מעולה ומהר
 
  • הוסף לסימניות
  • #16
הGPT לא סגור על עצמו
בהתחלה הוא כותב
1738698173768.png


וכשאמרתי לו נסה שוב
1738698199858.png
 
  • הוסף לסימניות
  • #17
בשום פנים ואופן לא מעלים פרטים אישיים ל ChatGPT וגם לא לבינה אחרת.
בטח ובטח כשמדובר בפרטים אישיים של אנשים אחרים
 
  • הוסף לסימניות
  • #18
תנוח דעתכם אני לא מעלה שום דבר
בין כה וכה יש הגבלה ל3 ביום
וגם אם לא ברוב הפעמים הוא לא משתף פעולה (גם לא היה מדובר בילדים)
 
נערך לאחרונה ב:
  • הוסף לסימניות
  • #19
בשום פנים ואופן לא מעלים פרטים אישיים ל ChatGPT וגם לא לבינה אחרת.
בטח ובטח כשמדובר בפרטים אישיים של אנשים אחרים
שמישהו אולי יסביר מה ההבדל בין להעלות קובץ לGemini לאחסון של אותו קובץ בגוגל דרייב?
 
  • הוסף לסימניות
  • #20
שמישהו אולי יסביר מה ההבדל בין להעלות קובץ לGemini לאחסון של אותו קובץ בגוגל דרייב?
אכן היחס שלי לב"מ ולדרייב הוא די דומה, וספציפית בנושא הזה הוא ממש זהה
 

פרוגבוט

תוכן שיווקי
פרסומת

פוסטים חדשים שאולי לא קראת....

הכותרת לא באה להתריס היא באה להדגיש מצב
ולא לא באתי לומר שאבא או אמא עם ילד או שניים זה לא אתגר
אבל שימו לב
בעוד אתם בונים על ההורים לרוב פסח ולכן מכשירים פיסת שיש קטן לפינת קפה. מדף במקרר. ובארון
כי מילא רוב החג נהייה אצל ההורים
ההורים והרווקים בבית קורעים את עצמם [תזכרו זה לא היה כזה מזמן]
כן אמא שלך לא נחה כבר 3 שבועות

להפוך בית שלם 100+ מטר של ארונות כיורים שולחנות מטבח סלון כיסאות מזווה מיטות
לכשר לפסח
לאפשרות שאתם וילדכם הסתובבו בחופשיות עם מצה ואפיקומן שסבא קנה
לא נכנסתי להוצאות המטורפות שקצת עוברות לידכם. למה שתקנו מצות יין או חסה או נייר כסף לציפוי המטבח
ושוב לא בהאשמה ולא בטרוניה אלא כנתון מציאותי
אז זו''צ יקר קצת שימת לב
לפרגן לבוא לעזור חצי יום
לפרגן ארוחה לעובדים בבית [הבית שלך חמץ המטבח שלהם במרפסת שרות]
לתת מילה טובה או שוקולד
והחשוב מכל
מעשרות להורים
הם חשובים יותר מכל כולל ארגון או קמחה דפסחא הם ההורים שלך

והם יממנו לך את ארוחות וסעודות החג
בס"ד

ההבדל בין נוכלות לבין כישלון



לפני כחודש נערך בבני ברק מיפגש מאוד מעניין של גוף הנקרא "הפורום להגנת הצרכן" והוא עסק בעיקר בדרכים למניעת נפילות נדל"ן בהם הציבור החרדי "מומחה" ליפול חזור ונפול.

הנוכחים, מומחים איש איש בתחומו, תיארו את הנוכלויות הרווחות היום ותיארו בצבעים קודרים ואמיתיים את המצב בכי רע, היו שם גדולי הדיינים שדיברו על הצורך להבטיח שהדור השני לא עושה שטויות עם הדירה שקיבלו מההורים וכן הלאה.

כאשר ר' איצ'ה דזיאלובסקי העניק לי את רשות המילה האחרונה (בגלל שאיחרתי – הרגל נעשה טבע) בקשתי מהנוכחים שלא יישפכו את התינוק אם המים, כלומר שלא יביאו אנשים למצב שבו הם חושדים בכל מה שלא זז שהוא נוכלות, הדבר הזה טענתי עלול להביא לשיתוק מוחלט של שוק השקעות הנדל"ן החרדי אשר היה והינו הקטליזטור הראשי של הציבור החרדי בדרכו לנישואי ילדים ברוגע ושלווה, המסר המרכזי של שתי דקות הנאום שלי זה מה שאתם הולכים לקרוא באלף מילים הבאות: לא כל עסקה כושלת היא אשמת המשווק!

צרות אחרונות משכחות את הראשונות וכך שכחתי מזה לגמרי, אלא שהשבוע פורסמה כתבה בעיתון 'דה-מרקר' (מי שלא מכיר לא הפסיד - מלא באהבת כסף ושנאת חרדים) כתבת תחקיר עומק אודות תופעת העוקצים בציבור החרדי הכרוכים במבצעי 10/90 הזכורים לשימצה.

מה שלא אהבתי זה ההתמקדות במתווך חרדי מסוים כאילו הוא שורש הרע בעולם כולו ואיך מלאו ליבו כביכול, ומעשה שהיה כך הווה בעשרות עותקים ברחבי הארץ שרובם מוכרים לי היטיב:

אברכים שחושבים שהם אנשי-עסקים פותו בידי אנשי-עסקים שחושבים שהם אברכים לקנות דירות פאר בערים שהם מכירים רק מחלונות האוטובוס בדרך למירון, נתניה ובת ים מככבות בכתבה אך זה לאורך כל הארץ בערים אשר אברך ממוצע מכיר את שמותיהם רק מהתרעות פיקוד העורף (או מהנפילות שאחריהן) ומעולם לא ביקר בהן.

אז איך משכנעים אברך כולל חסידי בן 22 שקיבל מההורים חצי מיליון ₪ לצורך יחידת 'סליחה' בביתר, לרכוש פנטהוז בהרצליה בארבע מיליון ₪ ?

מספרים לו שזה מבצע מיוחד שהתגלה רק למתווך בגילוי שמימי וכעת צריך רק לשלם עשרה אחוז שזה ארבע מאות אלף שקל ואת המאה הנותרים להביא למתווך על הגילוי הנפלא.

ואיך הדלפון שלנו יממן את מה שעשירי טבריה מתקשים?

כאן מגיע החלק השני של הגילוי אליהו – המתווך יודע לנבא כי בעוד שלוש שנים, כשיצטרכו להשלים את הרכישה הדירה תהיה שווה חמישה מיליון, ואז האברך דנן יתברר כסוחר מוצלח ביותר אשר ימשוך חזרה את הארבע מאות ועוד מיליון רווח נקי וכך לא יצטרך לגור בדירת הסליחה אלא בדירה גדולה המרחיבה דעתו של אדם ומרחיבה ארנקו של המשווק.

אז איפה הקצ'?

שעכשיו זה "אחרי שלוש שנים" ומתברר כי המחיר הכי גבוה שאפשר לקבל על הדירה הוא שלוש וחצי מיליון ואחרי ההוצאות מגיעים לשלוש מאתיים נטו ביד, מה שאומר שלפעמים עדיף לאותו אברך לעשות "ויברח" ולהותיר את הארבע מאות אצל החברה והמשווק ולחזור ליחידת הסליחה אבל וחפוי ראש, והפעם כשוכר...

זה פחות או יותר המסלול שאותו עוברות בחודשים אלו מאות משפחות מאנ"ש שכל מה שהם רצו זה לחתן את הילדים בכבוד וכעת הם מרוסקים לחלוטין וייקח להם שנים רבות אם בכלל כדי להתאושש מהתהום הכלכלית שהם הוכנסו אליה בידי משווק פלוני.

אך עשרת הקוראים כאן יודעים שעד כאן הייתה רק ההקדמה, כעת נתחיל עם הניתוח הכואב של הנתונים ואת הצד של לימוד זכות:

ובכן, קודם כל צריך לדעת שרבים מאוד הרוויחו בפריסיילים ותכניות דומות הרבה כסף, פגשתי ועודני פוגש כל יום אברכים צעירים ומבוגרים שהרוויחו סכומים אגדיים בשנים האחרונות כתוצאה מהפטנט הזה, לא ערכתי מחקר עומק אך מהתרשמותי המרוויחים רבים בהרבה על המפסידים וחבל שאת זה שומרים בסוד מאימת המצ'ינגים, הסיבה היחידה שמספרים לי על כך זה או כדי לשאול איך לעשות את הסיבוב הבא או כדי להתייעץ איך לצמצם את המסים העצומים (ברוך השם, כשיש מס סימן שיש שבח).

כל מי שקנה דירה בירושלים במחירי פריסייל של עשרים ומשהו אלף עשה את המיליון הזה, כך גם רבים שהשקיעו בחלק מהפרוייקטים בבן שמן וכך גם במקומות נוספים אשר המחירים עלו שם דרמטית ולקחו איתם את המשקיעים כלפי מעלה.

אז מה קרה בכל הפרוייקטים הכושלים?

שני דברים, הראשון שלא ידוע לי אם קרה זה הקפצת מחירים, מאוד ייתכן שמשווק מסוים יבוא לקבלן שיש לו כבר פריסייל ויגיד לו במקום למכור ב3.9 אביא לך קונים בארבע מיליון ואז מקבלים תרי זוזי: מאה אלף מהקבלן ועוד אחד מהלקוח, חד גדיא דזבין את אבא.

זה נורא לשמוע שיש דברים כאלו וטיפש מי שנופל לכך אך מי שיותר טיפש ממנו הוא מי שמאמין שאפשר למנוע דבר כזה באמצעות בירור אם המתווך אמין: גם המתווך האמין ביותר לא יעמוד בפני ניסיון של מאתיים אלף ₪ רק מלאך יוותר על זה ולא ניתנה תורת העסקים למלאכי השרת.

אך הדבר הזה לא מתקיים בדרך כלל משום שרוב הקונים יודעים לבדוק בערך את המחיר בסביבה ולא נופלים לבורות עמוקים, מה שכן קורה זה הדבר השני ועליו ברצוננו לדבר:

המחיר פשוט לא עלה, ולפעמים אפילו ירד.

כן רבייסיי, מחירי דירות לא רק עולים, לפעמים הם גם יורדים, כגון למשל בתקופת מלחמה.

עד מלחמת שמחת-נורא המחירים בנתניה למשל אכן השתוללו כי הצרפתים קנו שם בהמוניהם והוא הדין בצפת שהאמריקאים עטו עליה כי אצלם אין הבדל בין ירושלים לצפת, באמריקה זה מרחק סביר לנסיעה יומיומית לעבודה, אז מישהו משווק להם את זה כירושלים לעניים והם קנו וקנו והמחירים עלו ועלו והייתה היתכנות מסויימת לעלייה צפוייה.

ואז הגיע המלחמה ואין חוצניקים, ועוד מלחמה ועוד מבצע ושום דבר לא חזר לעצמו ואפשר לקלל את איראן (מגיע להם) ואת החמאס (עוד יותר מגיע) אך זה לא יעזור לעובדה הפשוטה שמחירי המגדלים שיועדו בעיקר לאוכלוסיות אלו צולל.

לא בהרבה, אך מספיקה ירידה של 8% כדי שכל העסק יהפוך להפסד.

זה נכון שמעצבן שהמשווק ניבא שהמחירים יעלו והם לא, אמנם אמרו חז"ל שנבואה ניתנה לשוטים אך האמונה כי יש למישהו נבואה ניתנה לשוטים גדולים עוד יותר... כל בר דעת העושה עסקים יודע שבכל הקשור לניבוי עתידות - המשווק ועטיפת המסטיק יודעים לנבא באותה מידה ומי שמסתמך על הבטחות אודות העתיד (כולל אלפי אברכים שנופלים היום בפריסייל של המחר שנקרא פינוי בינוי המבוסס על אותה נבואה כמעט) אין לו לבוא בטענות אלא על עצמו, לא המשווק נשך לשונרא.

מקווה שהצלחתי להסביר: לא כל עסקה כושלת היא נוכלות ולא כל ירידת מחירים היא עקיצה, בכל עסק ייתכן מאוד הפסד ומי שלא מוכן לכך שלא ייכנס לעולם ההשקעות.

אז להפסיק להשקיע בנדל"ן?

חלילה, כמה שיותר להשקיע בנדל"ן וכל המרבה הרי זה משובח – ואם ירצה השם ויהיה זמן נרחיב אולי בטור הבא על "מה כן" – אך רק עסקאות נטולות הימור על כל הקופה, כך שגם אם נגזר עליך להפסיד זה יהיה רק קצת ורק זמני.

ברור לי שכל הדברים האמורים כאן ברורים לכל אחד מעשרת הקוראים וסליחה שבזבזתי את זמנכם אך אם זה ירגיע אבא סוער אחד -שכועס בכל ליבו על המתווך שכאילו הפיל את החתן שלו - והיה זה שכרי.



גילוי נאות: לכותב אין ולא היה שום אינטרס כלכלי בשום פרוייקט של פריסל והוא אינו קשור היום לשום שיווק לא במישרין ולא בעקיפין, המידע מובא ללא כל אינטרס כלכלי אלא כצדקה ושירות לציבור, לשאלות ספציפיות ניתן לפנות למייל והתשובות שם חינם וללא אחריות.
סיכום אירועים: איראן בלהבות - מהמחאות ועד לסף עימות עולמי

הרקע וההתפרצות (סוף דצמבר 2025):

המחאות החלו ב-28 בדצמבר 2025 בטהראן, על רקע משבר כלכלי חריף וצניחה חדה בערך הריאל. מה שהחל כזעקת סוחרים ואזרחים על יוקר המחיה, הפך במהירות לגל הפגנות חסר תקדים ב-187 ערים הקורא להפלת המשטר.


הטבח והחשכת המידע (ינואר 2026):
  • דיכוי אלים: המשטר האיראני הגיב באכזריות יוצאת דופן. לפי נתוני ארגון זכויות האדם HRANA, נכון ל-23 בינואר, מספר ההרוגים המאומת עומד על למעלה מ-5,000 בני אדם, בהם 4,716 מפגינים ועשרות ילדים.
    יש דיווחים לא מאומתים מצד האופוזיציה האיראנית על מעל 60,000 הרוגים!

  • מעצרים המוניים: למעלה מ-26,500 בני אדם נעצרו, וקיים חשש כבד להוצאות להורג המוניות בבתי הכלא.

  • חסימת אינטרנט: החל מה-8 בינואר הוטל מצור דיגיטלי כמעט מוחלט על המדינה כדי למנוע זליגת תיעודים מהטבח.

המעורבות האמריקנית - "הארמדה של טראמפ":
הנשיא טראמפ, שחזר והזהיר את טהראן מפני המשך הטבח, הכריז ב-22 בינואר כי "ארמדה" אמריקנית (צי ספינות מלחמה, כולל נושאת המטוסים אברהם לינקולן) עושה את דרכה למפרץ הפרסי. טראמפ הבהיר כי ארה"ב בוחנת אפשרויות תקיפה ישירות נגד מטרות שלטוניות אם לא ייפסק הדיכוי. ולאחר הדלפות על ממדי הטבח, הכריז "העזרה בדרך".


הזווית הישראלית והאזורית:
  • כוננות שיא: ישראל נמצאת בדריכות עליונה מחשש שהסלמה אמריקנית תוביל לתגובה איראנית ישירה או באמצעות שלוחיה (פרוקסי).

  • איומי נתניהו: ראש הממשלה נתניהו הזהיר כי אם איראן תבצע "טעות" ותתקוף את ישראל, היא תפגוש עוצמה שטרם הכירה.

  • איומי טהראן: המשטר האיראני הודיע כי במקרה של תקיפה, בסיסים אמריקניים ויעדים בישראל יהיו "מטרות לגיטימיות".

באשכול זה נמשיך לעדכן סביב השעון בכל התפתחות, דיווחים מהשטח ופרשנויות ביטחוניות.
עודכן אדר תשפ"ד
ראשית, גופי הכשרות
ברוב אשכולות בנושא 'השקעות בשוק ההון' בפרוג, משתרבב עניין הכשרות.
למען הסדר באשכול זה נעלה עדכונים בנושא כשרות.
אני אשתדל לסכם ולתמצת ככל האפשר.

יש 4 גופי כשרות
  • בד"ץ העדה החרדית - על פי פסקי הרב יעקב בלוי זצ"ל שהיה בקיא גדול בתחום שוק ההון והוא שהביא את פסקיו ועל פי פסקים אלו נוהגים עד היום בגוף כשרות זה. היום הכשרות בראשות הרב שלמה זאב קרליבך.
  • גלאט הון - על פי פסקי רבי ניסים קרליץ והרב שמואל ואזנר. שסמכו ידיהם על הרב יעקב לנדו שמכיר את שוק ההון לעומקו. הרב משה שטרנבוך ראב"ד העדה החרדית הוא מרבני 'גלאט הון'.
  • תשואה כהלכה – הרב שמואל דוד גרוס, רב חסידי גור אשדוד ועוד רבנים מוכרים וידועים בכל שכבות הציבור החרדי.
  • כלכלה על פי ההלכה- הרב אריה דביר, על פי פסקי הרב יוסף שלום אלישיב.

היום בכל החברות יש מסלולים כשרים, שמאושרים לפחות ע"י אחת מהכשרויות.
בין החברות שנמצאת ברשותם תעודת כשרות אפשר למצוא את:
אלטשולר שחם, אינפיניטי, הפניקס, הראל, כלל, מגדל, מור, מיטב דש, מנורה.

רשימות קרנות כשרות:

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה