Skip to content
This repository was archived by the owner on Sep 9, 2019. It is now read-only.

Commit 385e580

Browse files
committed
Auto merge of #45 - lasarobotics:dev, r=smo-key
Release 0.8.1 - Code cleanup and refactoring, as well as readme updates
2 parents e042fe6 + 30c4fa4 commit 385e580

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1202
-1337
lines changed

README.md

+12-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
![FTC Vision](https://raw.githubusercontent.com/lasarobotics/ftcvision/dev/img/logo-github.png)
1+
<p align="center">
2+
<img src="https://raw.githubusercontent.com/lasarobotics/ftcvision/img/logo.png?raw=true" alt="FTC-Sees!"/>
3+
</p>
24

3-
# FTC Vision Library [![Build Status](https://travis-ci.org/lasarobotics/FTCVision.svg?branch=staging)](https://travis-ci.org/lasarobotics/FTCVision)
5+
# FTC Vision Library [![Build Status](https://travis-ci.org/lasarobotics/FTCVision.svg?branch=master)](https://travis-ci.org/lasarobotics/FTCVision)
46
Computer Vision library for FTC based on OpenCV, featuring **beacon color and position detection**, as well as an easy-to-use `VisionOpMode` format and many additional detection features planned in the future.
57

68
## Installing from Scratch
@@ -30,13 +32,19 @@ include ':ftc-visionlib'
3032
compile project(':ftc-visionlib')
3133
compile project(':opencv-java')
3234
```
33-
- Copy in Vision opmodes (those that end in `VisionSample.java`) from the FTCVision directory into your opmode directory.
35+
- Update Gradle configuration by pressing the green "Sync Project with Gradle Files" button in the header (this may take a minute)
36+
- Copy in Vision opmodes (those that end in `VisionSample.java`, located in `[vision-root]/ftc-robotcontroller/src/main/java/com/qualcomm/ftcrobotcontroller/opmodes`) from the FTCVision directory into your opmode directory.
3437
- Run and test the code! Let us know if you encounter any difficulties.
38+
- You can now write your custom `VisionOpMode`!
3539

3640
## Status
3741
This library is currently under insanely active development. We're in the **Beta** phase right now. If you have any questions or would like to help, send a note to `smo-key` (contact info on profile). Thank you!
3842

39-
![A test from 8 feet away](https://raw.githubusercontent.com/lasarobotics/ftcvision/dev/img/test3.png)
43+
#### Accuracy Test
44+
![A test from 8 feet away](https://raw.githubusercontent.com/lasarobotics/ftcvision/img/test2.png)
45+
46+
#### Distance Test
47+
![A test from 8 feet away](https://raw.githubusercontent.com/lasarobotics/ftcvision/img/test1.png)
4048

4149
## Goals
4250
- Locate the lit target (the thing with two buttons) within the camera viewfield
+28-18
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,48 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:tools="http://schemas.android.com/tools"
4-
package="com.lasarobotics.tests.camera"
5-
android:versionCode="301"
6-
android:versionName="3.01">
3+
xmlns:tools="http://schemas.android.com/tools"
4+
package="com.lasarobotics.tests.camera"
5+
android:versionCode="301"
6+
android:versionName="3.01">
77

88
<application
99
android:label="@string/app_name"
1010
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
1111
tools:replace="android:theme">
1212

13-
<activity android:name="com.lasarobotics.tests.camera.CameraTestActivity"
14-
android:label="@string/app_name"
15-
android:screenOrientation="landscape"
16-
android:configChanges="keyboardHidden|orientation">
13+
<activity
14+
android:name="com.lasarobotics.tests.camera.CameraTestActivity"
15+
android:configChanges="keyboardHidden|orientation"
16+
android:label="@string/app_name"
17+
android:screenOrientation="landscape">
1718
<intent-filter>
1819
<action android:name="android.intent.action.MAIN" />
1920
<category android:name="android.intent.category.LAUNCHER" />
2021
</intent-filter>
2122
</activity>
2223
</application>
2324

24-
<supports-screens android:resizeable="true"
25-
android:smallScreens="true"
26-
android:normalScreens="true"
27-
android:largeScreens="true"
28-
android:anyDensity="true" />
25+
<supports-screens
26+
android:anyDensity="true"
27+
android:largeScreens="true"
28+
android:normalScreens="true"
29+
android:resizeable="true"
30+
android:smallScreens="true" />
2931

30-
<uses-permission android:name="android.permission.CAMERA"/>
32+
<uses-permission android:name="android.permission.CAMERA" />
3133
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3234

33-
<uses-feature android:name="android.hardware.camera" android:required="false"/>
34-
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
35-
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
36-
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
35+
<uses-feature
36+
android:name="android.hardware.camera"
37+
android:required="false" />
38+
<uses-feature
39+
android:name="android.hardware.camera.autofocus"
40+
android:required="false" />
41+
<uses-feature
42+
android:name="android.hardware.camera.front"
43+
android:required="false" />
44+
<uses-feature
45+
android:name="android.hardware.camera.front.autofocus"
46+
android:required="false" />
3747

3848
</manifest>

ftc-cameratest/src/main/java/com/lasarobotics/tests/camera/CameraTestActivity.java

+45-56
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
import android.os.Bundle;
55
import android.view.WindowManager;
66

7-
import org.lasarobotics.vision.android.Camera;
8-
import org.lasarobotics.vision.android.Cameras;
9-
import org.lasarobotics.vision.detection.ColorBlobDetector;
10-
import org.lasarobotics.vision.detection.objects.Contour;
11-
import org.lasarobotics.vision.ftc.resq.Beacon;
12-
import org.lasarobotics.vision.image.Drawing;
13-
import org.lasarobotics.vision.util.FPS;
14-
import org.lasarobotics.vision.util.color.ColorGRAY;
15-
import org.lasarobotics.vision.util.color.ColorHSV;
16-
import org.lasarobotics.vision.util.color.ColorRGBA;
7+
import org.lasarobotics.vision.test.android.Camera;
8+
import org.lasarobotics.vision.test.android.Cameras;
9+
import org.lasarobotics.vision.test.detection.ColorBlobDetector;
10+
import org.lasarobotics.vision.test.detection.objects.Contour;
11+
import org.lasarobotics.vision.test.ftc.resq.Beacon;
12+
import org.lasarobotics.vision.test.image.Drawing;
13+
import org.lasarobotics.vision.test.util.FPS;
14+
import org.lasarobotics.vision.test.util.color.ColorGRAY;
15+
import org.lasarobotics.vision.test.util.color.ColorHSV;
16+
import org.lasarobotics.vision.test.util.color.ColorRGBA;
1717
import org.opencv.android.BaseLoaderCallback;
1818
import org.opencv.android.CameraBridgeViewBase;
1919
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
@@ -24,26 +24,48 @@
2424
import org.opencv.core.Mat;
2525
import org.opencv.core.Point;
2626

27-
import java.text.DecimalFormat;
2827
import java.util.List;
2928

3029
public class CameraTestActivity extends Activity implements CvCameraViewListener2 {
3130

31+
private static final ColorHSV colorRadius = new ColorHSV(50, 75, 127);
32+
private static final ColorHSV lowerBoundRed = new ColorHSV((int) (305 / 360.0 * 255.0), (int) (0.200 * 255.0), (int) (0.300 * 255.0));
33+
private static final ColorHSV upperBoundRed = new ColorHSV((int) ((360.0 + 5.0) / 360.0 * 255.0), 255, 255);
34+
private static final ColorHSV lowerBoundBlue = new ColorHSV((int) (170.0 / 360.0 * 255.0), (int) (0.200 * 255.0), (int) (0.750 * 255.0));
35+
private static final ColorHSV upperBoundBlue = new ColorHSV((int) (227.0 / 360.0 * 255.0), 255, 255);
3236
private Mat mRgba; //RGBA scene image
3337
private Mat mGray; //Grayscale scene image
3438
private CameraBridgeViewBase mOpenCvCameraView;
35-
3639
private float focalLength; //Camera lens focal length
37-
3840
//private ObjectDetection.ObjectAnalysis objectAnalysis;
3941
private FPS fpsCounter;
42+
private final BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
43+
@Override
44+
public void onManagerConnected(int status) {
45+
switch (status) {
46+
case LoaderCallbackInterface.SUCCESS: {
47+
// OpenCV loaded successfully!
48+
// Load native library AFTER OpenCV initialization
49+
50+
initialize();
4051

52+
mOpenCvCameraView.enableView();
53+
}
54+
break;
55+
default: {
56+
super.onManagerConnected(status);
57+
}
58+
break;
59+
}
60+
}
61+
};
62+
private ColorBlobDetector detectorRed;
63+
private ColorBlobDetector detectorBlue;
4164
public CameraTestActivity() {
4265

4366
}
4467

45-
private void initialize()
46-
{
68+
private void initialize() {
4769
//GET CAMERA PROPERTIES
4870
Camera cam = Cameras.PRIMARY.createCamera();
4971
android.hardware.Camera.Parameters pam = cam.getCamera().getParameters();
@@ -79,28 +101,9 @@ private void initialize()
79101
fpsCounter = new FPS();
80102
}
81103

82-
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
83-
@Override
84-
public void onManagerConnected(int status) {
85-
switch (status) {
86-
case LoaderCallbackInterface.SUCCESS:
87-
{
88-
// OpenCV loaded successfully!
89-
// Load native library AFTER OpenCV initialization
90-
91-
initialize();
92-
93-
mOpenCvCameraView.enableView();
94-
} break;
95-
default:
96-
{
97-
super.onManagerConnected(status);
98-
} break;
99-
}
100-
}
101-
};
102-
103-
/** Called when the activity is first created. */
104+
/**
105+
* Called when the activity is first created.
106+
*/
104107
@Override
105108
public void onCreate(Bundle savedInstanceState) {
106109
super.onCreate(savedInstanceState);
@@ -113,16 +116,14 @@ public void onCreate(Bundle savedInstanceState) {
113116
}
114117

115118
@Override
116-
public void onPause()
117-
{
119+
public void onPause() {
118120
super.onPause();
119121
if (mOpenCvCameraView != null)
120122
mOpenCvCameraView.disableView();
121123
}
122124

123125
@Override
124-
public void onResume()
125-
{
126+
public void onResume() {
126127
super.onResume();
127128
if (!OpenCVLoader.initDebug()) {
128129
// Internal OpenCV library not found. Using OpenCV Manager for initialization
@@ -139,22 +140,12 @@ public void onDestroy() {
139140
mOpenCvCameraView.disableView();
140141
}
141142

142-
private ColorBlobDetector detectorRed;
143-
private ColorBlobDetector detectorBlue;
144-
private static final ColorHSV colorRadius = new ColorHSV(50, 75, 127);
145-
146-
private static final ColorHSV lowerBoundRed = new ColorHSV( (int)(305 / 360.0 * 255.0), (int)(0.200 * 255.0), (int)(0.300 * 255.0));
147-
private static final ColorHSV upperBoundRed = new ColorHSV( (int)((360.0+5.0) / 360.0 * 255.0), 255 , 255);
148-
149-
private static final ColorHSV lowerBoundBlue = new ColorHSV((int)(170.0 / 360.0 * 255.0), (int)(0.200 * 255.0), (int)(0.750 * 255.0));
150-
private static final ColorHSV upperBoundBlue = new ColorHSV((int)(227.0 / 360.0 * 255.0), 255 , 255);
151-
152143
public void onCameraViewStarted(int width, int height) {
153144
mRgba = new Mat(height, width, CvType.CV_8UC4);
154145
mGray = new Mat(height, width, CvType.CV_8UC1);
155146

156147
//Initialize all detectors here
157-
detectorRed = new ColorBlobDetector(lowerBoundRed, upperBoundRed);
148+
detectorRed = new ColorBlobDetector(lowerBoundRed, upperBoundRed);
158149
detectorBlue = new ColorBlobDetector(lowerBoundBlue, upperBoundBlue);
159150
}
160151

@@ -192,17 +183,15 @@ public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
192183

193184

194185
//DEBUG confidence output
195-
Drawing.drawText(mRgba, "Confidence: " + colorAnalysis.getConfidenceString() ,
186+
Drawing.drawText(mRgba, "Confidence: " + colorAnalysis.getConfidenceString(),
196187
new Point(0, 50), 1.0f, new ColorGRAY(255));
197188

198189
//Transform.enlarge(mRgba, originalSize, true);
199190
//Transform.enlarge(mGray, originalSize, true);
200191

201192
Drawing.drawText(mRgba, colorAnalysis.getStateLeft().toString() + ", " + colorAnalysis.getStateRight().toString(),
202193
new Point(0, 8), 1.0f, new ColorGRAY(255), Drawing.Anchor.BOTTOMLEFT);
203-
}
204-
catch (Exception e)
205-
{
194+
} catch (Exception e) {
206195
Drawing.drawText(mRgba, "Analysis Error", new Point(0, 8), 1.0f, new ColorRGBA("#F44336"), Drawing.Anchor.BOTTOMLEFT);
207196
e.printStackTrace();
208197
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
22
android:layout_width="match_parent"
3-
android:layout_height="match_parent" >
3+
android:layout_height="match_parent">
44

55
<org.opencv.android.JavaCameraView
6+
android:id="@+id/surfaceView"
67
android:layout_width="fill_parent"
7-
android:layout_height="fill_parent"
8-
android:id="@+id/surfaceView" />
8+
android:layout_height="fill_parent" />
99

1010
</LinearLayout>

ftc-robotcontroller/src/main/java/com/qualcomm/ftcrobotcontroller/opmodes/BasicVisionSample.java

+3-16
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,11 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3131

3232
package com.qualcomm.ftcrobotcontroller.opmodes;
3333

34-
import org.lasarobotics.vision.android.Cameras;
35-
import org.lasarobotics.vision.detection.ColorBlobDetector;
36-
import org.lasarobotics.vision.detection.objects.Contour;
37-
import org.lasarobotics.vision.ftc.resq.Beacon;
38-
import org.lasarobotics.vision.image.Drawing;
39-
import org.lasarobotics.vision.image.Transform;
40-
import org.lasarobotics.vision.opmode.ManualVisionOpMode;
41-
import org.lasarobotics.vision.opmode.VisionExtensions;
42-
import org.lasarobotics.vision.opmode.VisionOpMode;
43-
import org.lasarobotics.vision.util.color.ColorGRAY;
44-
import org.lasarobotics.vision.util.color.ColorHSV;
45-
import org.lasarobotics.vision.util.color.ColorRGBA;
46-
import org.opencv.core.Mat;
47-
import org.opencv.core.Point;
34+
import org.lasarobotics.vision.test.android.Cameras;
35+
import org.lasarobotics.vision.test.opmode.VisionExtensions;
36+
import org.lasarobotics.vision.test.opmode.VisionOpMode;
4837
import org.opencv.core.Size;
4938

50-
import java.util.List;
51-
5239
/**
5340
* TeleOp Mode
5441
* <p/>

ftc-robotcontroller/src/main/java/com/qualcomm/ftcrobotcontroller/opmodes/ManualVisionSample.java

+12-12
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3131

3232
package com.qualcomm.ftcrobotcontroller.opmodes;
3333

34-
import org.lasarobotics.vision.android.Cameras;
35-
import org.lasarobotics.vision.detection.ColorBlobDetector;
36-
import org.lasarobotics.vision.detection.objects.Contour;
37-
import org.lasarobotics.vision.ftc.resq.Beacon;
38-
import org.lasarobotics.vision.image.Drawing;
39-
import org.lasarobotics.vision.opmode.ManualVisionOpMode;
40-
import org.lasarobotics.vision.util.color.ColorGRAY;
41-
import org.lasarobotics.vision.util.color.ColorHSV;
42-
import org.lasarobotics.vision.util.color.ColorRGBA;
34+
import org.lasarobotics.vision.test.android.Cameras;
35+
import org.lasarobotics.vision.test.detection.ColorBlobDetector;
36+
import org.lasarobotics.vision.test.detection.objects.Contour;
37+
import org.lasarobotics.vision.test.ftc.resq.Beacon;
38+
import org.lasarobotics.vision.test.image.Drawing;
39+
import org.lasarobotics.vision.test.opmode.ManualVisionOpMode;
40+
import org.lasarobotics.vision.test.util.color.ColorGRAY;
41+
import org.lasarobotics.vision.test.util.color.ColorHSV;
42+
import org.lasarobotics.vision.test.util.color.ColorRGBA;
4343
import org.opencv.core.Mat;
4444
import org.opencv.core.Point;
4545
import org.opencv.core.Size;
@@ -53,13 +53,13 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
5353
*/
5454
public class ManualVisionSample extends ManualVisionOpMode {
5555

56-
private Beacon.BeaconAnalysis colorAnalysis = new Beacon.BeaconAnalysis();
57-
private ColorBlobDetector detectorRed;
58-
private ColorBlobDetector detectorBlue;
5956
private static final ColorHSV lowerBoundRed = new ColorHSV((int) (305 / 360.0 * 255.0), (int) (0.200 * 255.0), (int) (0.300 * 255.0));
6057
private static final ColorHSV upperBoundRed = new ColorHSV((int) ((360.0 + 5.0) / 360.0 * 255.0), 255, 255);
6158
private static final ColorHSV lowerBoundBlue = new ColorHSV((int) (170.0 / 360.0 * 255.0), (int) (0.200 * 255.0), (int) (0.750 * 255.0));
6259
private static final ColorHSV upperBoundBlue = new ColorHSV((int) (227.0 / 360.0 * 255.0), 255, 255);
60+
private Beacon.BeaconAnalysis colorAnalysis = new Beacon.BeaconAnalysis();
61+
private ColorBlobDetector detectorRed;
62+
private ColorBlobDetector detectorBlue;
6363
private boolean noError = true;
6464

6565
@Override

ftc-visionlib/src/androidTest/java/org/lasarobotics/vision/ApplicationTest.java ftc-visionlib/src/androidTest/java/org/lasarobotics/vision/test/ApplicationTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.lasarobotics.vision;
1+
package org.lasarobotics.vision.test;
22

33
import android.app.Application;
44
import android.test.ApplicationTestCase;

ftc-visionlib/src/main/AndroidManifest.xml

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2-
package="org.lasarobotics.vision">
2+
package="org.lasarobotics.vision.vision">
33

4-
<application android:allowBackup="true"
5-
android:label="@string/app_name"
6-
>
4+
<application
5+
android:allowBackup="true"
6+
android:label="@string/app_name">
77

88
</application>
99

0 commit comments

Comments
 (0)