blob: 96afd016027f742b58d660c18e2f76e84b461a8f [file] [log] [blame]
James Kuszmaulf01da392023-12-14 11:22:14 -08001load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_py_library")
Austin Schuha1d006e2022-09-14 21:50:42 -07002load("@com_github_google_flatbuffers//:typescript.bzl", "flatbuffer_ts_library")
Austin Schuh8f99c822024-05-05 22:43:40 -07003load("//aos/flatbuffers:generate.bzl", "static_flatbuffer")
4load(":fast_gaussian.bzl", "fast_gaussian")
Brian Silverman3fec6482020-01-19 17:56:20 -08005
Brian Silvermanc0309a02022-01-01 23:57:03 -08006# Note that this file is also used directly by :fast_gaussian_halide_generator,
7# without any dependencies added here.
Brian Silverman4b0bcaf2022-01-01 22:48:55 -08008cc_library(
9 name = "get_gaussian_kernel",
10 hdrs = [
11 "get_gaussian_kernel.h",
12 ],
13)
14
15cc_test(
16 name = "get_gaussian_kernel_test",
17 srcs = [
18 "get_gaussian_kernel_test.cc",
19 ],
20 deps = [
21 ":get_gaussian_kernel",
22 "//aos/testing:googletest",
23 "//third_party:opencv",
Austin Schuh99f7c6a2024-06-25 22:07:44 -070024 "@com_google_absl//absl/log",
25 "@com_google_absl//absl/log:check",
Brian Silverman4b0bcaf2022-01-01 22:48:55 -080026 ],
27)
28
Brian Silvermanc0309a02022-01-01 23:57:03 -080029sh_binary(
30 name = "fast_gaussian_halide_generator",
Brian Silverman3fec6482020-01-19 17:56:20 -080031 srcs = [
Brian Silvermanc0309a02022-01-01 23:57:03 -080032 "fast_gaussian_halide_generator.sh",
33 ],
34 data = [
Brian Silverman3fec6482020-01-19 17:56:20 -080035 "fast_gaussian_generator.cc",
Brian Silvermanc0309a02022-01-01 23:57:03 -080036 "get_gaussian_kernel.h",
37 "@amd64_debian_sysroot//:sysroot_files",
Austin Schuh94dbdf32024-04-11 22:51:09 -070038 "@clang_amd64_deps//:all",
Tyler Chatow6eda82c2022-03-27 22:37:38 -070039 "@deb_zlib1g_dev_1_2_11_dfsg_2_amd64_deb_repo//file",
Brian Silvermanc0309a02022-01-01 23:57:03 -080040 "@halide_k8//:build_files",
41 "@llvm_toolchain//:all-components-x86_64-linux",
Brian Silverman3fec6482020-01-19 17:56:20 -080042 ],
Brian Silverman3fec6482020-01-19 17:56:20 -080043 deps = [
Brian Silvermanc0309a02022-01-01 23:57:03 -080044 "@bazel_tools//tools/bash/runfiles",
45 ],
46)
47
48genrule(
49 name = "run_fast_gaussian_halide_generator",
50 outs = [
51 "fast_gaussian_generator",
52 ],
53 cmd = "$(location :fast_gaussian_halide_generator) $@",
54 tools = [
55 ":fast_gaussian_halide_generator",
Brian Silverman3fec6482020-01-19 17:56:20 -080056 ],
57)
58
59py_binary(
60 name = "fast_gaussian_runner",
61 srcs = [
62 "fast_gaussian_runner.py",
63 ],
64 data = [
65 ":fast_gaussian_generator",
Jim Ostrowski38bb70b2020-02-21 20:46:10 -080066 "@amd64_debian_sysroot//:sysroot_files",
Brian Silverman3fec6482020-01-19 17:56:20 -080067 ],
Philipp Schraderdada1072020-11-24 11:34:46 -080068 main = "fast_gaussian_runner.py",
Philipp Schraderdada1072020-11-24 11:34:46 -080069 target_compatible_with = ["@platforms//os:linux"],
Austin Schuha2503a72020-12-15 20:57:57 -080070 toolchains = [
71 "@bazel_tools//tools/cpp:current_cc_toolchain",
72 ],
Brian Silverman3fec6482020-01-19 17:56:20 -080073 deps = [
74 "@bazel_tools//tools/python/runfiles",
75 ],
76)
77
78# Each element is [sigma, sigma_name, radius].
79# opencv's default width is calculated as:
80# cvRound(sigma1 * (depth == CV_8U ? 3 : 4) * 2 + 1) | 1
81# Pulling that in helps a lot with making it faster (less data to read, and less
82# math to do), but if you make it too narrow SIFT quickly freaks out.
83sigmas = [
84 [
85 "1.2262734984654078",
86 "1p2",
87 "9",
88 ],
89 [
90 "1.5450077936447955",
91 "1p5",
92 "11",
93 ],
94 [
95 "1.9465878414647133",
96 "1p9",
97 "13",
98 ],
99 [
100 "2.4525469969308156",
101 "2p4",
102 "15",
103 ],
104 [
105 "3.0900155872895909",
106 "3p1",
107 "19",
108 ],
109 # TODO(Brian): We only need one of these two for 1280x720. Don't generate
110 # all the redundant versions for other sizes, and maybe stop doing the one
111 # we don't actually use.
112 [
Brian Silverman950bffa2020-02-01 16:53:49 -0800113 "1.2489995956420898",
Brian Silverman3fec6482020-01-19 17:56:20 -0800114 "1p24",
115 "11",
116 ],
117 [
118 "1.5198683738708496",
119 "1p52",
120 "15",
121 ],
122]
123
124sizes = [
125 [
126 1280,
Brian Silverman950bffa2020-02-01 16:53:49 -0800127 960,
Brian Silverman3fec6482020-01-19 17:56:20 -0800128 ],
129 [
130 640,
Brian Silverman950bffa2020-02-01 16:53:49 -0800131 480,
Brian Silverman3fec6482020-01-19 17:56:20 -0800132 ],
133 [
134 320,
Brian Silverman950bffa2020-02-01 16:53:49 -0800135 240,
Brian Silverman3fec6482020-01-19 17:56:20 -0800136 ],
137 [
138 160,
Brian Silverman950bffa2020-02-01 16:53:49 -0800139 120,
Brian Silverman3fec6482020-01-19 17:56:20 -0800140 ],
141 [
142 80,
Brian Silverman950bffa2020-02-01 16:53:49 -0800143 60,
Brian Silverman3fec6482020-01-19 17:56:20 -0800144 ],
145]
146
147fast_gaussian(sigmas, sizes)
148
Brian Silvermanf1196122020-01-16 00:41:54 -0800149cc_library(
150 name = "sift971",
151 srcs = [
152 "sift971.cc",
153 ],
154 hdrs = [
155 "sift971.h",
156 ],
Philipp Schraderdada1072020-11-24 11:34:46 -0800157 target_compatible_with = ["@platforms//os:linux"],
Brian Silvermanf1196122020-01-16 00:41:54 -0800158 visibility = ["//visibility:public"],
159 deps = [
Brian Silverman3fec6482020-01-19 17:56:20 -0800160 ":fast_gaussian",
Brian Silvermanf1196122020-01-16 00:41:54 -0800161 "//third_party:opencv",
Austin Schuh99f7c6a2024-06-25 22:07:44 -0700162 "@com_google_absl//absl/log",
163 "@com_google_absl//absl/log:check",
Brian Silverman3fec6482020-01-19 17:56:20 -0800164 ],
165)
166
167cc_library(
168 name = "fast_gaussian",
169 srcs = [
170 "fast_gaussian.cc",
171 ],
172 hdrs = [
173 "fast_gaussian.h",
174 ],
Philipp Schraderdada1072020-11-24 11:34:46 -0800175 target_compatible_with = ["@platforms//os:linux"],
Brian Silverman3fec6482020-01-19 17:56:20 -0800176 deps = [
177 ":fast_gaussian_all",
178 "//third_party:halide_runtime",
179 "//third_party:opencv",
Austin Schuh99f7c6a2024-06-25 22:07:44 -0700180 "@com_google_absl//absl/log",
181 "@com_google_absl//absl/log:check",
Brian Silverman3fec6482020-01-19 17:56:20 -0800182 ],
183)
184
Brian Silvermane4664162020-02-15 15:27:46 -0800185cc_test(
186 name = "fast_gaussian_test",
187 srcs = [
188 "fast_gaussian_test.cc",
189 ],
Philipp Schraderdada1072020-11-24 11:34:46 -0800190 target_compatible_with = ["@platforms//os:linux"],
Brian Silvermane4664162020-02-15 15:27:46 -0800191 deps = [
192 ":fast_gaussian",
193 "//aos/testing:googletest",
194 "//third_party:opencv",
195 ],
196)
197
Brian Silverman3fec6482020-01-19 17:56:20 -0800198cc_binary(
199 name = "testing_sift",
200 srcs = [
201 "testing_sift.cc",
202 ],
Philipp Schraderdada1072020-11-24 11:34:46 -0800203 target_compatible_with = ["@platforms//os:linux"],
Brian Silverman3fec6482020-01-19 17:56:20 -0800204 deps = [
205 ":fast_gaussian",
206 "//aos:init",
207 "//aos/time",
208 "//third_party:opencv",
209 "//y2020/vision/sift:sift971",
Austin Schuh99f7c6a2024-06-25 22:07:44 -0700210 "@com_google_absl//absl/log",
211 "@com_google_absl//absl/log:check",
Brian Silvermanf1196122020-01-16 00:41:54 -0800212 ],
213)
Brian Silvermanfac9b872020-02-05 20:07:38 -0800214
215flatbuffer_py_library(
216 name = "sift_fbs_python",
217 srcs = [
218 "sift.fbs",
219 "sift_training.fbs",
220 ],
221 namespace = "frc971.vision.sift",
222 tables = [
Jim Ostrowski38bb70b2020-02-21 20:46:10 -0800223 "KeypointFieldLocation",
Brian Silvermanfac9b872020-02-05 20:07:38 -0800224 "Feature",
225 "Match",
226 "ImageMatch",
227 "TransformationMatrix",
Jim Ostrowski38bb70b2020-02-21 20:46:10 -0800228 "CameraCalibration",
Brian Silvermanfac9b872020-02-05 20:07:38 -0800229 "CameraPose",
230 "ImageMatchResult",
231 "TrainingImage",
232 "TrainingData",
233 ],
Philipp Schraderdada1072020-11-24 11:34:46 -0800234 target_compatible_with = ["@platforms//os:linux"],
Jim Ostrowskife70d3b2020-02-15 22:15:07 -0800235 visibility = ["//visibility:public"],
Brian Silvermanfac9b872020-02-05 20:07:38 -0800236)
237
James Kuszmaulf01da392023-12-14 11:22:14 -0800238static_flatbuffer(
Brian Silvermanfac9b872020-02-05 20:07:38 -0800239 name = "sift_fbs",
240 srcs = ["sift.fbs"],
Philipp Schraderdada1072020-11-24 11:34:46 -0800241 target_compatible_with = ["@platforms//os:linux"],
Brian Silvermanfac9b872020-02-05 20:07:38 -0800242 visibility = ["//visibility:public"],
243)
244
Alex Perryd5e13572020-02-22 15:15:08 -0800245flatbuffer_ts_library(
246 name = "sift_ts_fbs",
247 srcs = ["sift.fbs"],
Philipp Schraderdada1072020-11-24 11:34:46 -0800248 target_compatible_with = ["@platforms//os:linux"],
Alex Perryd5e13572020-02-22 15:15:08 -0800249 visibility = ["//y2020:__subpackages__"],
250)
251
James Kuszmaulf01da392023-12-14 11:22:14 -0800252static_flatbuffer(
Brian Silvermanfac9b872020-02-05 20:07:38 -0800253 name = "sift_training_fbs",
254 srcs = ["sift_training.fbs"],
Philipp Schraderdada1072020-11-24 11:34:46 -0800255 target_compatible_with = ["@platforms//os:linux"],
Brian Silvermanfac9b872020-02-05 20:07:38 -0800256 visibility = ["//visibility:public"],
James Kuszmaulf01da392023-12-14 11:22:14 -0800257 deps = [":sift_fbs"],
Brian Silvermanfac9b872020-02-05 20:07:38 -0800258)
Brian Silverman967e5df2020-02-09 16:43:34 -0800259
260py_binary(
261 name = "demo_sift_training",
262 srcs = ["demo_sift_training.py"],
Philipp Schraderdada1072020-11-24 11:34:46 -0800263 target_compatible_with = ["@platforms//os:linux"],
Brian Silverman967e5df2020-02-09 16:43:34 -0800264 deps = [
265 ":sift_fbs_python",
Philipp Schraderebb658f2022-09-17 17:31:09 -0700266 "@pip//opencv_python",
Brian Silverman967e5df2020-02-09 16:43:34 -0800267 ],
268)
269
270genrule(
271 name = "run_demo_sift_training",
272 srcs = [
273 "images/demo/FRC-Image4-cleaned.png",
274 ],
275 outs = [
276 "demo_sift.h",
277 ],
278 cmd = " ".join([
279 "$(location :demo_sift_training)",
280 "$(location images/demo/FRC-Image4-cleaned.png)",
281 "$(location demo_sift.h)",
282 ]),
Philipp Schraderdada1072020-11-24 11:34:46 -0800283 target_compatible_with = ["@platforms//os:linux"],
Brian Silverman967e5df2020-02-09 16:43:34 -0800284 tools = [
285 ":demo_sift_training",
286 ],
287)
288
289cc_library(
290 name = "demo_sift",
291 hdrs = [
292 "demo_sift.h",
293 ],
Philipp Schraderdada1072020-11-24 11:34:46 -0800294 target_compatible_with = ["@platforms//os:linux"],
Brian Silverman967e5df2020-02-09 16:43:34 -0800295 visibility = ["//visibility:public"],
296)