parent
425e8aa9d3
commit
aecd2576b5
@ -1,92 +1,123 @@
|
||||
from tkinter import *
|
||||
import tkinter as tk
|
||||
from tkinter import messagebox
|
||||
from tkinter import filedialog
|
||||
import pymysql
|
||||
from flask import Flask, render_template, request, redirect, url_for
|
||||
|
||||
class Application(tk.Frame):
|
||||
def __init__(self, master=None):
|
||||
super().__init__(master)
|
||||
self.master = master
|
||||
self.pack()
|
||||
self.create_widgets()
|
||||
|
||||
def create_widgets(self):
|
||||
self.label_username = tk.Label(self, text="Username:")
|
||||
self.label_username.grid(row=0, column=0)
|
||||
|
||||
self.entry_username = tk.Entry(self)
|
||||
self.entry_username.grid(row=0, column=1)
|
||||
|
||||
self.label_password = tk.Label(self, text="Password:")
|
||||
self.label_password.grid(row=1, column=0)
|
||||
|
||||
self.entry_password = tk.Entry(self, show="*")
|
||||
self.entry_password.grid(row=1, column=1)
|
||||
|
||||
self.register_button = tk.Button(self, text="Register", command=self.register_user)
|
||||
self.register_button.grid(row=2, column=1)
|
||||
|
||||
self.login_button = tk.Button(self, text="Login", command=self.login_user)
|
||||
self.login_button.grid(row=3, column=1)
|
||||
|
||||
def register_user(self):
|
||||
username = self.entry_username.get()
|
||||
password = self.entry_password.get()
|
||||
|
||||
self.save_to_db(username, password)
|
||||
self.clear_fields()
|
||||
|
||||
def login_user(self):
|
||||
username = self.entry_username.get()
|
||||
password = self.entry_password.get()
|
||||
|
||||
self.validate_credentials(username, password)
|
||||
self.clear_fields()
|
||||
|
||||
def save_to_db(self, username, password):
|
||||
# 连接数据库
|
||||
db = pymysql.connect(host='localhost',
|
||||
user='your_username',
|
||||
password='your_password',
|
||||
database='your_database',
|
||||
charset='utf8mb4')
|
||||
|
||||
try:
|
||||
with db.cursor() as cursor:
|
||||
sql = "INSERT INTO users (username, password) VALUES (%s, %s)"
|
||||
cursor.execute(sql, (username, password))
|
||||
db.commit()
|
||||
messagebox.showinfo("Registration", "User registered successfully!")
|
||||
except Exception as e:
|
||||
messagebox.showerror("Registration", f"Error: {e}")
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
def validate_credentials(self, username, password):
|
||||
# 连接数据库
|
||||
db = pymysql.connect(host='localhost',
|
||||
user='your_username',
|
||||
password='your_password',
|
||||
database='your_database',
|
||||
charset='utf8mb4')
|
||||
|
||||
try:
|
||||
with db.cursor() as cursor:
|
||||
sql = "SELECT * FROM users WHERE username=%s AND password=%s"
|
||||
cursor.execute(sql, (username, password))
|
||||
result = cursor.fetchone()
|
||||
if result:
|
||||
messagebox.showinfo("Login", "Login successful!")
|
||||
conn = pymysql.connect(host='localhost',
|
||||
user='root',
|
||||
password='123456',
|
||||
database='scaner',
|
||||
port=3306,
|
||||
charset='utf8')
|
||||
|
||||
# 使用 cursor() 方法创建一个游标对象 cursor
|
||||
cursor = conn.cursor()
|
||||
print("数据库连接成功!")
|
||||
|
||||
|
||||
# 查询用户信息
|
||||
def userinfo_query(username, password):
|
||||
cursor.execute("select * from `user`")
|
||||
data = cursor.fetchall()
|
||||
|
||||
username_list_length = len(data)
|
||||
|
||||
for i in range(username_list_length):
|
||||
username.append(data[i][0])
|
||||
password.append(data[i][1])
|
||||
|
||||
|
||||
def user_register():
|
||||
deng = Tk()
|
||||
deng.title("注册")
|
||||
deng.geometry("300x200")
|
||||
|
||||
# 在GUI中添加新的输入字段和按钮
|
||||
label_new_username = Label(deng, text="新账号:")
|
||||
label_new_username.pack()
|
||||
entry_new_username = Entry(deng)
|
||||
entry_new_username.pack()
|
||||
label_new_password = Label(deng, text="新密码:")
|
||||
label_new_password.pack()
|
||||
entry_new_password = Entry(deng, show="*")
|
||||
entry_new_password.pack()
|
||||
|
||||
btn_register = Button(deng, text="注册", command=lambda: register_action(entry_new_username, entry_new_password))
|
||||
btn_register.pack(side='right', padx=50)
|
||||
|
||||
|
||||
def register_action(entry_new_username, entry_new_password):
|
||||
cursor.execute("INSERT INTO user (`username`, `password`) VALUES (%s, %s)",
|
||||
(entry_new_username.get(), entry_new_password.get()))
|
||||
conn.commit()
|
||||
print("注册成功!")
|
||||
|
||||
|
||||
def user_login():
|
||||
global count
|
||||
count = 2
|
||||
username_list = []
|
||||
password_list = []
|
||||
userinfo_query(username_list, password_list)
|
||||
|
||||
username_input = entry_username.get()
|
||||
password_input = entry_password.get()
|
||||
|
||||
if username_input not in username_list:
|
||||
label_message.config(text="账号错误!")
|
||||
else:
|
||||
if password_input in password_list:
|
||||
def choose_folde():
|
||||
root.destroy()
|
||||
root5 = tk.Tk()
|
||||
root5.title('选择图片')
|
||||
root5.geometry('300x300')
|
||||
folder_path = filedialog.askdirectory()
|
||||
if folder_path:
|
||||
print(f"您选择了文件夹: {folder_path}")
|
||||
|
||||
root.mainloop()
|
||||
def callback():
|
||||
rootback = tk.Tk()
|
||||
rootback.title('用户界面')
|
||||
rootback.geometry('300x300')
|
||||
tk.Label(rootback, text='请选择你的功能').pack()
|
||||
tk.Button(rootback, text="选择需要扫描的图片", command=choose_folde).pack()
|
||||
rootback.mainloop()
|
||||
|
||||
# windows.destroy()
|
||||
root = tk.Tk()
|
||||
root.title('用户界面')
|
||||
root.geometry('300x300')
|
||||
tk.Label(root, text='请选择你的功能').pack()
|
||||
tk.Button(root, text="选择需要扫描的图片", command=choose_folde).pack()
|
||||
tk.mainloop()
|
||||
else:
|
||||
messagebox.showerror("Login", "Invalid credentials.")
|
||||
except Exception as e:
|
||||
messagebox.showerror("Login", f"Error: {e}")
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
def clear_fields(self):
|
||||
self.entry_username.delete(0, tk.END)
|
||||
self.entry_password.delete(0, tk.END)
|
||||
|
||||
root = tk.Tk()
|
||||
app = Application(master=root)
|
||||
app.mainloop()
|
||||
label_message.config(text="密码错误!还可以尝试{}次".format(count))
|
||||
count += 1
|
||||
if count == 3:
|
||||
label_message.config(text="登录失败!")
|
||||
btn_login.config(state='disabled')
|
||||
|
||||
|
||||
windows = Tk()
|
||||
windows.title("登录")
|
||||
windows.geometry("300x200")
|
||||
label_username = Label(windows, text="账号:")
|
||||
label_username.pack()
|
||||
entry_username = Entry(windows)
|
||||
entry_username.pack()
|
||||
label_password = Label(windows, text="密码:")
|
||||
label_password.pack()
|
||||
entry_password = Entry(windows, show="*")
|
||||
entry_password.pack()
|
||||
|
||||
btn_login = Button(windows, text="登录", command=user_login)
|
||||
btn_login.pack(side='left', padx=50)
|
||||
entry_password.pack()
|
||||
btn_login = Button(windows, text='注册', command=user_register)
|
||||
btn_login.pack(side='right', padx=50)
|
||||
label_message = Label(windows, text="")
|
||||
label_message.pack()
|
||||
windows.mainloop()
|
||||
|
@ -0,0 +1,33 @@
|
||||
# https://digi.bib.uni-mannheim.de/tesseract/
|
||||
# 配置环境变量如E:\Program Files (x86)\Tesseract-OCR
|
||||
# tesseract -v进行测试
|
||||
# tesseract XXX.png 得到结果
|
||||
# pip install pytesseract
|
||||
# anaconda lib site-packges pytesseract pytesseract.py
|
||||
# tesseract_cmd 修改为绝对路径即可
|
||||
from PIL import Image
|
||||
import pytesseract
|
||||
import cv2
|
||||
import os
|
||||
|
||||
preprocess = 'blur' #thresh
|
||||
|
||||
image = cv2.imread('scan.jpg')
|
||||
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
||||
|
||||
if preprocess == "thresh":
|
||||
gray = cv2.threshold(gray, 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
|
||||
|
||||
if preprocess == "blur":
|
||||
gray = cv2.medianBlur(gray, 3)
|
||||
|
||||
filename = "{}.png".format(os.getpid())
|
||||
cv2.imwrite(filename, gray)
|
||||
|
||||
text = pytesseract.image_to_string(Image.open(filename))
|
||||
print(text)
|
||||
os.remove(filename)
|
||||
|
||||
cv2.imshow("Image", image)
|
||||
cv2.imshow("Output", gray)
|
||||
cv2.waitKey(0)
|
Loading…
Reference in new issue