Я хочу сделать программу, которая будет распознавать программу по фотографии и решать ее. Код представлен ниже. Но программа вылетает на этапе загрузки фото. Пожалуйста, помогите мне решить эту задачу!
Я добавил в программу pytesseract и указал для него конфигурацию, чтобы было легче распознавать уравнения
import customtkinter as ctk
from tkinter import filedialog, messagebox
import cv2
import pytesseract
from PIL import Image
from sympy import sympify, Eq, solve
import re
# Указываем путь к Tesseract (если Windows)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
# Основное окно приложения
app = ctk.CTk()
app.title("Распознавание сложных уравнений")
app.geometry("700x600")
# Переменные для хранения уравнения и изображения
recognized_equation = ctk.StringVar(value="")
solution_result = ""
ctk_image = None # Переменная для хранения изображения (глобально)
def preprocess_image(image_path):
"""Обработка изображения: улучшение контраста и бинаризация"""
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
processed_image = cv2.adaptiveThreshold(
gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2
)
return processed_image
def extract_equation(image_path):
"""Распознавание уравнения с помощью Tesseract"""
image = preprocess_image(image_path)
custom_config = r"--psm 6 --oem 3"
equation_text = pytesseract.image_to_string(image, config=custom_config)
equation_text = equation_text.replace('^', '**') # Исправление ошибок распознавания
equation_text = re.sub(r"[^\d\+\-\*\/\^\(\)=x]", "", equation_text)
return equation_text.strip()
def solve_equation(equation_text):
"""Попытка решения уравнения с помощью sympy"""
global solution_result
try:
# Исправление символов для корректного синтаксиса Python
equation_text = equation_text.replace("^", "**")
left, right = equation_text.split("=")
equation = Eq(sympify(left), sympify(right))
solution = solve(equation)
solution_result = f"Решение: {solution}"
return solution
except Exception as e:
solution_result = f"Ошибка при решении: {e}"
return solution_result
def save_results_to_file(equation, solution):
"""Сохранение уравнения и решения в текстовый файл"""
file_path = filedialog.asksaveasfilename(defaultextension=".txt",
filetypes=[("Text files", "*.txt")])
if file_path:
with open(file_path, "w", encoding="utf-8") as file:
file.write(f"Распознанное уравнение: {equation}\n")
file.write(f"{solution}\n")
messagebox.showinfo("Сохранение", "Результаты сохранены успешно!")
def upload_image():
"""Открытие диалогового окна для загрузки изображения"""
global ctk_image # Глобальная переменная для хранения изображения
file_path = filedialog.askopenfilename(filetypes=[("Изображения", "*.png;*.jpg;*.jpeg;*.bmp")])
if file_path:
try:
# Обновленное создание изображения через CTkImage
image = Image.open(file_path)
ctk_image = ctk.CTkImage(light_image=image, size=(250, 250))
img_label.configure(image=ctk_image)
img_label.image = ctk_image # ВАЖНО: сохранение ссылки на изображение
# Распознавание уравнения
equation = extract_equation(file_path)
recognized_equation.set(f"Распознанное уравнение: {equation}")
# Решение уравнения
solution = solve_equation(equation)
messagebox.showinfo("Решение уравнения", f"{solution_result}")
except Exception as e:
messagebox.showerror("Ошибка", f"Не удалось загрузить изображение: {e}")
# Элементы интерфейса
title_label = ctk.CTkLabel(app, text="Распознавание сложных уравнений", font=("Arial", 24))
title_label.pack(pady=15)
upload_button = ctk.CTkButton(app, text="Загрузить изображение", command=upload_image)
upload_button.pack(pady=10)
save_button = ctk.CTkButton(app, text="Сохранить результат",
command=lambda: save_results_to_file(recognized_equation.get(), solution_result))
save_button.pack(pady=10)
img_label = ctk.CTkLabel(app, text="Предпросмотр изображения", width=250, height=250)
img_label.pack(pady=10)
result_label = ctk.CTkLabel(app, textvariable=recognized_equation, font=("Arial", 18), wraplength=600)
result_label.pack(pady=20)
# Запуск основного цикла приложения
app.mainloop()
Подробнее здесь: https://stackoverflow.com/questions/793 ... ion-solver
Как решить задачу с помощью фоторешателя уравнений ⇐ Python
Программы на Python
-
Anonymous
1736794932
Anonymous
Я хочу сделать программу, которая будет распознавать программу по фотографии и решать ее. Код представлен ниже. Но программа вылетает на этапе загрузки фото. Пожалуйста, помогите мне решить эту задачу!
Я добавил в программу pytesseract и указал для него конфигурацию, чтобы было легче распознавать уравнения
import customtkinter as ctk
from tkinter import filedialog, messagebox
import cv2
import pytesseract
from PIL import Image
from sympy import sympify, Eq, solve
import re
# Указываем путь к Tesseract (если Windows)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
# Основное окно приложения
app = ctk.CTk()
app.title("Распознавание сложных уравнений")
app.geometry("700x600")
# Переменные для хранения уравнения и изображения
recognized_equation = ctk.StringVar(value="")
solution_result = ""
ctk_image = None # Переменная для хранения изображения (глобально)
def preprocess_image(image_path):
"""Обработка изображения: улучшение контраста и бинаризация"""
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
processed_image = cv2.adaptiveThreshold(
gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2
)
return processed_image
def extract_equation(image_path):
"""Распознавание уравнения с помощью Tesseract"""
image = preprocess_image(image_path)
custom_config = r"--psm 6 --oem 3"
equation_text = pytesseract.image_to_string(image, config=custom_config)
equation_text = equation_text.replace('^', '**') # Исправление ошибок распознавания
equation_text = re.sub(r"[^\d\+\-\*\/\^\(\)=x]", "", equation_text)
return equation_text.strip()
def solve_equation(equation_text):
"""Попытка решения уравнения с помощью sympy"""
global solution_result
try:
# Исправление символов для корректного синтаксиса Python
equation_text = equation_text.replace("^", "**")
left, right = equation_text.split("=")
equation = Eq(sympify(left), sympify(right))
solution = solve(equation)
solution_result = f"Решение: {solution}"
return solution
except Exception as e:
solution_result = f"Ошибка при решении: {e}"
return solution_result
def save_results_to_file(equation, solution):
"""Сохранение уравнения и решения в текстовый файл"""
file_path = filedialog.asksaveasfilename(defaultextension=".txt",
filetypes=[("Text files", "*.txt")])
if file_path:
with open(file_path, "w", encoding="utf-8") as file:
file.write(f"Распознанное уравнение: {equation}\n")
file.write(f"{solution}\n")
messagebox.showinfo("Сохранение", "Результаты сохранены успешно!")
def upload_image():
"""Открытие диалогового окна для загрузки изображения"""
global ctk_image # Глобальная переменная для хранения изображения
file_path = filedialog.askopenfilename(filetypes=[("Изображения", "*.png;*.jpg;*.jpeg;*.bmp")])
if file_path:
try:
# Обновленное создание изображения через CTkImage
image = Image.open(file_path)
ctk_image = ctk.CTkImage(light_image=image, size=(250, 250))
img_label.configure(image=ctk_image)
img_label.image = ctk_image # ВАЖНО: сохранение ссылки на изображение
# Распознавание уравнения
equation = extract_equation(file_path)
recognized_equation.set(f"Распознанное уравнение: {equation}")
# Решение уравнения
solution = solve_equation(equation)
messagebox.showinfo("Решение уравнения", f"{solution_result}")
except Exception as e:
messagebox.showerror("Ошибка", f"Не удалось загрузить изображение: {e}")
# Элементы интерфейса
title_label = ctk.CTkLabel(app, text="Распознавание сложных уравнений", font=("Arial", 24))
title_label.pack(pady=15)
upload_button = ctk.CTkButton(app, text="Загрузить изображение", command=upload_image)
upload_button.pack(pady=10)
save_button = ctk.CTkButton(app, text="Сохранить результат",
command=lambda: save_results_to_file(recognized_equation.get(), solution_result))
save_button.pack(pady=10)
img_label = ctk.CTkLabel(app, text="Предпросмотр изображения", width=250, height=250)
img_label.pack(pady=10)
result_label = ctk.CTkLabel(app, textvariable=recognized_equation, font=("Arial", 18), wraplength=600)
result_label.pack(pady=20)
# Запуск основного цикла приложения
app.mainloop()
Подробнее здесь: [url]https://stackoverflow.com/questions/79353209/how-to-solve-a-problem-with-a-photo-equation-solver[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия