Skip to content

Commit 3648989

Browse files
committed
add: [core] Adding a distance only algorithm, using already present features. COMMIT EXAMPLE OF HOW TO DO IT ! Very useful ! Algorithm : RANSAC + ORB + Geometrical verifications
1 parent 6037a51 commit 3648989

File tree

5 files changed

+438
-8
lines changed

5 files changed

+438
-8
lines changed

carlhauser_server/Configuration/distance_engine_conf.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ class BOW_CMP_HIST(JSON_parsable_Enum, Enum):
99
BHATTACHARYYA = auto()
1010

1111

12+
13+
class RANSAC_METHOD(JSON_parsable_Enum, Enum):
14+
CORREL = auto() # Standard
15+
BHATTACHARYYA = auto()
16+
17+
1218
class Default_distance_engine_conf(JSON_parsable_Dict):
1319
def __init__(self):
1420
# Inputs
@@ -23,9 +29,13 @@ def __init__(self):
2329
# ORB PARAMETERS
2430
self.CROSSCHECK: bool = True
2531

26-
# Bow_ORB PARAMETERS
32+
# BOW_ORB PARAMETERS
2733
self.BOW_CMP_HIST = BOW_CMP_HIST.CORREL.name
2834

35+
# RANSAC_ORB
36+
self.MATCHES_THRESHOLD_TO_ACCELERATE = 0.65
37+
self.MIN_NB_MATCHES_TO_FIND_HOMOGRAPHY = 10
38+
2939

3040
def parse_from_dict(conf):
3141
tmp_conf = Default_distance_engine_conf()

carlhauser_server/Configuration/feature_extractor_conf.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -35,27 +35,30 @@ def __init__(self):
3535

3636
# HASH parameters
3737
self.A_HASH: Algo_conf = Algo_conf("A_HASH", False, 0.02, 0.08, distance_weight=1)
38-
self.P_HASH: Algo_conf = Algo_conf("P_HASH", True, 0.08, 0.08, distance_weight=1) # True
38+
self.P_HASH: Algo_conf = Algo_conf("P_HASH", False, 0.08, 0.08, distance_weight=1) # True
3939
self.P_HASH_SIMPLE: Algo_conf = Algo_conf("P_HASH_SIMPLE", False, 0.04, 0.06, distance_weight=1)
40-
self.D_HASH: Algo_conf = Algo_conf("D_HASH", True, 0.04, 0.08, distance_weight=1) # True
40+
self.D_HASH: Algo_conf = Algo_conf("D_HASH", False, 0.04, 0.08, distance_weight=1) # True
4141
self.D_HASH_VERTICAL: Algo_conf = Algo_conf("D_HASH_VERTICAL", False, 0.04, 0.04, distance_weight=1)
4242
self.W_HASH: Algo_conf = Algo_conf("W_HASH", False, 0.06, 0.08, distance_weight=1)
43-
self.TLSH: Algo_conf = Algo_conf("TLSH", True, 0.16, 0.18, distance_weight=1) # True
43+
self.TLSH: Algo_conf = Algo_conf("TLSH", False, 0.16, 0.18, distance_weight=1) # True
4444

4545
# Visual Descriptors parameters
46-
self.ORB: Algo_conf = Algo_conf("ORB", False, 0.0, 0.2, distance_weight=5) # True
46+
self.ORB: Algo_conf = Algo_conf("ORB", False, 0.0, 0.2, distance_weight=5) # False
4747
self.ORB_KEYPOINTS_NB: int = 500
4848

49-
self.BOW_ORB: Algo_conf = Algo_conf("BOW_ORB", True, 0.08, 0.32, distance_weight=5) # True
49+
self.BOW_ORB: Algo_conf = Algo_conf("BOW_ORB", False, 0.08, 0.32, distance_weight=5) # True
5050
self.BOW_VOCAB_PATH: pathlib.Path = get_homedir() / "vocab.npy"
5151

52+
self.RANSAC_ORB: Algo_conf = Algo_conf("RANSAC_ORB", True, 0.08, 0.32, distance_weight=10) # False
53+
5254
# Algo list # /! IMPORTANT !\ BE-AWARE THAT /! IMPORTANT !\
5355
# IF YOU MODIFY PROGRAMMATICALLY ONE ELEMENT LATER, YOU NEED TO CHANGE IT IN THIS LIST TOO !
5456
self.list_algos: List[Algo_conf] = [self.A_HASH, self.P_HASH, self.P_HASH_SIMPLE,
5557
self.D_HASH, self.D_HASH_VERTICAL, self.W_HASH,
5658
self.TLSH,
5759
self.ORB,
58-
self.BOW_ORB]
60+
self.BOW_ORB,
61+
self.RANSAC_ORB]
5962

6063
# Merging method
6164
self.DISTANCE_MERGING_METHOD: Distance_MergingMethod = Distance_MergingMethod.WEIGHTED_MEAN.name

carlhauser_server/DistanceEngine/distance_engine.py

+12
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import carlhauser_server.DistanceEngine.distance_hash as distance_hash
1313
import carlhauser_server.DistanceEngine.distance_orb as distance_orb
1414
import carlhauser_server.DistanceEngine.distance_bow_orb as distance_bow_orb
15+
import carlhauser_server.DistanceEngine.distance_ransac_orb as distance_ransac_orb
1516
import carlhauser_server.DistanceEngine.merging_engine as merging_engine
1617
import carlhauser_server.DistanceEngine.scoring_datastrutures as scoring_datastrutures
1718
from common.CustomException import AlgoFeatureNotPresentError
@@ -43,6 +44,9 @@ def __init__(self, parent: database_worker, db_conf: database_conf.Default_datab
4344
self.distance_hash = distance_hash.Distance_Hash(db_conf, dist_conf, fe_conf)
4445
self.distance_orb = distance_orb.Distance_ORB(db_conf, dist_conf, fe_conf)
4546
self.distance_bow_orb = distance_bow_orb.Distance_BoW_ORB(db_conf, dist_conf, fe_conf)
47+
self.distance_ransac_orb = distance_ransac_orb.Distance_RANSAC_ORB(db_conf, dist_conf, fe_conf)
48+
49+
# Create merging engine
4650
self.merging_engine = merging_engine.Merging_Engine(db_conf, dist_conf, fe_conf)
4751

4852
# ==================== ------ INTER ALGO DISTANCE ------- ====================
@@ -80,6 +84,14 @@ def get_dist_and_decision_algos_to_algos(self, pic_package_from: Dict, pic_packa
8084
except AlgoFeatureNotPresentError as e:
8185
self.logger.warning(f"No feature present for bow-orbing algorithms.Normal if BOW-ORB is not activated in configuration. Error : {e}")
8286

87+
# Get RANSAC-ORB distances
88+
try:
89+
ransac_orb_dict = self.distance_ransac_orb.ransac_orb_distance(pic_package_from, pic_package_to)
90+
self.logger.debug(f"Computed RANSAC-orb distance : {ransac_orb_dict}")
91+
merged_dict.update(ransac_orb_dict)
92+
except AlgoFeatureNotPresentError as e:
93+
self.logger.warning(f"No feature present for RANSAC-orbing algorithms. Normal if RANSAC-ORB is not activated in configuration. Error : {e}")
94+
8395
self.logger.debug(f"Distance dict : {merged_dict}")
8496
return merged_dict
8597

0 commit comments

Comments
 (0)