Skip to content
This repository was archived by the owner on Jun 5, 2023. It is now read-only.

Commit fc52ece

Browse files
committed
Update CV_bridge:
- CV Bridge work without OpenCV Manager. - Remove opencv - It now take from maven. Update all apps: - Use android_core_components. - Add FOREGROUND_SERVICE permission for android Pie (Android 9). - minSdkVersion 16. - targetSdkVersion 28.
1 parent d4d6203 commit fc52ece

275 files changed

Lines changed: 114 additions & 120606 deletions

File tree

Some content is hidden

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

android_tutorial_cv_bridge_CompressedImage/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ apply plugin: 'com.android.application'
88

99
//noinspection GroovyAssignabilityCheck
1010
dependencies {
11-
compile "org.ros.android_core:android_10:[0.3,0.4)"
11+
compile 'org.ros.android_core:android_core_components:[0.4,0.5)'
1212
compile project(":cv_bridge")
1313
}
1414

1515
android {
1616
defaultConfig {
17-
minSdkVersion 10
17+
minSdkVersion 16
1818
//noinspection OldTargetApi
19-
targetSdkVersion 15
19+
targetSdkVersion 28
2020
}
2121
}

android_tutorial_cv_bridge_CompressedImage/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<uses-permission android:name="android.permission.INTERNET" />
77
<uses-permission android:name="android.permission.WAKE_LOCK" />
88
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
9+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
910

1011
<application
1112
android:icon="@mipmap/ros_icon"

android_tutorial_cv_bridge_CompressedImage/src/main/java/com/github/rosjava/android_extras/android_tutorial_cv_bridge/MainActivityCompressed.java

Lines changed: 28 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
import android.view.WindowManager;
77
import android.widget.ImageView;
88

9-
import org.opencv.android.BaseLoaderCallback;
10-
import org.opencv.android.LoaderCallbackInterface;
11-
import org.opencv.android.OpenCVLoader;
129
import org.opencv.android.Utils;
1310
import org.opencv.core.Core;
1411
import org.opencv.core.Point;
@@ -43,7 +40,6 @@ public class MainActivityCompressed extends RosActivity implements NodeMain{
4340
protected Subscriber<CompressedImage> imageSubscriber;
4441
protected ConnectedNode node;
4542
protected static final String TAG = "compressed Tutorial";
46-
protected boolean isInit = false;
4743
protected Bitmap bmp;
4844
protected ImageView imageView;
4945
protected Runnable displayImage;
@@ -81,7 +77,6 @@ protected void init(NodeMainExecutor nodeMainExecutor) {
8177
NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(getRosHostname());
8278
nodeConfiguration.setMasterUri(getMasterUri());
8379
nodeMainExecutor.execute(this, nodeConfiguration);
84-
isInit = true;
8580
onResume();
8681
}
8782

@@ -90,24 +85,6 @@ public GraphName getDefaultNodeName() {
9085
return GraphName.of("android_tutorial_cv_bridge");
9186
}
9287

93-
protected boolean isOpenCVInit = false;
94-
protected BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
95-
@Override
96-
public void onManagerConnected(int status) {
97-
switch (status) {
98-
case LoaderCallbackInterface.SUCCESS: {
99-
Log.i(TAG, "OpenCV loaded successfully");
100-
isOpenCVInit = true;
101-
}
102-
break;
103-
default: {
104-
super.onManagerConnected(status);
105-
}
106-
break;
107-
}
108-
}
109-
};
110-
11188
@Override
11289
public void onStart(ConnectedNode connectedNode) {
11390
this.node = connectedNode;
@@ -117,36 +94,34 @@ public void onStart(ConnectedNode connectedNode) {
11794
imageSubscriber.addMessageListener(new MessageListener<CompressedImage>() {
11895
@Override
11996
public void onNewMessage(CompressedImage message) {
120-
if (isOpenCVInit) {
121-
CvImage cvImage;
122-
try {
123-
cvImage = CvImage.toCvCopy(message, ImageEncodings.RGB8);
124-
} catch (Exception e) {
125-
log.error("cv_bridge exception: " + e.getMessage());
126-
return;
127-
}
128-
129-
//make sure the picture is big enough for my circle.
130-
if (cvImage.image.rows() > 110 && cvImage.image.cols() > 110) {
131-
//place the circle in the middle of the picture with radius 100 and color red.
132-
Imgproc.circle(cvImage.image, new Point(cvImage.image.cols() / 2, cvImage.image.rows() / 2), 100, new Scalar(255, 0, 0));
133-
}
134-
135-
cvImage.image = cvImage.image.t();
136-
Core.flip(cvImage.image, cvImage.image, 1);
137-
138-
bmp = Bitmap.createBitmap(cvImage.image.cols(), cvImage.image.rows(), Bitmap.Config.ARGB_8888);
139-
Utils.matToBitmap(cvImage.image, bmp);
140-
runOnUiThread(displayImage);
141-
142-
Core.flip(cvImage.image, cvImage.image, 1);
143-
cvImage.image = cvImage.image.t();
144-
145-
try {
146-
imagePublisher.publish(cvImage.toCompressedImageMsg(imagePublisher.newMessage(), Format.JPG));
147-
} catch (Exception e) {
148-
log.error("cv_bridge exception: " + e.getMessage());
149-
}
97+
CvImage cvImage;
98+
try {
99+
cvImage = CvImage.toCvCopy(message, ImageEncodings.RGB8);
100+
} catch (Exception e) {
101+
log.error("cv_bridge exception: " + e.getMessage());
102+
return;
103+
}
104+
105+
//make sure the picture is big enough for my circle.
106+
if (cvImage.image.rows() > 110 && cvImage.image.cols() > 110) {
107+
//place the circle in the middle of the picture with radius 100 and color red.
108+
Imgproc.circle(cvImage.image, new Point(cvImage.image.cols() / 2, cvImage.image.rows() / 2), 100, new Scalar(255, 0, 0));
109+
}
110+
111+
cvImage.image = cvImage.image.t();
112+
Core.flip(cvImage.image, cvImage.image, 1);
113+
114+
bmp = Bitmap.createBitmap(cvImage.image.cols(), cvImage.image.rows(), Bitmap.Config.ARGB_8888);
115+
Utils.matToBitmap(cvImage.image, bmp);
116+
runOnUiThread(displayImage);
117+
118+
Core.flip(cvImage.image, cvImage.image, 1);
119+
cvImage.image = cvImage.image.t();
120+
121+
try {
122+
imagePublisher.publish(cvImage.toCompressedImageMsg(imagePublisher.newMessage(), Format.JPG));
123+
} catch (Exception e) {
124+
log.error("cv_bridge exception: " + e.getMessage());
150125
}
151126
}
152127
});
@@ -156,9 +131,6 @@ public void onNewMessage(CompressedImage message) {
156131
@Override
157132
public void onResume() {
158133
super.onResume();
159-
if (isInit) {
160-
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
161-
}
162134
}
163135

164136
@Override

android_tutorial_cv_bridge_CompressedImage_javacv/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ apply plugin: 'com.android.application'
88

99
//noinspection GroovyAssignabilityCheck
1010
dependencies {
11-
compile "org.ros.android_core:android_10:[0.3,0.4)"
11+
compile 'org.ros.android_core:android_core_components:[0.4,0.5)'
1212
compile "com.github.rosjava.rosjava_extras:cv_bridge_javacv:[0.3,0.4]"
1313
}
1414

1515
android {
1616
defaultConfig {
17-
minSdkVersion 10
17+
minSdkVersion 16
1818
//noinspection OldTargetApi
19-
targetSdkVersion 15
19+
targetSdkVersion 28
2020
multiDexEnabled true
2121
}
2222
}

android_tutorial_cv_bridge_CompressedImage_javacv/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<uses-permission android:name="android.permission.INTERNET" />
77
<uses-permission android:name="android.permission.WAKE_LOCK" />
88
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
9+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
910

1011
<application
1112
android:icon="@mipmap/icon"

android_tutorial_cv_bridge_Image/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ apply plugin: 'com.android.application'
88

99
//noinspection GroovyAssignabilityCheck
1010
dependencies {
11-
compile "org.ros.android_core:android_10:[0.3,0.4)"
11+
compile 'org.ros.android_core:android_core_components:[0.4,0.5)'
1212
compile project(":cv_bridge")
1313
}
1414

1515
android {
1616
defaultConfig {
17-
minSdkVersion 10
17+
minSdkVersion 16
1818
//noinspection OldTargetApi
19-
targetSdkVersion 15
19+
targetSdkVersion 28
2020
}
2121
}

android_tutorial_cv_bridge_Image/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<uses-permission android:name="android.permission.INTERNET" />
77
<uses-permission android:name="android.permission.WAKE_LOCK" />
88
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
9+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
910

1011
<application
1112
android:icon="@mipmap/ros_icon"

android_tutorial_cv_bridge_Image/src/main/java/com/github/rosjava/android_extras/android_tutorial_cv_bridge/MainActivity.java

Lines changed: 27 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
import android.view.WindowManager;
77
import android.widget.ImageView;
88

9-
import org.opencv.android.BaseLoaderCallback;
10-
import org.opencv.android.LoaderCallbackInterface;
11-
import org.opencv.android.OpenCVLoader;
129
import org.opencv.android.Utils;
1310
import org.opencv.core.Core;
1411
import org.opencv.imgproc.Imgproc;
@@ -44,7 +41,6 @@ public class MainActivity extends RosActivity implements NodeMain{
4441
protected Subscriber<Image> imageSubscriber;
4542
protected ConnectedNode node;
4643
protected static final String TAG = "cv_bridge Tutorial";
47-
protected boolean isInit = false;
4844
protected ImageView imageView;
4945
protected Bitmap bmp;
5046
protected Runnable displayImage;
@@ -82,7 +78,6 @@ protected void init(NodeMainExecutor nodeMainExecutor) {
8278
NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(getRosHostname());
8379
nodeConfiguration.setMasterUri(getMasterUri());
8480
nodeMainExecutor.execute(this, nodeConfiguration);
85-
isInit = true;
8681
onResume();
8782
}
8883

@@ -91,24 +86,6 @@ public GraphName getDefaultNodeName() {
9186
return GraphName.of("android_tutorial_cv_bridge");
9287
}
9388

94-
protected boolean isOpenCVInit = false;
95-
protected BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
96-
@Override
97-
public void onManagerConnected(int status) {
98-
switch (status) {
99-
case LoaderCallbackInterface.SUCCESS: {
100-
Log.i(TAG, "OpenCV loaded successfully");
101-
isOpenCVInit = true;
102-
}
103-
break;
104-
default: {
105-
super.onManagerConnected(status);
106-
}
107-
break;
108-
}
109-
}
110-
};
111-
11289
@Override
11390
public void onStart(ConnectedNode connectedNode) {
11491
this.node = connectedNode;
@@ -118,35 +95,33 @@ public void onStart(ConnectedNode connectedNode) {
11895
imageSubscriber.addMessageListener(new MessageListener<Image>() {
11996
@Override
12097
public void onNewMessage(Image message) {
121-
if (isOpenCVInit) {
122-
CvImage cvImage;
123-
try {
124-
cvImage = CvImage.toCvCopy(message, ImageEncodings.RGB8);
125-
} catch (Exception e) {
126-
log.error("cv_bridge exception: " + e.getMessage());
127-
return;
128-
}
129-
//make sure the picture is big enough for my circle.
130-
if (cvImage.image.rows() > 110 && cvImage.image.cols() > 110) {
131-
//place the circle in the middle of the picture with radius 100 and color red.
132-
Imgproc.circle(cvImage.image, new Point(cvImage.image.cols() / 2, cvImage.image.rows() / 2), 100, new Scalar(255, 0, 0));
133-
}
134-
135-
cvImage.image = cvImage.image.t();
136-
Core.flip(cvImage.image,cvImage.image,1);
137-
138-
bmp = Bitmap.createBitmap(cvImage.image.cols(), cvImage.image.rows(), Bitmap.Config.ARGB_8888);
139-
Utils.matToBitmap(cvImage.image, bmp);
140-
runOnUiThread(displayImage);
141-
142-
Core.flip(cvImage.image, cvImage.image, 1);
143-
cvImage.image = cvImage.image.t();
144-
145-
try {
146-
imagePublisher.publish(cvImage.toImageMsg(imagePublisher.newMessage()));
147-
} catch (IOException e) {
148-
log.error("cv_bridge exception: " + e.getMessage());
149-
}
98+
CvImage cvImage;
99+
try {
100+
cvImage = CvImage.toCvCopy(message, ImageEncodings.RGB8);
101+
} catch (Exception e) {
102+
log.error("cv_bridge exception: " + e.getMessage());
103+
return;
104+
}
105+
//make sure the picture is big enough for my circle.
106+
if (cvImage.image.rows() > 110 && cvImage.image.cols() > 110) {
107+
//place the circle in the middle of the picture with radius 100 and color red.
108+
Imgproc.circle(cvImage.image, new Point(cvImage.image.cols() / 2, cvImage.image.rows() / 2), 100, new Scalar(255, 0, 0));
109+
}
110+
111+
cvImage.image = cvImage.image.t();
112+
Core.flip(cvImage.image,cvImage.image,1);
113+
114+
bmp = Bitmap.createBitmap(cvImage.image.cols(), cvImage.image.rows(), Bitmap.Config.ARGB_8888);
115+
Utils.matToBitmap(cvImage.image, bmp);
116+
runOnUiThread(displayImage);
117+
118+
Core.flip(cvImage.image, cvImage.image, 1);
119+
cvImage.image = cvImage.image.t();
120+
121+
try {
122+
imagePublisher.publish(cvImage.toImageMsg(imagePublisher.newMessage()));
123+
} catch (IOException e) {
124+
log.error("cv_bridge exception: " + e.getMessage());
150125
}
151126
}
152127
});
@@ -156,9 +131,6 @@ public void onNewMessage(Image message) {
156131
@Override
157132
public void onResume() {
158133
super.onResume();
159-
if (isInit) {
160-
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
161-
}
162134
}
163135

164136
@Override

android_tutorial_cv_bridge_Image_javacv/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ apply plugin: 'com.android.application'
88

99
//noinspection GroovyAssignabilityCheck
1010
dependencies {
11-
compile "org.ros.android_core:android_10:[0.3,0.4)"
12-
compile "com.github.rosjava.rosjava_extras:cv_bridge_javacv:[0.3,0.4]"
11+
compile 'org.ros.android_core:android_core_components:[0.4,0.5)'
12+
compile "com.github.rosjava.rosjava_extras:cv_bridge_javacv:[0.3,0.4]"
1313
}
1414

1515
android {
1616
defaultConfig {
17-
minSdkVersion 10
17+
minSdkVersion 16
1818
//noinspection OldTargetApi
19-
targetSdkVersion 15
19+
targetSdkVersion 28
2020
multiDexEnabled true
2121
}
2222
}

android_tutorial_cv_bridge_Image_javacv/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<uses-permission android:name="android.permission.INTERNET" />
77
<uses-permission android:name="android.permission.WAKE_LOCK" />
88
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
9+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
910

1011
<application
1112
android:icon="@mipmap/icon"

0 commit comments

Comments
 (0)