• Stars
    star
    118
  • Rank 299,923 (Top 6 %)
  • Language
    C++
  • Created over 8 years ago
  • Updated about 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Updated (opencv3 and camera2 API) android camera calibration application

Android Camera Calibration

This android app allow for calibration of a mobile camera. Currently OpenCV does not support opening of the api camera2 objects. Meaning that the default OpenCV java view will not work with the newest phone on the market. In this app we use only the camera2 api to first capture the image, convert it into an OpenCV format and then process it using the native OpenCV methods. This seems to have a lot of overhead so in many cases the framerate is very low.

A bit of overview of the folder and files in this repository. This uses the gradle experiential branch so that the android ndk format is supported for native debugging in android studio. To open this project, just load up android studio, and go File > Open.... Select this repository folder (not a sub-folder in this repository) and the project should automatically open and download all needed sdk and libraries. It will ask you to download the ndk if it is not installed already on your machine.

Features

  • Camera calibration using the opencv package
    • Uses the findCirclesGrid method
    • Most code was taken from the opencv calibration example
  • Very nice setting panel that allow selection of:
    • Active camera
    • Image size
    • Resized
    • Focus length
    • Grid size
  • Nice display of calibration matrix with root mean squared error
  • TODO: Need to still implement saving of the calibration info
  • TODO: For now calibration info is just displayed so that the user can copied it down

Layout

The main application is located in the /app/ folder and has its own gradle.build. This file instructs the gradle build system how to make this project and what libraries it depends on, more on these libraries later. Inside the /libraries/ folder all external libraries are placed. A custom gradle.build has been made for each of these on how to build it. The most important one is opencv_310 which stands for the OpenCV library version 3.10.

Inside this folder, we can see that the build.gradle is telling the system to build it as a library. Now there are a couple important folders that android studio automatically looks for. The aidl, java, jni, jniLibs folders are all keyword folders that are looked for. Inside the aidl is a auto generated file, inside the java folder is the java bindings for opencv (these are copied from the opencv android sdk /sdk/java/ folder), inside the jni are the linking java files that point to the c++ methods (copied from /sdk/native/jni/ folder) and finally inside the jniLibs folder are the actual compiled c++ libraries for opencv (copied from /sdk/native/libs/ folder). The opencv library is linked into the build system in the settings.gradle file, where we specify the library name opencv_310 and where it is located from the root directory libraries/opencv_310/. This step is important since we have stored the libraries in a subdirectory we can not just specify the library name and have it be found.

For the actual program there are 3 activities. The main on has the camera view. On launch this one is created, and instantly launches the settings activity. This is a PreferenceActivity hands off the view and settings loading to the android api. This is really nice since after each setting is edited the "shared preference" for this application gets updated. The actual main activity has the camera render, and the capture/done buttons. To save the extracted grid, the capture button can be used. After enough has been captured, the done button can be pressed. This launches the results activity which starts an async thread, which displays a proccessing dialog, and then the calculated results.

Calibration Grid

The default grid is a cirlce grid. An example that can be printed out on a sheet of 8.5"x11" paper can be seen below. This grid would be classified as either a 11x8 or 8x11 grid pattern. screenshot

Screenshots

screenshot screenshot screenshot screenshot

More Repositories

1

open_vins

An open source platform for visual-inertial navigation research.
C++
2,111
star
2

R-VIO

Robocentric Visual-Inertial Odometry
C++
737
star
3

kalibr_allan

IMU Allan standard deviation charts for use with Kalibr and inertial kalman filters.
MATLAB
577
star
4

MINS

An efficient and robust multisensor-aided inertial navigation system with online calibration that is capable of fusing IMU, camera, LiDAR, GPS/GNSS, and wheel sensors. Use cases: VINS/VIO, GPS-INS, LINS/LIO, multi-sensor fusion for localization and mapping (SLAM). This repository also provides multi-sensor simulation and data.
C++
427
star
5

cpi

Closed-form Preintegration for Graph-based Visual-Inertial Navigation
C++
249
star
6

R-VIO2

Square-Root Robocentric Visual-Inertial Odometry with Online Spatiotemporal Calibration
C++
228
star
7

ov_plane

A monocular plane-aided visual-inertial odometry
C++
197
star
8

calc

Convolutional Autoencoder for Loop Closure
Python
190
star
9

lips

LiDAR-Inertial 3D Plane Simulator
MATLAB
150
star
10

suo_slam

Symmetry and Uncertainty-Aware Object SLAM for 6DoF Object Pose Estimation
Python
133
star
11

calc2.0

CALC2.0: Combining Appearance, Semantic and Geometric Information for Robust and Efficient Visual Loop Closure
Python
95
star
12

vicon2gt

Vicon-IMU fusion for groundtruth trajectory generation.
C++
95
star
13

ov_maplab

Interface for OpenVINS with the maplab project
C++
82
star
14

ocekf-slam

Observability-Constrained (OC)-EKF for 2D SLAM
MATLAB
79
star
15

android-dataset-recorder

Dataset collection app that will collect both IMG and IMU measurements for offline processing
Java
60
star
16

icalib.github.io

Inertial Aided Multi-Sensor Calibration
60
star
17

ov_secondary

Secondary posegraph adapted for interfacing with OpenVINS, based on VINS-Mono / VINS-Fusion.
C++
59
star
18

ar_table_dataset

Small-scale indoor table AR visual-inertial datasets with 6DoF groundtruth.
Python
53
star
19

reach_ros_node

ROS driver for the Reach RTK GNSS module by Emlid
Python
36
star
20

mast_project

Underwater Camera and Sonar SLAM (Kevin and Linde's MAST class project)
C++
36
star
21

pointgrey_ladybug

ROS Driver for Pointgrey Ladybug Cameras
C++
30
star
22

clatt

cooperative localization and target tracking
MATLAB
28
star
23

android_sensors_driver

ROS Driver for Android Sensors (opencv3 and camera1 API)
Java
26
star
24

xsens_standalone

Python Standalone library for use with the xsens IMU
Python
19
star
25

rosbags

Github mirror of https://gitlab.com/ternaris/rosbags
Python
18
star
26

kitti_parser

C++ parser for the RAW KITTI dataset, with callbacks
C++
15
star
27

gps_path_pub

Handy publishing of a path and and frame from a single GPS sensor.
C++
13
star
28

CSO

Calibration the rigid transformation between the stereo and odometry
C++
12
star
29

img_imu_record

Easy recording of image and imu data to disk
C++
9
star
30

orb_slam_mapmerge

A Versatile and Accurate Monocular SLAM (with map merging)
C++
7
star
31

apriltags-cpp

A simple ros wrapper for apriltag-cpp
C++
7
star
32

vins_source

Helper package with launch files for getting imu and video sources.
CMake
6
star
33

microstrain_comm

IMU driver for the Microstrain 3DM-GX3®-25. Converted to run on the ROS framework.
C
5
star
34

Microstrain-3DM-GX3-35

ROS driver for Microstrain 3DM-GX3-35 IMU
C
3
star
35

firefly

AscTec Firefly Documentation
1
star
36

ZED_Odom_Grabber

Grab zed stereo images and odometry from turtlebot at the same time.
C++
1
star
37

dvs128-viewer

A driver for dvs128 camera
Java
1
star