Use an explicit ceres::Context

This lets us reuse it which makes the solves way faster.

Change-Id: I3f8745970f1e3bf0c3299632efb019002c8eb36f
diff --git a/y2019/vision/target_finder.h b/y2019/vision/target_finder.h
index c7de67a..3da5373 100644
--- a/y2019/vision/target_finder.h
+++ b/y2019/vision/target_finder.h
@@ -1,14 +1,21 @@
 #ifndef _Y2019_VISION_TARGET_FINDER_H_
 #define _Y2019_VISION_TARGET_FINDER_H_
 
+#include <memory>
+
+#include "aos/vision/blob/contour.h"
 #include "aos/vision/blob/region_alloc.h"
 #include "aos/vision/blob/threshold.h"
 #include "aos/vision/blob/transpose.h"
-#include "aos/vision/blob/contour.h"
 #include "aos/vision/debug/overlay.h"
 #include "aos/vision/math/vector.h"
 #include "y2019/vision/target_types.h"
 
+namespace ceres {
+
+class Context;
+
+}  // namespace ceres
 namespace y2019 {
 namespace vision {
 
@@ -26,6 +33,8 @@
 class TargetFinder {
  public:
   TargetFinder();
+  ~TargetFinder();
+
   // Turn a raw image into blob range image.
   aos::vision::RangeImage Threshold(aos::vision::ImagePtr image);
 
@@ -88,6 +97,8 @@
 
   ExtrinsicParams default_extrinsics_;
 
+  const std::unique_ptr<ceres::Context> ceres_context_;
+
   // Counts for logging.
   size_t frame_count_;
   size_t valid_result_count_;