未验证 提交 80edb0d6 编写于 作者: E Evezerest 提交者: GitHub

Merge pull request #5729 from Evezerest/dygraph

Support multipoint labeling
......@@ -382,7 +382,7 @@ class MainWindow(QMainWindow):
'w', 'objects', getStr('crtBoxDetail'), enabled=False)
delete = action(getStr('delBox'), self.deleteSelectedShape,
'Alt+X', 'delete', getStr('delBoxDetail'), enabled=False)
'backspace', 'delete', getStr('delBoxDetail'), enabled=False)
copy = action(getStr('dupBox'), self.copySelectedShape,
'Ctrl+C', 'copy', getStr('dupBoxDetail'),
......@@ -1939,6 +1939,38 @@ class MainWindow(QMainWindow):
owidth += itemwidget.width()
self.iconlist.setMinimumWidth(owidth + 50)
def gen_quad_from_poly(self, poly):
"""
Generate min area quad from poly.
"""
point_num = poly.shape[0]
min_area_quad = np.zeros((4, 2), dtype=np.float32)
rect = cv2.minAreaRect(poly.astype(
np.int32)) # (center (x,y), (width, height), angle of rotation)
box = np.array(cv2.boxPoints(rect))
first_point_idx = 0
min_dist = 1e4
for i in range(4):
dist = np.linalg.norm(box[(i + 0) % 4] - poly[0]) + \
np.linalg.norm(box[(i + 1) % 4] - poly[point_num // 2 - 1]) + \
np.linalg.norm(box[(i + 2) % 4] - poly[point_num // 2]) + \
np.linalg.norm(box[(i + 3) % 4] - poly[-1])
if dist < min_dist:
min_dist = dist
first_point_idx = i
for i in range(4):
min_area_quad[i] = box[(first_point_idx + i) % 4]
bbox_new = min_area_quad.tolist()
bbox = []
for box in bbox_new:
box = list(map(int, box))
bbox.append(box)
return bbox
def getImglabelidx(self, filePath):
if platform.system() == 'Windows':
spliter = '\\'
......@@ -1973,7 +2005,11 @@ class MainWindow(QMainWindow):
rec_flag = 0
for shape in self.canvas.shapes:
box = [[int(p.x()), int(p.y())] for p in shape.points]
if len(box) > 4:
box = self.gen_quad_from_poly(np.array(box))
assert len(box) == 4
img_crop = get_rotate_crop_image(img, np.array(box, np.float32))
if img_crop is None:
msg = 'Can not recognise the detection box in ' + self.filePath + '. Please change manually'
......@@ -2022,6 +2058,8 @@ class MainWindow(QMainWindow):
img = cv2.imread(self.filePath)
for shape in self.canvas.selectedShapes:
box = [[int(p.x()), int(p.y())] for p in shape.points]
if len(box) > 4:
box = self.gen_quad_from_poly(np.array(box))
assert len(box) == 4
img_crop = get_rotate_crop_image(img, np.array(box, np.float32))
if img_crop is None:
......
......@@ -170,7 +170,7 @@ python PPOCRLabel.py --kie True # [KIE mode] for [detection + recognition + keyw
| Ctrl + R | Re-recognize the selected box |
| Ctrl + C | Copy and paste the selected box |
| Ctrl + Left Mouse Button | Multi select the label box |
| Alt + X | Delete the selected box |
| Backspace | Delete the selected box |
| Ctrl + V | Check image |
| Ctrl + Shift + d | Delete image |
| D | Next image |
......
......@@ -159,7 +159,7 @@ python PPOCRLabel.py --lang ch --kie True # 启动 【KIE 模式】,用于打
| Ctrl + R | 重新识别所选标记 |
| Ctrl + C | 复制并粘贴选中的标记框 |
| Ctrl + 鼠标左键 | 多选标记框 |
| Alt + X | 删除所选框 |
| Backspace | 删除所选框 |
| Ctrl + V | 确认本张图片标记 |
| Ctrl + Shift + d | 删除本张图片 |
| D | 下一张图片 |
......@@ -168,6 +168,7 @@ python PPOCRLabel.py --lang ch --kie True # 启动 【KIE 模式】,用于打
| Ctrl-- | 放大 |
| ↑→↓← | 移动标记框 |
### 3.2 内置模型
- 默认模型:PPOCRLabel默认使用PaddleOCR中的中英文超轻量OCR模型,支持中英文与数字识别,多种语言检测。
......
......@@ -263,7 +263,7 @@ class Canvas(QWidget):
if self.current.isClosed():
# print('1111')
self.finalise()
elif self.drawSquare: # 增加
elif self.drawSquare:
assert len(self.current.points) == 1
self.current.points = self.line.points
self.finalise()
......
......@@ -57,6 +57,7 @@ class Shape(object):
self.locked = False
self.direction = 0
self.center = None
self.epsilon = 5 # same as canvas
self._highlightIndex = None
self._highlightMode = self.NEAR_VERTEX
self._highlightSettings = {
......@@ -98,11 +99,14 @@ class Shape(object):
return False
def addPoint(self, point):
if self.reachMaxPoints():
if self.reachMaxPoints() and self.closeEnough(self.points[0], point):
self.close()
else:
self.points.append(point)
def closeEnough(self, p1, p2):
return distance(p1 - p2) < self.epsilon
def popPoint(self):
if self.points:
return self.points.pop()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册