blob: b54cf4ebfebd0257f07c452fc3f6edd3846a24ed [file] [log] [blame]
James Kuszmaulfe30a742021-11-13 11:31:00 -08001#include "aos/events/shm_event_loop.h"
2#include "aos/init.h"
3#include "y2020/vision/camera_reader.h"
4
5// config used to allow running camera_reader independently. E.g.,
Austin Schuhc5fa6d92022-02-25 14:36:28 -08006// bazel run //y2020/vision:camera_reader -- --config y2020/aos_config.json
James Kuszmaulfe30a742021-11-13 11:31:00 -08007// --override_hostname pi-7971-1 --ignore_timestamps true
Austin Schuhc5fa6d92022-02-25 14:36:28 -08008DEFINE_string(config, "aos_config.json", "Path to the config file to use.");
James Kuszmaulfe30a742021-11-13 11:31:00 -08009namespace frc971 {
10namespace vision {
11namespace {
12
13void CameraReaderMain() {
14 aos::FlatbufferDetachedBuffer<aos::Configuration> config =
15 aos::configuration::ReadConfig(FLAGS_config);
16
17 const aos::FlatbufferSpan<sift::TrainingData> training_data(
18 SiftTrainingData());
19 CHECK(training_data.Verify());
20
21 const auto index_params = cv::makePtr<cv::flann::IndexParams>();
22 index_params->setAlgorithm(cvflann::FLANN_INDEX_KDTREE);
23 index_params->setInt("trees", 5);
24 const auto search_params =
25 cv::makePtr<cv::flann::SearchParams>(/* checks */ 50);
26 cv::FlannBasedMatcher matcher(index_params, search_params);
27
28 aos::ShmEventLoop event_loop(&config.message());
29
30 // First, log the data for future reference.
31 {
32 aos::Sender<sift::TrainingData> training_data_sender =
33 event_loop.MakeSender<sift::TrainingData>("/camera");
34 CHECK_EQ(training_data_sender.Send(training_data),
35 aos::RawSender::Error::kOk);
36 }
37
38 V4L2Reader v4l2_reader(&event_loop, "/dev/video0");
39 CameraReader camera_reader(&event_loop, &training_data.message(),
40 &v4l2_reader, index_params, search_params);
41
42 event_loop.Run();
43}
44
45} // namespace
46} // namespace vision
47} // namespace frc971
48
49int main(int argc, char **argv) {
50 aos::InitGoogle(&argc, &argv);
51 frc971::vision::CameraReaderMain();
52}