# -*- coding: utf-8 -*-
# This is supposed to be pristine, it turns out to be mostly clutter
from __future__ import absolute_import, division, print_function
import six # NOQA
from ibeis._devscript import devcmd, devprecmd
from six.moves import zip
from os.path import split, join, expanduser
from plottool import draw_func2 as df2
import numpy as np
import utool
import vtool.keypoint as ktool
from ibeis import sysres
from ibeis.other import ibsfuncs
from ibeis.viz import interact
from ibeis.dbio import ingest_hsdb
[docs]def test_openworkdirs():
"""
problems:
PZ_DanExt_All
PZ_DanExt_Test
GZ_March2012
Wildebeest_ONLY_MATCHES
python dev.py --convert --dbdir /raid/work/PZ_Marianne --force-delete
python dev.py --convert --dbdir /raid/work/SL_Siva --force-delete
python dev.py --convert --dbdir /raid/work/PZ_SweatwaterSmall --force-delete
"""
canskip = [
'/raid/work/NAUT_test2', '/raid/work/WD_Siva',
'/raid/work/PZ_FlankHack', '/raid/work/PZ_Mothers',
'/raid/work/GZ_Foals', '/raid/work/PZ_MTEST', '/raid/work/GIR_Tanya',
'/raid/work/GZ_Siva', '/raid/work/Wildebeest', '/raid/work/sonograms',
'/raid/work/MISC_Jan12', '/raid/work/GZ_Master0',
'/raid/work/LF_OPTIMIZADAS_NI_V_E', '/raid/work/LF_Bajo_bonito',
'/raid/work/Frogs', '/raid/work/GZ_ALL', '/raid/work/JAG_Kelly',
'/raid/work/NAUT_test (copy)', '/raid/work/WS_hard',
'/raid/work/WY_Toads', '/raid/work/NAUT_Dan',
'/raid/work/LF_WEST_POINT_OPTIMIZADAS', '/raid/work/Seals',
'/raid/work/Rhinos_Stewart', '/raid/work/Elephants_Stewart',
'/raid/work/NAUT_test',
]
import ibeis
from ibeis.init import sysres
import os
import utool as ut # NOQA
from os.path import join
from ibeis.dbio import ingest_hsdb
import ibeis.other.dbinfo
ibeis.other.dbinfo.rrr()
workdir = sysres.get_workdir()
dbname_list = os.listdir(workdir)
dbpath_list = [join(workdir, name) for name in dbname_list]
is_hsdb_list = list(map(ingest_hsdb.is_hsdb, dbpath_list))
hsdb_list = ut.compress(dbpath_list, is_hsdb_list)
#is_ibs_cvt_list = np.array(list(map(is_succesful_convert, dbpath_list)))
regen_cmds = []
for hsdb_dpath in hsdb_list:
if hsdb_dpath in canskip:
continue
try:
ibs = ibeis.opendb(hsdb_dpath) # NOQA
print('Succesfully opened hsdb: ' + hsdb_dpath)
print(ibs.get_dbinfo_str())
except Exception as ex:
ut.printex(ex, 'Failed to convert hsdb: ' + hsdb_dpath)
regen_cmd = 'python dev.py --convert --dbdir ' + hsdb_dpath
regen_cmds.append(regen_cmd)
print('\n'.join(regen_cmds))
@devcmd
def vdd(ibs=None, qaid_list=None):
utool.view_directory(ibs.get_dbdir())
@devcmd('show')
def show_aids(ibs, qaid_list):
for aid in qaid_list:
interact.ishow_chip(ibs, aid, fnum=df2.next_fnum())
@devcmd()
def change_names(ibs, qaid_list):
""" Test to changes names """
#next_name = utool.get_argval('--name', str, default='<name>_the_<species>')
next_name = utool.get_argval('--name', str, default='glob')
for aid in qaid_list:
ibs.print_name_table()
#(nid,) = ibs.add_names((next_name,))
ibs.set_annot_names(aid, next_name)
ibs.print_name_table()
ibs.print_annotation_table()
# FIXME:
#new_nid = ibs.get_name_rowids_from_text(next_name, ensure=False)
#if back is not None:
#back.select_nid(new_nid)
@devcmd('query')
def query_aids(ibs, qaid_list, daid_list=None):
"""
CommandLine:
python dev.py -w --show -t query --db PZ_MTEST --qaid 72
"""
import ibeis
if daid_list is None:
daid_list = ibs.get_valid_aids()
qres_list = ibs.query_chips(qaid_list, daid_list)
for qres in qres_list:
assert isinstance(qres, ibeis.algo.hots.hots_query_result.QueryResult)
qres.ishow_top(ibs, fnum=df2.next_fnum(), annot_mode=1, make_figtitle=True)
@devcmd('sver')
def sver_aids(ibs, qaid_list, daid_list=None):
"""
CommandLine:
python dev.py -w --show -t sver --db PZ_MTEST --qaid 72
python dev.py -w --show -t sver --db PZ_MTEST --qaid 1
"""
if daid_list is None:
daid_list = ibs.get_valid_aids()
qres_list = ibs.query_chips(qaid_list, daid_list)
for qres in qres_list:
aid2 = qres.get_top_aids()[0]
interact.ishow_sver(ibs, qres.qaid, aid2, fnum=df2.next_fnum(), annot_mode=1)
@devcmd('cfg')
def printcfg(ibs):
ibs.cfg.printme3()
print(ibs.cfg.query_cfg.get_cfgstr())
@devcmd('listdbs', 'list_dbs')
def list_dbs(*args):
ibsdb_list = sorted(sysres.get_ibsdb_list())
print('IBEIS Databases:')
print('\n'.join(ibsdb_list))
@devcmd('list_hsdbs')
def list_unconverted_hsdbs(*args):
needs_convert_hsdbs = ingest_hsdb.get_unconverted_hsdbs()
print('NEEDS CONVERSION:')
print('\n'.join(needs_convert_hsdbs))
@devcmd('convertall')
def convert_hsdbs(*args):
ingest_hsdb.ingest_unconverted_hsdbs_in_workdir()
@devcmd
def delete_cache(ibs, *args):
ibs.delete_cache()
@devcmd
def delete_all_feats(ibs, *args):
ibsfuncs.delete_all_features(ibs)
@devcmd
def delete_all_chips(ibs, *args):
ibsfuncs.delete_all_chips(ibs)
@devprecmd('mtest')
def ensure_mtest():
"""
CommandLine:
python dev.py -t mtest
"""
import ibeis
ibeis.ensure_pz_mtest()
@devprecmd('nauts')
def ensure_nauts():
"""
CommandLine:
python dev.py -t nauts
"""
import ibeis
ibeis.ensure_nauts()
@devprecmd('wds')
def ensure_wilddogs():
"""
CommandLine:
python dev.py -t wds
"""
import ibeis
ibeis.ensure_wilddogs()
MOTHERS_VIEWPOINT_EXPORT_PAIRS = [
[117, 115],
[72, 70],
[45, 43],
]
GZ_VIEWPOINT_EXPORT_PAIRS = [
[495, 559],
[558, 152],
]
[docs]def export(ibs, aid_pairs=None):
"""
3 - 4 different animals
2 views of each
matching keypoint coordinates on each annotation
"""
if aid_pairs is None:
if ibs.get_dbname() == 'PZ_MOTHERS':
aid_pair_list = MOTHERS_VIEWPOINT_EXPORT_PAIRS
if ibs.get_dbname() == 'GZ_ALL':
aid_pair_list = GZ_VIEWPOINT_EXPORT_PAIRS
ibs.update_query_cfg(ratio_thresh=1.6)
export_path = expanduser('~/Dropbox/Assignments/dataset')
#utool.view_directory(export_path)
# MOTHERS EG:
for aid_pair in aid_pair_list:
qres_list = ibs.query_chips(aid_pair, aid_pair)
#ibeis.viz.show_qres(ibs, qaid2_qres.values()[1]); df2.iup()
mrids_list = []
mkpts_list = []
for qres in qres_list:
qaid = qres.qaid
print('Getting kpts from %r' % qaid)
#qres.show_top(ibs)
posrid_list = utool.ensure_iterable(qres.get_classified_pos())
mrids_list.extend([(qaid, posrid) for posrid in posrid_list])
mkpts_list.extend(qres.get_matching_keypoints(ibs, posrid_list))
mkey2_kpts = {}
for mrids_tup, mkpts_tup in zip(mrids_list, mkpts_list):
assert len(mrids_tup) == 2, 'must be a match tuple'
mrids_ = np.array(mrids_tup)
sortx = mrids_.argsort()
mrids_ = mrids_[sortx]
mkpts_ = np.array(mkpts_tup)[sortx]
if sortx[0] == 0:
pass
mkey = tuple(mrids_.tolist())
try:
kpts_list = mkey2_kpts[mkey]
print('append to mkey=%r' % (mkey,))
except KeyError:
print('new mkey=%r' % (mkey,))
kpts_list = []
kpts_list.append(mkpts_)
mkey2_kpts[mkey] = kpts_list
mkeys_list = mkey2_kpts.keys()
mkeys_keypoints = mkey2_kpts.values()
for mkeys, mkpts_list in zip(mkeys_list, mkeys_keypoints):
print(mkeys)
print(len(kpts_list))
kpts1_m = np.vstack([mkpts[0] for mkpts in mkpts_list])
kpts2_m = np.vstack([mkpts[1] for mkpts in mkpts_list])
match_lines = [
repr(
(
tuple(kp1[ktool.LOC_DIMS].tolist()),
tuple(kp2[ktool.LOC_DIMS].tolist()),
)
) + ', '
for kp1, kp2 in zip(kpts1_m, kpts2_m)]
mcpaths_list = ibs.get_annot_chip_fpath(mkeys)
fnames_list = list(map(lambda x: split(x)[1], mcpaths_list))
for path in mcpaths_list:
utool.copy(path, export_path)
header_lines = ['# Exported keypoint matches (might be duplicates matches)',
'# matching_aids = %r' % (mkey,)]
header_lines += ['# img%d = %r' % (count, fname) for count, fname in enumerate(fnames_list)]
header_lines += ['# LINE FORMAT: match_pts = [(img1_xy, img2_xy) ... ]']
header_text = '\n'.join(header_lines)
match_text = '\n'.join(['match_pts = ['] + match_lines + [']'])
matchfile_text = '\n'.join([header_text, match_text])
matchfile_name = ('match_aids(%d,%d).txt' % mkey)
matchfile_path = join(export_path, matchfile_name)
utool.write_to(matchfile_path, matchfile_text)
print(header_text)
print(utool.truncate_str(match_text, maxlen=500))