def __init__(self, parent): super(IdentificationPanel, self).__init__(parent) self.large_person_group_id = str(uuid.uuid1()) self.person_id_names = {} self.person_name_faces = {} self.faces = {} self.face_ids = [] self.vsizer = wx.BoxSizer(wx.VERTICAL) self.panel = scrolled.ScrolledPanel(self) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ('1) Place face images of one person in a folder and give ' 'the folder the same name as that person.\n' '2) Repeat the step above one or more times, creating ' 'different folders for different people.\n' '3) Place all of the person folders in one root folder.\n' '4) Click "Load Group" and select the root folder you ' 'created above.\n' '5) Click "Choose Image" to select a different image ' 'representing one of the people for whom you created ' 'folders above. The face in the image will be framed and ' 'tagged with the name of the person.') self.static_text = wx.StaticText(self.panel, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 0) self.vhsizer = wx.BoxSizer() self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_folder = wx.Button(self.panel, label='Load Group') self.lsizer.Add(self.btn_folder, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseFolder, self.btn_folder) flag = wx.ALIGN_CENTER | wx.ALL | wx.EXPAND self.grid = base.CaptionWrapFaceList(self.panel) self.lsizer.Add(self.grid, 0, flag, 5) self.vhsizer.Add(self.lsizer, 1, wx.EXPAND) self.vhsizer.AddSpacer(90) self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_file = wx.Button(self.panel, label='Choose Image') self.rsizer.Add(self.btn_file, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseImage, self.btn_file) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap = base.MyStaticBitmap(self.panel) self.rsizer.Add(self.bitmap, 0, flag, 5) self.vhsizer.Add(self.rsizer, 1, wx.EXPAND) self.hvsizer.Add(self.vhsizer) self.hsizer.Add(self.hvsizer) self.hsizer.AddStretchSpacer() self.hsizer.Layout() self.panel.SetSizer(self.hsizer) self.panel.Layout() self.panel.SetupScrolling(scroll_x=False) self.vsizer.Add(self.panel, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer) self.btn_file.Disable()
def __init__(self, parent): super(GroupPanel, self).__init__(parent) self.face_paths = [] self.faces = {} self.vsizer = wx.BoxSizer(wx.VERTICAL) self.panel = scrolled.ScrolledPanel(self) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ('Click the button below to select a folder containing face ' 'images.\nThe images will be grouped based on similarity.\n' 'You will see the different groups under the "Grouping ' 'Results" label.') self.static_text = wx.StaticText(self.panel, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 0) self.vhsizer = wx.BoxSizer() self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn = wx.Button(self.panel, label='Group') self.lsizer.Add(self.btn, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseFolder, self.btn) self.grid = base.MyGridStaticBitmap(self.panel, 0, 4, 0, 0) self.lsizer.Add(self.grid, 0, wx.ALL, 5) self.vhsizer.Add(self.lsizer, 1, wx.EXPAND) self.vhsizer.AddSpacer(90) self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.ALIGN_CENTER | wx.EXPAND | wx.ALL self.result_text = wx.StaticText(self.panel, label='Grouping Results:') self.rsizer.Add(self.result_text, 0, flag, 5) self.result = base.GroupResult(self.panel) self.rsizer.Add(self.result, 0, wx.EXPAND) self.vhsizer.Add(self.rsizer, 1, wx.EXPAND) self.hvsizer.Add(self.vhsizer) self.hsizer.Add(self.hvsizer) self.hsizer.AddStretchSpacer() self.hsizer.Layout() self.panel.SetSizer(self.hsizer) self.panel.Layout() self.panel.SetupScrolling(scroll_x=False) self.vsizer.Add(self.panel, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer)
def __init__(self, parent): super(DetectionPanel, self).__init__(parent) self.vsizer = wx.BoxSizer(wx.VERTICAL) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ("To detect faces in an image, click the 'Choose Image' " "button. You will see a rectangle surrounding every face " "that the Face API detects. You will also see a list of " "attributes related to the faces.") self.static_text = wx.StaticText(self, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 5) self.vhsizer = wx.BoxSizer() self.vhsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn = wx.Button(self, label='Choose Image') self.lsizer.Add(self.btn, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseImage, self.btn) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap = base.MyStaticBitmap(self) self.lsizer.Add(self.bitmap, 0, flag, 5) self.vhsizer.Add(self.lsizer, 0, wx.ALIGN_LEFT) self.vhsizer.AddStretchSpacer() self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) style = wx.ALIGN_CENTER flag = wx.ALIGN_CENTER | wx.EXPAND | wx.ALL self.result = wx.StaticText(self, style=style) self.rsizer.Add(self.result, 0, flag, 5) flag = wx.ALIGN_LEFT | wx.EXPAND | wx.ALL self.face_list = base.MyFaceList(self) self.rsizer.Add(self.face_list, 1, flag, 5) self.vhsizer.Add(self.rsizer, 0, wx.EXPAND) self.hvsizer.Add(self.vhsizer) self.hsizer.Add(self.hvsizer, 0) self.hsizer.AddStretchSpacer() self.vsizer.Add(self.hsizer, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer)
def __init__(self, parent): super(IdentificationPanel, self).__init__(parent) self.person_group_id = str(uuid.uuid1()) self.person_id_names = {} self.person_name_faces = {} self.faces = {} self.face_ids = [] self.vsizer = wx.BoxSizer(wx.VERTICAL) self.panel = scrolled.ScrolledPanel(self) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ( "Tell whom an input face belongs to given a tagged person database" ". Here we only handle tagged person database in following " "format: 1). One root folder. 2). Sub-folders are named as " "person's name. 3). Each person's images are put into their own " "sub-folder. Pick the root folder, then choose an image to " "identify, all faces will be shown on the image with the " "identified person's name." ) self.static_text = wx.StaticText(self.panel, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 0) self.vhsizer = wx.BoxSizer() self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_folder = wx.Button(self.panel, label='Load PersonGroup') self.lsizer.Add(self.btn_folder, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseFolder, self.btn_folder) flag = wx.ALIGN_CENTER | wx.ALL | wx.EXPAND self.grid = base.CaptionWrapFaceList(self.panel) self.lsizer.Add(self.grid, 0, flag, 5) self.vhsizer.Add(self.lsizer, 1, wx.EXPAND) self.vhsizer.AddSpacer(90) self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_file = wx.Button(self.panel, label='Choose Image') self.rsizer.Add(self.btn_file, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseImage, self.btn_file) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap = base.MyStaticBitmap(self.panel) self.rsizer.Add(self.bitmap, 0, flag, 5) self.vhsizer.Add(self.rsizer, 1, wx.EXPAND) self.hvsizer.Add(self.vhsizer) self.hsizer.Add(self.hvsizer) self.hsizer.AddStretchSpacer() self.hsizer.Layout() self.panel.SetSizer(self.hsizer) self.panel.Layout() self.panel.SetupScrolling(scroll_x=False) self.vsizer.Add(self.panel, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer) self.btn_file.Disable()
def __init__(self, parent): super(GroupPanel, self).__init__(parent) self.face_paths = [] self.faces = {} self.vsizer = wx.BoxSizer(wx.VERTICAL) self.panel = scrolled.ScrolledPanel(self) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ( "Put similar faces to same group according to appearance " "similarity. You can pick an image folder for grouping by " "'Group', doing this will group all detected faces and shown " "under Grouping Result." ) self.static_text = wx.StaticText(self.panel, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 0) self.vhsizer = wx.BoxSizer() self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn = wx.Button(self.panel, label='Group') self.lsizer.Add(self.btn, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseFolder, self.btn) self.grid = base.MyGridStaticBitmap(self.panel, 0, 4, 0, 0) self.lsizer.Add(self.grid, 0, wx.ALL, 5) self.vhsizer.Add(self.lsizer, 1, wx.EXPAND) self.vhsizer.AddSpacer(90) self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.ALIGN_CENTER | wx.EXPAND | wx.ALL self.result_text = wx.StaticText(self.panel, label='Grouping Results:') self.rsizer.Add(self.result_text, 0, flag, 5) self.result = base.GroupResult(self.panel) self.rsizer.Add(self.result, 0, wx.EXPAND) self.vhsizer.Add(self.rsizer, 1, wx.EXPAND) self.hvsizer.Add(self.vhsizer) self.hsizer.Add(self.hvsizer) self.hsizer.AddStretchSpacer() self.hsizer.Layout() self.panel.SetSizer(self.hsizer) self.panel.Layout() self.panel.SetupScrolling(scroll_x=False) self.vsizer.Add(self.panel, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer)
def __init__(self, parent): super(DetectionPanel, self).__init__(parent) util.CF.BaseUrl.set( "https://emotiontrack.cognitiveservices.azure.com/face/v1.0") util.CF.Key.set("4a1e0d41a8494d71ac0b9028464d8e62") self.vsizer = wx.BoxSizer(wx.VERTICAL) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) # label = ("To detect faces in an image, click the 'Choose Image' " # "button. You will see a rectangle surrounding every face " # "that the Face API detects. You will also see a list of " # "attributes related to the faces.") # self.static_text = wx.StaticText(self, label=label) # self.static_text.Wrap(util.INNER_PANEL_WIDTH) # self.hvsizer.Add(self.static_text, 0, wx.ALL, 5) self.vhsizer = wx.BoxSizer() self.vhsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) # flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL # self.btn = wx.Button(self, label='Choose Image') # self.lsizer.Add(self.btn, 0, flag, 5) # self.Bind(wx.EVT_BUTTON, self.OnChooseImage, self.btn) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap = base.MyStaticBitmap(self) self.lsizer.Add(self.bitmap, 0, flag, 5) self.vhsizer.Add(self.lsizer, 0, wx.ALIGN_LEFT) self.vhsizer.AddStretchSpacer() self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) style = wx.ALIGN_CENTER flag = wx.ALIGN_CENTER | wx.EXPAND | wx.ALL self.result = wx.StaticText(self, style=style) self.rsizer.Add(self.result, 0, flag, 5) flag = wx.ALIGN_LEFT | wx.EXPAND | wx.ALL self.face_list = base.MyFaceList(self) self.rsizer.Add(self.face_list, 1, flag, 5) self.vhsizer.Add(self.rsizer, 0, wx.EXPAND) self.hvsizer.Add(self.vhsizer) self.hsizer.Add(self.hvsizer, 0) self.hsizer.AddStretchSpacer() self.vsizer.Add(self.hsizer, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer) t = threading.Thread(target=self.loop, args=()) t.start()
def __init__(self, parent): super(FindSimilarPanel, self).__init__(parent) self.large_face_list_id = str(uuid.uuid1()) self.face_paths = [] self.detected_face_paths = [] self.faces = {} self.persisted_faces = {} self.vsizer = wx.BoxSizer(wx.VERTICAL) self.panel = scrolled.ScrolledPanel(self) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ('Find faces that are similar to a given face (the query ' 'face).\nClick "Load Candidate Faces" to select a folder ' 'containing images of the faces you want to compare to the ' 'query face.\nNext, click "Open Query Face" to select the ' 'query face image.\nScroll down to see the results ' 'displayed under the query face.\n') self.static_text = wx.StaticText(self.panel, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 0) self.vhsizer = wx.BoxSizer() self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_folder = wx.Button(self.panel, label='Load Candidate Faces') self.lsizer.Add(self.btn_folder, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseFolder, self.btn_folder) flag = wx.ALIGN_CENTER | wx.ALL self.grid = base.MyGridStaticBitmap(self.panel, 0, 4, 0, 0) self.lsizer.Add(self.grid, 0, flag, 5) self.vhsizer.Add(self.lsizer, 1, wx.EXPAND) self.vhsizer.AddSpacer(90) self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_file = wx.Button(self.panel, label='Open Query Face') self.rsizer.Add(self.btn_file, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseImage, self.btn_file) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap = base.MyStaticBitmap(self.panel) self.rsizer.Add(self.bitmap, 0, flag, 5) self.result = base.FindSimilarsResult(self.panel) self.rsizer.Add(self.result, 0, wx.EXPAND) self.vhsizer.Add(self.rsizer, 1, wx.EXPAND) self.hvsizer.Add(self.vhsizer) self.hsizer.Add(self.hvsizer) self.hsizer.AddStretchSpacer() self.hsizer.Layout() self.panel.SetSizer(self.hsizer) self.panel.Layout() self.panel.SetupScrolling(scroll_x=False) self.vsizer.Add(self.panel, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer) self.btn_file.Disable()
def __init__(self, parent): super(VerificationPanel, self).__init__(parent) self.face_ids = { 'face_id': None, 'another_face_id': None, 'person_face_id': None, } self.large_person_group_id = str(uuid.uuid1()) self.person_name = None self.person_id = None self.face_paths = [] self.detected_face_paths = [] self.vsizer = wx.BoxSizer(wx.VERTICAL) self.panel = scrolled.ScrolledPanel(self) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ("Demo 1: Face-to-face verification determines whether " "two faces belong to the same person. Choose two images " "with a single face each. Then click 'Verify' to get " "the verification result.") self.static_text = wx.StaticText(self.panel, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 0) self.vhsizer1 = wx.BoxSizer() self.lsizer1 = wx.BoxSizer(wx.VERTICAL) self.lsizer1.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_face2face_1 = wx.Button(self.panel, label='Choose Image') self.lsizer1.Add(self.btn_face2face_1, 0, flag, 5) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap_face2face_1 = base.MyStaticBitmap(self.panel) self.lsizer1.Add(self.bitmap_face2face_1, 0, flag, 5) self.btn_face2face_1.Bind( wx.EVT_BUTTON, lambda evt: self.OnChooseImage( evt, self.bitmap_face2face_1, 'face_id')) self.vhsizer1.Add(self.lsizer1, 1, wx.EXPAND) self.msizer1 = wx.BoxSizer(wx.VERTICAL) self.msizer1.SetMinSize((90, -1)) self.btn_verify_1 = wx.Button(self.panel, label='Verify') self.msizer1.Add(self.btn_verify_1, 0, wx.EXPAND | wx.ALL, 5) self.result_1 = wx.StaticText(self.panel, label='Results:') self.msizer1.Add(self.result_1, 0, wx.EXPAND | wx.ALL, 5) self.btn_verify_1.Bind( wx.EVT_BUTTON, lambda evt: self.OnVerify(evt, 'face2face', self.result_1)) self.vhsizer1.Add(self.msizer1, 0, wx.ALIGN_CENTER | wx.ALL, 5) self.rsizer1 = wx.BoxSizer(wx.VERTICAL) self.rsizer1.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_face2face_2 = wx.Button(self.panel, label='Choose Image') self.rsizer1.Add(self.btn_face2face_2, 0, flag, 5) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap_face2face_2 = base.MyStaticBitmap(self.panel) self.rsizer1.Add(self.bitmap_face2face_2, 0, flag, 5) self.btn_face2face_2.Bind( wx.EVT_BUTTON, lambda evt: self.OnChooseImage( evt, self.bitmap_face2face_2, 'another_face_id')) self.vhsizer1.Add(self.rsizer1, 1, wx.EXPAND) self.hvsizer.Add(self.vhsizer1) label = ("Demo 2: Face-to-person verification determines whether a " "face belongs to a given person. Click 'Load Person' to " "pick a folder containing the images of one person's face. " "Next, click 'Choose Image' to pick a face image of the " "same person (or of a different person). Finally, click " "'Verify' to see the verification result.") self.static_text = wx.StaticText(self.panel, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 0) self.vhsizer2 = wx.BoxSizer() self.lsizer2 = wx.BoxSizer(wx.VERTICAL) self.lsizer2.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_face2person_1 = wx.Button(self.panel, label='Load Person') self.lsizer2.Add(self.btn_face2person_1, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseFolder, self.btn_face2person_1) flag = wx.ALIGN_CENTER | wx.ALL self.grid = base.MyGridStaticBitmap(self.panel, 0, 4, 0, 0) self.lsizer2.Add(self.grid, 0, flag, 5) self.vhsizer2.Add(self.lsizer2, 1, wx.EXPAND) self.msizer2 = wx.BoxSizer(wx.VERTICAL) self.msizer2.SetMinSize((90, -1)) self.btn_verify_2 = wx.Button(self.panel, label='Verify') self.msizer2.Add(self.btn_verify_2, 0, wx.EXPAND | wx.ALL, 5) self.result_2 = wx.StaticText(self.panel, label='Results:') self.msizer2.Add(self.result_2, 0, wx.EXPAND | wx.ALL, 5) self.btn_verify_2.Bind( wx.EVT_BUTTON, lambda evt: self.OnVerify(evt, 'face2person', self.result_2)) self.vhsizer2.Add(self.msizer2, 0, wx.ALIGN_CENTER | wx.ALL, 5) self.rsizer2 = wx.BoxSizer(wx.VERTICAL) self.rsizer2.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_face2person_2 = wx.Button(self.panel, label='Choose Image') self.rsizer2.Add(self.btn_face2person_2, 0, flag, 5) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap_face2person = base.MyStaticBitmap(self.panel) self.rsizer2.Add(self.bitmap_face2person, 0, flag, 5) self.btn_face2person_2.Bind( wx.EVT_BUTTON, lambda evt: self.OnChooseImage( evt, self.bitmap_face2person, 'person_face_id')) self.vhsizer2.Add(self.rsizer2, 1, wx.EXPAND) self.hvsizer.Add(self.vhsizer2) self.hsizer.Add(self.hvsizer) self.hsizer.AddStretchSpacer() self.hsizer.Layout() self.panel.SetSizer(self.hsizer) self.panel.Layout() self.panel.SetupScrolling(scroll_x=False) self.vsizer.Add(self.panel, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer) self.btn_verify_1.Disable() self.btn_verify_2.Disable()
def __init__(self, parent): super(VideoPanel, self).__init__(parent) self.vsizer = wx.BoxSizer(wx.VERTICAL) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ("To detect faces in an image, click the 'Choose Image' " "button. You will see a rectangle surrounding every face " "that the Face API detects. You will also see a list of " "attributes related to the faces.") self.static_text = wx.StaticText(self, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 5) ### SETTINGS table label = 'Settings table : ' self.settings_table_label = wx.StaticText(self, label=label) self.hvsizer.Add(self.settings_table_label, 0, wx.ALL, 5) subgridsizer = wx.GridSizer(rows=2, cols=2, hgap=5, vgap=5) # Time sleep flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.FIXED_MINSIZE label = 'Time sleep : ' self.settings_table_time_label = wx.StaticText(self, label=label) subgridsizer.Add(self.settings_table_time_label, flag=flag, border=5) flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL time_sleep = util.CF.util.TIME_SLEEP self.settings_table_time_text = wx.TextCtrl(self, size=(-1, -1)) self.settings_table_time_text.SetValue(float.__str__(time_sleep)) subgridsizer.Add(self.settings_table_time_text, 1, flag=flag, border=5) # Time frame flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.FIXED_MINSIZE label = 'Time frame : ' self.settings_table_time_frame_label = wx.StaticText(self, label=label) subgridsizer.Add(self.settings_table_time_frame_label, flag=flag, border=5) flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL time_frame = util.CF.util.TIME_SLEEP self.settings_table_time_frame_text = wx.TextCtrl(self, size=(-1, -1)) self.settings_table_time_frame_text.SetValue(float.__str__(time_frame)) subgridsizer.Add(self.settings_table_time_frame_text, 1, flag=flag, border=5) flag = wx.EXPAND | wx.TOP | wx.BOTTOM self.hvsizer.Add(subgridsizer, flag=flag, border=5) self.vhsizer = wx.BoxSizer() self.vhsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn = wx.Button(self, label='Choose Video') self.lsizer.Add(self.btn, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseVideo, self.btn) self.vhsizer.Add(self.lsizer, 0, wx.ALIGN_LEFT) self.vhsizer.AddStretchSpacer() self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) style = wx.ALIGN_CENTER flag = wx.ALIGN_CENTER | wx.EXPAND | wx.ALL self.result = wx.StaticText(self, style=style) self.rsizer.Add(self.result, 0, flag, 5) self.vhsizer.Add(self.rsizer, 0, wx.EXPAND) self.hvsizer.Add(self.vhsizer) flag = wx.ALIGN_CENTER | wx.EXPAND | wx.ALL self.plot = base.Plot(self) self.hvsizer.Add(self.plot, 1, flag, 5) self.hsizer.Add(self.hvsizer, 0) self.hsizer.AddStretchSpacer() self.vsizer.Add(self.hsizer, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer)
def __init__(self, parent): super(DetectionPanel, self).__init__(parent) self.vsizer = wx.BoxSizer(wx.VERTICAL) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ( "Locate faces in an image. You can pick an image by 'Choose Image" "'. Detected faces will be shown on the image by rectangles " "surrounding the face, and related attributes will be shown in a " "list.") self.static_text = wx.StaticText(self, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 5) self.vhsizer = wx.BoxSizer() self.vhsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn = wx.Button(self, label='Choose Image') self.lsizer.Add(self.btn, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseImage, self.btn) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap = base.MyStaticBitmap(self) self.lsizer.Add(self.bitmap, 0, flag, 5) self.vhsizer.Add(self.lsizer, 0, wx.ALIGN_LEFT) self.vhsizer.AddStretchSpacer() self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) style = wx.ALIGN_CENTER flag = wx.ALIGN_CENTER | wx.EXPAND | wx.ALL self.result = wx.StaticText(self, style=style) self.rsizer.Add(self.result, 0, flag, 5) flag = wx.ALIGN_LEFT | wx.EXPAND | wx.ALL self.face_list = base.MyFaceList(self) self.rsizer.Add(self.face_list, 1, flag, 5) self.vhsizer.Add(self.rsizer, 0, wx.EXPAND) self.hvsizer.Add(self.vhsizer) self.hsizer.Add(self.hvsizer, 0) self.hsizer.AddStretchSpacer() self.vsizer.Add(self.hsizer, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer)
def __init__(self, parent): super(DetectionPanel, self).__init__(parent) self.detection_init = base.DetectionModel() self.vsizer = wx.BoxSizer(wx.VERTICAL) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ( "To detect and mask objects in image, click the 'Choose Image' " "button. You will see a shape and box surrounding every object location." ) self.static_text = wx.StaticText(self, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 5) self.vhsizer = wx.BoxSizer() self.vhsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn = wx.Button(self, label='Choose Image') self.lsizer.Add(self.btn, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseImage, self.btn) flag = wx.ALIGN_CENTER | wx.ALL # Set up the place to place image element self.bitmap = base.MyStaticBitmap(self) self.lsizer.Add(self.bitmap, 0, flag, 5) self.vhsizer.Add(self.lsizer, 0, wx.ALIGN_LEFT) self.vhsizer.AddStretchSpacer() self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) style = wx.ALIGN_CENTER flag = wx.ALIGN_CENTER | wx.EXPAND | wx.ALL self.result = wx.StaticText(self, style=style) self.rsizer.Add(self.result, 0, flag, 5) flag = wx.ALIGN_LEFT | wx.EXPAND | wx.ALL self.vhsizer.Add(self.rsizer, 0, wx.EXPAND) self.hvsizer.Add(self.vhsizer) self.hsizer.Add(self.hvsizer, 0) self.hsizer.AddStretchSpacer() self.vsizer.Add(self.hsizer, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer)
def __init__(self, parent): super(VerificationPanel, self).__init__(parent) self.face_ids = { 'face_id': None, 'another_face_id': None, 'person_face_id': None, } self.person_group_id = str(uuid.uuid1()) self.person_name = None self.person_id = None self.face_paths = [] self.detected_face_paths = [] self.vsizer = wx.BoxSizer(wx.VERTICAL) self.panel = scrolled.ScrolledPanel(self) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ( "Demo 1: Face to Face Verification determines whether two faces" "belong to the same person. You can pick single face image, the" "detected face will be shown on the image. Then click 'Verify' to" "get the verification result.") self.static_text = wx.StaticText(self.panel, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 0) self.vhsizer1 = wx.BoxSizer() self.lsizer1 = wx.BoxSizer(wx.VERTICAL) self.lsizer1.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_face2face_1 = wx.Button(self.panel, label='Choose Image') self.lsizer1.Add(self.btn_face2face_1, 0, flag, 5) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap_face2face_1 = base.MyStaticBitmap(self.panel) self.lsizer1.Add(self.bitmap_face2face_1, 0, flag, 5) self.btn_face2face_1.Bind( wx.EVT_BUTTON, lambda evt: self.OnChooseImage( evt, self.bitmap_face2face_1, 'face_id')) self.vhsizer1.Add(self.lsizer1, 1, wx.EXPAND) self.msizer1 = wx.BoxSizer(wx.VERTICAL) self.msizer1.SetMinSize((90, -1)) self.btn_verify_1 = wx.Button(self.panel, label='Verify') self.msizer1.Add(self.btn_verify_1, 0, wx.EXPAND | wx.ALL, 5) self.result_1 = wx.StaticText(self.panel, label='Results:') self.msizer1.Add(self.result_1, 0, wx.EXPAND | wx.ALL, 5) self.btn_verify_1.Bind( wx.EVT_BUTTON, lambda evt: self.OnVerify(evt, 'face2face', self.result_1)) self.vhsizer1.Add(self.msizer1, 0, wx.ALIGN_CENTER | wx.ALL, 5) self.rsizer1 = wx.BoxSizer(wx.VERTICAL) self.rsizer1.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_face2face_2 = wx.Button(self.panel, label='Choose Image') self.rsizer1.Add(self.btn_face2face_2, 0, flag, 5) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap_face2face_2 = base.MyStaticBitmap(self.panel) self.rsizer1.Add(self.bitmap_face2face_2, 0, flag, 5) self.btn_face2face_2.Bind( wx.EVT_BUTTON, lambda evt: self.OnChooseImage( evt, self.bitmap_face2face_2, 'another_face_id')) self.vhsizer1.Add(self.rsizer1, 1, wx.EXPAND) self.hvsizer.Add(self.vhsizer1) label = ( "Demo 2: Face to person verification determines whether one face " "belongs to one person. You can pick an image folder containing " "one person's single face, and another single face image. Then " "click 'Verify' to get the verification result.") self.static_text = wx.StaticText(self.panel, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 0) self.vhsizer2 = wx.BoxSizer() self.lsizer2 = wx.BoxSizer(wx.VERTICAL) self.lsizer2.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_face2person_1 = wx.Button(self.panel, label='Load Person') self.lsizer2.Add(self.btn_face2person_1, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseFolder, self.btn_face2person_1) flag = wx.ALIGN_CENTER | wx.ALL self.grid = base.MyGridStaticBitmap(self.panel, 0, 4, 0, 0) self.lsizer2.Add(self.grid, 0, flag, 5) self.vhsizer2.Add(self.lsizer2, 1, wx.EXPAND) self.msizer2 = wx.BoxSizer(wx.VERTICAL) self.msizer2.SetMinSize((90, -1)) self.btn_verify_2 = wx.Button(self.panel, label='Verify') self.msizer2.Add(self.btn_verify_2, 0, wx.EXPAND | wx.ALL, 5) self.result_2 = wx.StaticText(self.panel, label='Results:') self.msizer2.Add(self.result_2, 0, wx.EXPAND | wx.ALL, 5) self.btn_verify_2.Bind( wx.EVT_BUTTON, lambda evt: self.OnVerify(evt, 'face2person', self.result_2)) self.vhsizer2.Add(self.msizer2, 0, wx.ALIGN_CENTER | wx.ALL, 5) self.rsizer2 = wx.BoxSizer(wx.VERTICAL) self.rsizer2.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_face2person_2 = wx.Button(self.panel, label='Choose Image') self.rsizer2.Add(self.btn_face2person_2, 0, flag, 5) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap_face2person = base.MyStaticBitmap(self.panel) self.rsizer2.Add(self.bitmap_face2person, 0, flag, 5) self.btn_face2person_2.Bind( wx.EVT_BUTTON, lambda evt: self.OnChooseImage( evt, self.bitmap_face2person, 'person_face_id')) self.vhsizer2.Add(self.rsizer2, 1, wx.EXPAND) self.hvsizer.Add(self.vhsizer2) self.hsizer.Add(self.hvsizer) self.hsizer.AddStretchSpacer() self.hsizer.Layout() self.panel.SetSizer(self.hsizer) self.panel.Layout() self.panel.SetupScrolling(scroll_x=False) self.vsizer.Add(self.panel, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer) self.btn_verify_1.Disable() self.btn_verify_2.Disable()
def __init__(self, parent): super(FindSimilarPanel, self).__init__(parent) self.face_list_id = str(uuid.uuid1()) self.face_list_name = self.face_list_id self.face_paths = [] self.detected_face_paths = [] self.faces = {} self.persisted_faces = {} self.vsizer = wx.BoxSizer(wx.VERTICAL) self.panel = scrolled.ScrolledPanel(self) self.hsizer = wx.BoxSizer() self.hsizer.AddStretchSpacer() self.hvsizer = wx.BoxSizer(wx.VERTICAL) self.hvsizer.SetMinSize((util.INNER_PANEL_WIDTH, -1)) label = ( "Find similar faces for the query face from all the candidates. " "You can pick an image folder, and all detected faces inside the " "folder will be treated as candidate. Use 'Open Query Face' to " "pick the query faces. The result will be list as 'query face's " "thumbnail', 'similar faces' thumbnails with similarity ranked'. " "Both of 'MatchPerson' mode and 'MatchFace' mode results will be " "listed. 'MatchPerson' mode return the top candidate faces among " "those recognized as the same person with the query face, so if " "no candidate faces are recognized as the same person with the " "query face, no one will be returned, while 'MatchFace' mode " "returns the top candidate faces with highest similarity " "confidence without checking if the returned face belong to the " "same person with the query face. ") self.static_text = wx.StaticText(self.panel, label=label) self.static_text.Wrap(util.INNER_PANEL_WIDTH) self.hvsizer.Add(self.static_text, 0, wx.ALL, 0) self.vhsizer = wx.BoxSizer() self.lsizer = wx.BoxSizer(wx.VERTICAL) self.lsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_folder = wx.Button(self.panel, label='Load Candidate Faces') self.lsizer.Add(self.btn_folder, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseFolder, self.btn_folder) flag = wx.ALIGN_CENTER | wx.ALL self.grid = base.MyGridStaticBitmap(self.panel, 0, 4, 0, 0) self.lsizer.Add(self.grid, 0, flag, 5) self.vhsizer.Add(self.lsizer, 1, wx.EXPAND) self.vhsizer.AddSpacer(90) self.rsizer = wx.BoxSizer(wx.VERTICAL) self.rsizer.SetMinSize((util.MAX_IMAGE_SIZE, -1)) flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL self.btn_file = wx.Button(self.panel, label='Open Query Face') self.rsizer.Add(self.btn_file, 0, flag, 5) self.Bind(wx.EVT_BUTTON, self.OnChooseImage, self.btn_file) flag = wx.ALIGN_CENTER | wx.ALL self.bitmap = base.MyStaticBitmap(self.panel) self.rsizer.Add(self.bitmap, 0, flag, 5) self.result = base.FindSimilarsResult(self.panel) self.rsizer.Add(self.result, 0, wx.EXPAND) self.vhsizer.Add(self.rsizer, 1, wx.EXPAND) self.hvsizer.Add(self.vhsizer) self.hsizer.Add(self.hvsizer) self.hsizer.AddStretchSpacer() self.hsizer.Layout() self.panel.SetSizer(self.hsizer) self.panel.Layout() self.panel.SetupScrolling(scroll_x=False) self.vsizer.Add(self.panel, 3, wx.EXPAND) self.log = base.MyLog(self) self.vsizer.Add(self.log, 1, wx.EXPAND) self.SetSizerAndFit(self.vsizer) self.btn_file.Disable()