from PyQt5 import QtGui
from PyQt5 import QtCore
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow, QListWidget, QListWidgetItem, QAbstractItemView, QWidget, QApplication, \
QButtonGroup, QPushButton, QTextEdit, QRadioButton, QCheckBox, QLabel, QSpacerItem, QMessageBox, QGroupBox, \
QVBoxLayout, QHBoxLayout
from PyQt5.QtCore import QObject, QThread, QSettings, pyqtSignal, pyqtSlot, Qt
from .logger import logger
from .shape import Shape
import PIL.Image
import math
import os
import io
import json
import functools
import imgviz
from guiocr import __appname__
from guiocr import PY2
from guiocr import QT5
from guiocr import utils
from guiocr.config import get_config
from guiocr.widgets.main_window_ui import Ui_MainWindow
from guiocr.widgets import *
from guiocr.utils import *
LABEL_COLORMAP = imgviz.label_colormap(value=200)
here = os.path.dirname(os.path.abspath(__file__))
class MainWindow(QMainWindow):
FIT_WINDOW, FIT_WIDTH, MANUAL_ZOOM = 0, 1, 2
def __init__(self):
super().__init__() # 调用父类构造函数,创建QWidget窗体
self.last_selectBtnName = ""
self.last_ComboxText = ""
self._ui = Ui_MainWindow() # 创建ui对象
self._ui.setupUi(self) # 构造ui
self.setWindowTitle(__appname__)
# 加载默认配置
config = get_config()
self._config = config
# 程序数据
self.image = QtGui.QImage()
self.dataDict = {} # 用于保持标注数据
self.imagePath = None
self.recentFiles = []
self.maxRecent = 7
self.otherData = None
self.zoom_level = 100
self.fit_window = False
self.zoom_values = {} # key=filename, value=(zoom_mode, zoom_value)
self.brightnessContrast_values = {}
self.filename = ""
self.output_dir = "./output"
self.lastOpenDir = here
self.imageList = []
self.result = []
self.suffix = ".json"
self.scroll_values = {
Qt.Horizontal: {},
Qt.Vertical: {},
} # key=filename, value=scroll_value
# 线程
self.workThread = QThread()
self.processor = OCR_qt()
self.processor.moveToThread(self.workThread)
self.processor.sendResult.connect(self.onReceiveResults)
self.workThread.started.connect(self.processor.start)
# 单选按钮组
self.checkBtnGroup = QButtonGroup(self)
self.checkBtnGroup.addButton(self._ui.checkBox_ocr)
# self.checkBtnGroup.addButton(self._ui.checkBox_det)
# self.checkBtnGroup.addButton(self._ui.checkBox_recog)
# self.checkBtnGroup.addButton(self._ui.checkBox_layoutparser)
self.checkBtnGroup.setExclusive(True)
# 添加按钮icon
self._ui.btnOpenImg.setIcon(self.getIcon("open_img_grey"))
self._ui.btnOpenDir.setIcon(self.getIcon("folder_open_grey"))
self._ui.btnNext.setIcon(self.getIcon("next_grey"))
self._ui.btnPrev.setIcon(self.getIcon("before_grey"))
# self._ui.btnAddShape.setIcon(self.getIcon("add_grey"))
# self._ui.btnEditShape.setIcon(self.getIcon("edit_grey"))
self._ui.btnSaveAll.setIcon(self.getIcon("done_grey"))
# self._ui.btnBrightness.setIcon(self.getIcon("brightness_grey"))
# self._ui.btnStartProcess.setIcon(self.getIcon("play_white"))
# 按钮响应函数
self._ui.btnOpenImg.clicked.connect(self.openFile)
self._ui.btnOpenDir.clicked.connect(self.openDirDialog)
self._ui.btnNext.clicked.connect(self.openNextImg)
self._ui.btnPrev.clicked.connect(self.openPrevImg)
self._ui.btnStartProcess.clicked.connect(self.startProcess)
self._ui.btnCopyAll.clicked.connect(self.copyToClipboard)
self._ui.btnSaveAll.clicked.connect(self.saveToFile)
# self._ui.btnAddShape.clicked.connect(self.newShape)
# self._ui.btnEditShape.clicked.connect(self.setEditMode)
self._ui.listWidgetResults.itemClicked.connect(self.onItemResultClicked)
# self._ui.listWidgetResults.itemSelectionChanged.connect(self.onItemResultClicked)
self._ui.listWidgetResults.clear()
# self.addResultItem(shape=None,txt="test3")
# 控件布局
"""左侧:区域标签列表"""
self.labelList = LabelListWidget()
self._ui.scrollAreaLabellist.setWidget(self.labelList)
self._ui.scrollAreaLabellist.setWidgetResizable(True)
self.labelList.itemSelectionChanged.connect(self.labelSelectionChanged)
# self.labelList.itemDoubleClicked.connect(self.editLabel)
self.labelList.itemChanged.connect(self.labelItemChanged)
self.labelList.itemDropped.connect(self.labelOrderChanged)
self.labelList.setSelectionMode(QAbstractItemView.MultiSelection) # 设置单选or多选
"""缩放控件"""
self.zoomWidget = ZoomWidget()
self.setAcceptDrops(True)
"""中心画布"""
self.canvas = self.labelList.canvas = Canvas(
epsilon=self._config["epsilon"],
double_click=self._config["canvas"]["double_click"],
num_backups=self._config["canvas"]["num_backups"],
)
self.canvas.zoomRequest.connect(self.zoomRequest)
self.canvas.newShape.connect(self.newShape)
self.canvas.shapeMoved.connect(self.onMoveShape) # self.setDirty)
self.canvas.selectionChanged.connect(self.shapeSelectionChanged)
self.canvas.drawingPolygon.connect(self.toggleDrawingSensitive)
# Callbacks:
self.zoomWidget.valueChanged.connect(self.paintCanvas)
# 滚动缩放区域
self._ui.scrollAreaCanvas.setWidget(self.canvas)
self._ui.scrollAreaCanvas.setWidgetResizable(True)
self.scrollBars = {
Qt.Vertical: self._ui.scrollAreaCanvas.verticalScrollBar(),
Qt.Horizontal: self._ui.scrollAreaCanvas.horizontalScrollBar(),
}
self.canvas.scrollRequest.connect(self.scrollRequest)
# self.setCentralWidget(self._ui.scrollAreaCanvas)
# 设置默认形状颜色
Shape.line_color = QtGui.QColor(*self._config["shape"]["line_color"])
Shape.fill_color = QtGui.QColor(*self._config["shape"]["fill_color"])
Shape.select_line_color = QtGui.QColor(
*self._config["shape"]["select_line_color"]
)
Shape.select_fill_color = QtGui.QColor(
*self._config["shape"]["select_fill_color"]
)
Shape.vertex_fill_color = QtGui.QColor(
*self._config["shape"]["vertex_fill_color"]
)
Shape.hvertex_fill_color = QtGui.QColor(
*self._config["shape"]["hvertex_fill_color"]
)
# Restore application settings.
self.settings = QSettings("app", __appname__)
# actions
self._initActions()
# status bar
self.statusBar().showMessage(str(self.tr("%s started.")) % __appname__)
self.statusBar().show()
# TODO 快捷键设置
def _initActions(self):
# Actions
action = functools.partial(utils.newAction, self)
shortcuts = self._config["shortcuts"]
quit = action(
self.tr("&Quit"),
self.close,
shortcuts["quit"],
"quit",
self.tr("Quit application"),
)
open_ = action(
self.tr("&Open"),
self.openFile,
shortcuts["open"],
"open",
self.tr("Open image or label file"),
)
opendir = action(
self.tr("&Open Dir"),
self.openDirDialog,
shortcuts["open_dir"],
"open",
self.tr(u"Open Dir"),
)
openNextImg = action(
self.tr("&Next Image"),
self.openNextImg,
shortcuts["open_next"],
"next",
self.tr(u"Open next (hold Ctl+Shift to copy labels)"),
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于PyQt5+PaddleOCR实现文字识别python源码.zip基于PyQt5+PaddleOCR实现文字识别python源码.zip基于PyQt5+PaddleOCR实现文字识别python源码.zip基于PyQt5+PaddleOCR实现文字识别python源码.zip基于PyQt5+PaddleOCR实现文字识别python源码.zip基于PyQt5+PaddleOCR实现文字识别python源码.zip 【优质项目推荐】 1.项目代码完整且功能都经验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 2.项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、项目初期立项演示等用途。 4.如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能。 【特别强调】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为因为名字后再运行!有问题私信沟通,祝顺利! 基于PyQt5+PaddleOCR实现文字识别python源码.zip基于PyQt5+PaddleOCR实现文字识别python源码.zip基于PyQt5+PaddleOCR实现文字识别python源码.zip基于PyQt5+PaddleOCR实现文字识别python源码.zip基于PyQt5+PaddleOCR实现文字识别python源码.zip基于PyQt5+PaddleOCR实现文字识别python源码.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于PyQt5+PaddleOCR实现文字识别python源码.zip (63个子文件)
介绍.md 190B
main.py 894B
guiocr
__init__.py 649B
shape.py 9KB
app.py 55KB
utils
__init__.py 753B
qt.py 2KB
shape.py 4KB
image.py 2KB
_io.py 675B
ocr_utils.py 4KB
widgets
__init__.py 562B
main_window_ui.py 14KB
list_item_ui.py 2KB
label_list_widget.py 6KB
file_dialog_preview.py 2KB
brightness_contrast_dialog.py 1KB
canvas.py 32KB
color_dialog.py 1KB
label_dialog.py 8KB
myQListWidgetItem.py 513B
tool_bar.py 972B
main_window.ui 12KB
list_item.ui 2KB
zoom_widget.py 715B
icons
before_grey.png 330B
circle_add_grey.png 2KB
edit_black.png 366B
circle_add_black.png 2KB
done_black.png 478B
close_grey.png 329B
add_grey.png 355B
ic_border_color_black_18dp.png 361B
folder_open_grey.png 289B
help.png 2KB
next_grey.png 324B
edit_grey.png 493B
ic_cancel_grey600_36dp.png 2KB
play_white.png 318B
brightness_grey.png 534B
close.png 3KB
done_grey.png 791B
play_black.png 305B
list_grey.png 435B
ic_cancel_black_48dp.png 2KB
icon.icns 1.08MB
ic_border_color_grey600_18dp.png 465B
open_img_grey.png 350B
list_black.png 350B
close_black.png 301B
logger.py 2KB
imgs
demo2.gif 2.78MB
00057937.jpg 150KB
00006737.jpg 126KB
00056221.jpg 100KB
config
__init__.py 3KB
default_config.yaml 2KB
models
cls
ch
inference.pdmodel 166KB
inference.pdiparams.info 30KB
inference.pdiparams 10.27MB
det
ch
inference.pdmodel 162KB
inference.pdiparams.info 23KB
inference.pdiparams 4.48MB
共 63 条
- 1
资源评论
.whl
- 粉丝: 3907
- 资源: 4858
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR).rar
- OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR)130224.rar
- shopxx_src.rar
- 聊天系统项目全套技术资料100%好用.zip
- tot-jsp-cms.rar
- s2shDemo.rar
- webdgs.rar
- vijun-1.0-release.rar
- 博客系统网站(JSP+SERVLET+MYSQL).rar
- 博客系统网站(JSP+SERVLET+MYSQL)130222.rar
- 博客系统(struts+hibernate+spring)130225.rar
- 超市综合管理信息系统.rar
- 数据爬虫项目全套技术资料100%好用.zip
- 车辆管理系统(struts+hibernate+spring+oracle)130225.rar
- 车辆管理系统(struts+hibernate+spring+oracle).rar
- 共创在线考试系统(JSP+SERVLET).rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功