mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Update keypoints editor to draw angles.
This commit is contained in:
parent
6873f17ea0
commit
29a93a3c68
@ -4,19 +4,21 @@ import time
|
|||||||
import struct
|
import struct
|
||||||
import pygame
|
import pygame
|
||||||
import sys
|
import sys
|
||||||
|
from math import sin, cos, radians
|
||||||
|
|
||||||
SCALE = 2
|
SCALE = 3
|
||||||
|
RED = (255,0,0)
|
||||||
GREEN = (0,255,0)
|
GREEN = (0,255,0)
|
||||||
GRAY = (127, 127, 127)
|
GRAY = (127, 127, 127)
|
||||||
KEYPOINTS_SIZE = 16
|
KEYPOINTS_SIZE = 24
|
||||||
|
|
||||||
def load_keypoints(path):
|
def load_keypoints(path):
|
||||||
kpts = []
|
kpts = []
|
||||||
with open(path, "rb") as f:
|
with open(path, "rb") as f:
|
||||||
size = struct.unpack("<I", f.read(4))[0]
|
size = struct.unpack("<I", f.read(4))[0]
|
||||||
for i in range(0, size):
|
for i in range(0, size):
|
||||||
x, y, score, octave = struct.unpack("<HHHH", f.read(8))
|
x, y, score, octave, angle = struct.unpack("<HHHHH", f.read(10))
|
||||||
kpts.append([x, y, score, octave, False, f.read(32)])
|
kpts.append([x, y, score, octave, angle, False, f.read(32)])
|
||||||
return kpts
|
return kpts
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
@ -65,23 +67,30 @@ if __name__ == '__main__':
|
|||||||
pygame.draw.rect(screen, RED, rect, 1)
|
pygame.draw.rect(screen, RED, rect, 1)
|
||||||
|
|
||||||
for kp in kpts:
|
for kp in kpts:
|
||||||
x, y, score, octave, selected, desc = kp
|
x, y, score, octave, angle, selected, desc = kp
|
||||||
x = x*octave*SCALE
|
x1 = x*SCALE
|
||||||
y = y*octave*SCALE
|
y1 = y*SCALE
|
||||||
kp[4] = selected = rect.collidepoint((x, y))
|
angle = radians(angle)
|
||||||
|
|
||||||
|
size = KEYPOINTS_SIZE/octave
|
||||||
|
x2 = x1 + sin(angle) * size
|
||||||
|
y2 = y1 + cos(angle) * size
|
||||||
|
|
||||||
|
kp[5] = selected = rect.collidepoint((x1, y1))
|
||||||
color = GREEN if selected else GRAY
|
color = GREEN if selected else GRAY
|
||||||
pygame.draw.circle(screen, color, (x, y), KEYPOINTS_SIZE/octave, 1)
|
pygame.draw.circle(screen, color, (x1, y1), size, 1)
|
||||||
|
pygame.draw.line(screen, color, (x1, y1), (x2, y2))
|
||||||
|
|
||||||
if save_selected == True:
|
if save_selected == True:
|
||||||
kpts_sel = []
|
kpts_sel = []
|
||||||
for kp in kpts:
|
for kp in kpts:
|
||||||
if (kp[4]): kpts_sel.append(kp)
|
if (kp[5]): kpts_sel.append(kp)
|
||||||
|
|
||||||
with open("desc_out.orb", "wb") as f:
|
with open("desc_out.orb", "wb") as f:
|
||||||
f.write(struct.pack("<I", len(kpts_sel)))
|
f.write(struct.pack("<I", len(kpts_sel)))
|
||||||
for kp in kpts_sel:
|
for kp in kpts_sel:
|
||||||
x, y, score, octave, selected, desc = kp
|
x, y, score, octave, angle, selected, desc = kp
|
||||||
f.write(struct.pack("<HHHH", x, y, score, octave))
|
f.write(struct.pack("<HHHHH", x, y, score, octave, angle))
|
||||||
f.write(desc)
|
f.write(desc)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user