Soumyadev Saha 2024-05-17 16:48:00 +00:00 zatwierdzone przez GitHub
commit 519c751b29
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
3 zmienionych plików z 234 dodań i 1 usunięć

Wyświetl plik

@ -0,0 +1,148 @@
import tkinter as tk
from tkinter import messagebox, filedialog
import qrcode
from PIL import Image, ImageTk
import cv2
from pyzbar.pyzbar import decode
class QRCodeApp:
def __init__(self, root):
self.root = root
self.root.title("QR Code Encoder and Decoder")
# Main frame that contains the primary buttons
self.main_frame = tk.Frame(root)
self.main_frame.pack(pady=20)
self.main_frame.pack(padx=30)
# Button to show the encode screen
self.button1 = tk.Button(self.main_frame, text="Encode Text to QR Code", command=self.show_encode_screen)
self.button1.pack(pady=10)
# Button to show the decode screen
self.button2 = tk.Button(self.main_frame, text="Decode QR Code from Camera", command=self.show_decode_screen)
self.button2.pack(pady=10)
self.encode_frame = None
self.decode_frame = None
def show_encode_screen(self):
# Clear the main frame and show the encode frame
self.clear_frame()
self.encode_frame = tk.Frame(self.root)
self.encode_frame.pack(pady=20)
self.encode_frame.pack(padx=30)
# Text box to enter text for QR code
self.text_box = tk.Entry(self.encode_frame, width=50)
self.text_box.pack(pady=10)
# Button to convert text to QR code
self.convert_button = tk.Button(self.encode_frame, text="Convert", command=self.convert_to_qr)
self.convert_button.pack(pady=10)
# Button to go back to the main screen
self.back_button = tk.Button(self.encode_frame, text="Back", command=self.show_main_screen)
self.back_button.pack(pady=10)
def convert_to_qr(self):
text = self.text_box.get()
if text:
# Generate QR code from text
qr = qrcode.make(text)
# Save the QR code as an image file
file_path = filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("PNG files", "*.png")])
if file_path:
qr.save(file_path)
messagebox.showinfo("Success", "QR Code saved successfully!")
else:
messagebox.showwarning("Input Error", "Please enter text to convert to QR Code.")
def show_decode_screen(self):
# Clear the main frame and show the decode frame
self.clear_frame()
self.decode_frame = tk.Frame(self.root)
self.decode_frame.pack(pady=10)
self.decode_frame.pack(padx=50)
# Button to start the camera for QR code scanning
self.start_camera_button = tk.Button(self.decode_frame, text="Start Camera", command=self.start_camera)
self.start_camera_button.pack(pady=0)
# Button to go back to the main screen
self.back_button = tk.Button(self.decode_frame, text="Back", command=self.show_main_screen)
self.back_button.pack(pady=10)
def start_camera(self):
cap = cv2.VideoCapture(0)
found_qr = False
while not found_qr:
ret, frame = cap.read()
if not ret:
break
# Decode QR code from the camera frame
decoded_objects = decode(frame)
for obj in decoded_objects:
points = obj.polygon
if len(points) > 4:
hull = cv2.convexHull(points, returnPoints=True)
else:
hull = points
n = len(hull)
for j in range(0, n):
cv2.line(frame, tuple(hull[j]), tuple(hull[(j+1) % n]), (255, 0, 0), 3)
# Extract and display the decoded text
qr_text = obj.data.decode("utf-8")
found_qr = True
cv2.putText(frame, qr_text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
self.display_decoded_text(qr_text)
cv2.imshow("QR Code Scanner", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
def display_decoded_text(self, text):
# Show the decoded text in a message box
messagebox.showinfo("Decoded Text", text)
# Save the decoded text to a text file
file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt")])
if file_path:
with open(file_path, "w") as f:
f.write(text)
messagebox.showinfo("Success", "Decoded text saved successfully!")
def show_main_screen(self):
# Clear the current frame and show the main frame
self.clear_frame()
self.main_frame.pack(pady=20)
self.main_frame.pack(padx=30)
# Re-create the buttons for encoding and decoding
self.button1 = tk.Button(self.main_frame, text="Encode Text to QR Code", command=self.show_encode_screen)
self.button1.pack(pady=10)
self.button2 = tk.Button(self.main_frame, text="Decode QR Code from Camera", command=self.show_decode_screen)
self.button2.pack(pady=10)
self.encode_frame = None
self.decode_frame = None
def clear_frame(self):
# Clear all widgets from the current frame
for widget in self.root.winfo_children():
widget.pack_forget()
widget.destroy()
self.main_frame = tk.Frame(self.root)
self.main_frame.pack(pady=20)
if __name__ == "__main__":
root = tk.Tk()
app = QRCodeApp(root)
root.mainloop()

Wyświetl plik

@ -0,0 +1,85 @@
# QR Code Encoder and Decoder Application
## Overview
This project is a QR code encoder and decoder application built using Python and Tkinter. The application allows users to:
1. Encode text into a QR code and save it as an image file.
2. Decode QR codes using a webcam and save the decoded text to a file.
## Features
- **Encode Text to QR Code**: Converts user-provided text into a QR code and saves it as a PNG image.
- **Decode QR Code from Camera**: Captures QR codes using the webcam, decodes the text, and allows saving the decoded text to a file.
## Requirements
- Python 3.x
- Tkinter
- qrcode
- Pillow (PIL)
- OpenCV
- pyzbar
## Installation
1. **Install Python**: Make sure you have Python 3.x installed on your system.
2. **Install Required Libraries**:
```bash
pip install qrcode[pil]
pip install pillow
pip install opencv-python
pip install pyzbar
```
## Usage
1. **Run the Application**:
```bash
python QRCodeApp.py
```
2. **Encode Text to QR Code**:
- Click the "Encode Text to QR Code" button.
- Enter the text you want to encode in the text box.
- Click the "Convert" button.
- Save the generated QR code image.
3. **Decode QR Code from Camera**:
- Click the "Decode QR Code from Camera" button.
- Click "Start Camera" to begin scanning.
- The application will decode the QR code and display the text.
- Save the decoded text to a file.
## Project Structure
- `qr_code_project.py`: Main application script containing the Tkinter GUI and logic for encoding and decoding QR codes.
- `readme.md`: Project documentation.
## Libraries Used
- **Tkinter**: For the graphical user interface.
- **qrcode**: To generate QR codes from text.
- **Pillow (PIL)**: For handling image files.
- **OpenCV**: For capturing video from the webcam and processing frames.
- **pyzbar**: For decoding QR codes from images.
## How It Works
### Encoding QR Code
1. The user enters text into a text box.
2. The text is converted to a QR code using the `qrcode` library.
3. The generated QR code is saved as a PNG image.
### Decoding QR Code
1. The user starts the camera using the OpenCV library.
2. Frames from the webcam are captured and processed to detect QR codes.
3. Detected QR codes are decoded using the `pyzbar` library.
4. The decoded text is displayed to the user and can be saved to a text file.
## License
This project is licensed under the MIT License.

Wyświetl plik

@ -1,3 +1,3 @@
# List of sections
- [Section title](filename.md)
- [QR Code Encoder Decoder](./QRCodeEncoderDecoder/readme.md)