Add opencv lib,fix #1

pull/34/head 1.2.1.2
jason 6 years ago
parent 4fd50bb91b
commit 3ad5d29d36
  1. 1
      .idea/gradle.xml
  2. 2
      .idea/misc.xml
  3. 40
      README.md
  4. 4
      app/build.gradle
  5. 2
      app/src/main/AndroidManifest.xml
  6. BIN
      app/src/main/assets/aaa.png
  7. BIN
      app/src/main/assets/ccc.gif
  8. BIN
      app/src/main/assets/timg-10.jpeg
  9. 47
      app/src/main/java/com/example/open_nsfw_android/MainActivity.kt
  10. 6
      build.gradle
  11. 44
      nsfw/CMakeLists.txt
  12. 37
      nsfw/build.gradle
  13. BIN
      nsfw/libs/armeabi-v7a/libopencv_calib3d.a
  14. BIN
      nsfw/libs/armeabi-v7a/libopencv_core.a
  15. BIN
      nsfw/libs/armeabi-v7a/libopencv_dnn.a
  16. BIN
      nsfw/libs/armeabi-v7a/libopencv_features2d.a
  17. BIN
      nsfw/libs/armeabi-v7a/libopencv_flann.a
  18. BIN
      nsfw/libs/armeabi-v7a/libopencv_highgui.a
  19. BIN
      nsfw/libs/armeabi-v7a/libopencv_imgcodecs.a
  20. BIN
      nsfw/libs/armeabi-v7a/libopencv_imgproc.a
  21. BIN
      nsfw/libs/armeabi-v7a/libopencv_java3.so
  22. BIN
      nsfw/libs/armeabi-v7a/libopencv_ml.a
  23. BIN
      nsfw/libs/armeabi-v7a/libopencv_objdetect.a
  24. BIN
      nsfw/libs/armeabi-v7a/libopencv_photo.a
  25. BIN
      nsfw/libs/armeabi-v7a/libopencv_shape.a
  26. BIN
      nsfw/libs/armeabi-v7a/libopencv_stitching.a
  27. BIN
      nsfw/libs/armeabi-v7a/libopencv_superres.a
  28. BIN
      nsfw/libs/armeabi-v7a/libopencv_video.a
  29. BIN
      nsfw/libs/armeabi-v7a/libopencv_videoio.a
  30. BIN
      nsfw/libs/armeabi-v7a/libopencv_videostab.a
  31. 5
      nsfw/src/main/AndroidManifest.xml
  32. 24
      nsfw/src/main/cpp/native-lib.cpp
  33. 53
      nsfw/src/main/java/com/zwy/nsfw/Classifier.java
  34. 10
      nsfw/src/main/java/com/zwy/nsfw/JniLoader.java
  35. 17
      openCVLibrary340/build.gradle
  36. 199
      openCVLibrary340/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out/org/opencv/engine/OpenCVEngineInterface.java
  37. 13
      openCVLibrary340/build/generated/source/buildConfig/debug/org/opencv/BuildConfig.java
  38. 9
      openCVLibrary340/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml
  39. 1
      openCVLibrary340/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json
  40. 1
      openCVLibrary340/build/intermediates/annotation_processor_list/debug/annotationProcessors.json
  41. 0
      openCVLibrary340/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt
  42. BIN
      openCVLibrary340/build/intermediates/compile_library_classes/debug/classes.jar
  43. BIN
      openCVLibrary340/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/generateDebugRFile/R.jar
  44. BIN
      openCVLibrary340/build/intermediates/full_jar/debug/createFullJarDebug/full.jar
  45. BIN
      openCVLibrary340/build/intermediates/incremental/debug-mergeJniLibs/merge-state
  46. 2
      openCVLibrary340/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
  47. 2
      openCVLibrary340/build/intermediates/incremental/mergeDebugShaders/merger.xml
  48. 2
      openCVLibrary340/build/intermediates/incremental/packageDebugAssets/merger.xml
  49. 1
      openCVLibrary340/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
  50. 11
      openCVLibrary340/build/intermediates/incremental/packageDebugResources/merged.dir/values/values.xml
  51. 16
      openCVLibrary340/build/intermediates/incremental/packageDebugResources/merger.xml
  52. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/BuildConfig.class
  53. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/AsyncServiceHelper$1.class
  54. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/AsyncServiceHelper$2.class
  55. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/AsyncServiceHelper$3$1.class
  56. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/AsyncServiceHelper$3$2.class
  57. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/AsyncServiceHelper$3.class
  58. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/AsyncServiceHelper.class
  59. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/BaseLoaderCallback$1.class
  60. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/BaseLoaderCallback$2.class
  61. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/BaseLoaderCallback$3.class
  62. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/BaseLoaderCallback$4.class
  63. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/BaseLoaderCallback$5.class
  64. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/BaseLoaderCallback$6.class
  65. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/BaseLoaderCallback$7.class
  66. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/BaseLoaderCallback.class
  67. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/Camera2Renderer$1.class
  68. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/Camera2Renderer$2.class
  69. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/Camera2Renderer.class
  70. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraBridgeViewBase$1.class
  71. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraBridgeViewBase$CvCameraViewFrame.class
  72. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraBridgeViewBase$CvCameraViewListener.class
  73. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraBridgeViewBase$CvCameraViewListener2.class
  74. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraBridgeViewBase$CvCameraViewListenerAdapter.class
  75. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraBridgeViewBase$ListItemAccessor.class
  76. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraBridgeViewBase.class
  77. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraGLRendererBase.class
  78. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraGLSurfaceView$CameraTextureListener.class
  79. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraGLSurfaceView.class
  80. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/CameraRenderer.class
  81. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/FpsMeter.class
  82. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/InstallCallbackInterface.class
  83. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/JavaCameraView$1.class
  84. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/JavaCameraView$CameraWorker.class
  85. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/JavaCameraView$JavaCameraFrame.class
  86. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/JavaCameraView$JavaCameraSizeAccessor.class
  87. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/JavaCameraView.class
  88. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/LoaderCallbackInterface.class
  89. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/OpenCVLoader.class
  90. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/StaticHelper.class
  91. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/Utils.class
  92. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/Calib3d.class
  93. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoBM.class
  94. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoMatcher.class
  95. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoSGBM.class
  96. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Algorithm.class
  97. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core$MinMaxLocResult.class
  98. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core.class
  99. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvException.class
  100. BIN
      openCVLibrary340/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvType.class
  101. Some files were not shown because too many files have changed in this diff Show More

@ -11,6 +11,7 @@
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/nsfw" />
<option value="$PROJECT_DIR$/openCVLibrary340" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />

@ -33,7 +33,7 @@
</profile-state>
</entry>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

@ -34,4 +34,42 @@
```
### Demo运行结果:
![图片](https://github.com/devzwy/open_nsfw_android/blob/master/img/1.png)
![图片](https://github.com/devzwy/open_nsfw_android/blob/master/img/1.png)
0.9254902 0.7764706 0.7254902 0.92156863 0.77254903 0.72156864
[16:16+224,16:16+224,:] [16:240,16:240,:]
0.90588236-R 0.75686276-G 0.68235296-B ------0.01960784 0.01960784 0.04313724
0.90196079 0.75294119 0.6784314
[:,:,:: -1]
0.68235296-B 0.75686276-G 0.90588236-R
*255 转换为int
174 193 231
-[104, 117, 123]
70 76 108
opencv假设图像是RGB三分量组成的图像,那么图像的
第一通道是R,
第二通道是G,
第三通道是B
Img[:,:,2]代表R通道,也就是红色分量图像;
Img[:,:,1]代表G通道,也就是绿色分量图像;
Img[:,:,0]代表B通道,也就是蓝色分量图像。

@ -34,6 +34,6 @@ dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
// implementation project(path: ':nsfw')
implementation 'com.github.devzwy:open_nsfw_android:1.2.1'
implementation project(path: ':nsfw')
// implementation 'com.github.devzwy:open_nsfw_android:1.2.1'
}

@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.open_nsfw_android">
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/icon"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 445 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

@ -18,20 +18,31 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//assets 目录下的timg-10.jpeg为正常静态图片 ccc.gif 为动态正常图片 可用作测试
val b = BitmapFactory.decodeStream(resources.assets.open("aaa.png"))
iv.setImageBitmap(b)
// val b = BitmapFactory.decodeStream(resources.assets.open("img/06 (1).jpg"))
// iv.setImageBitmap(b)
nsfwHelper = NsfwHelper.getInstance(this, true, 1)
bt_.setOnClickListener {
//同步识别
val nsfwBean = nsfwHelper?.scanBitmapSyn(b)
Log.d("demo", nsfwBean.toString())
tvv.text = "识别成功:\n\tSFW score : ${nsfwBean?.sfw}\n\tNSFW score : ${nsfwBean?.nsfw}"
if (nsfwBean?.nsfw ?: 0f > 0.7) {
tvv.text = "${tvv.text} \n \t - 色情图片"
} else {
tvv.text = "${tvv.text} \n \t - 正常图片"
for (a in resources.assets.list("img")) {
val b = BitmapFactory.decodeStream(resources.assets.open("img/${a}"))
val nsfwBean = nsfwHelper?.scanBitmapSyn(b)
Log.d("demo", nsfwBean.toString() + " - ${a}")
tvv.text = "识别成功:\n\tSFW score : ${nsfwBean?.sfw}\n\tNSFW score : ${nsfwBean?.nsfw},- ${a}"
if (nsfwBean?.nsfw ?: 0f > 0.7) {
tvv.text = "${tvv.text} \n \t - 色情图片"
} else {
tvv.text = "${tvv.text} \n \t - 正常图片"
}
}
// val nsfwBean = nsfwHelper?.scanBitmapSyn(b)
// Log.d("demo", nsfwBean.toString())
// tvv.text = "识别成功:\n\tSFW score : ${nsfwBean?.sfw}\n\tNSFW score : ${nsfwBean?.nsfw}"
// if (nsfwBean?.nsfw ?: 0f > 0.7) {
// tvv.text = "${tvv.text} \n \t - 色情图片"
// } else {
// tvv.text = "${tvv.text} \n \t - 正常图片"
// }
// //异步识别,接口回调识别结果
// nsfwHelper?.scanBitmap(b) { sfw, nsfw ->
// Log.d("demo", "sfw:$sfw,nsfw:$nsfw")
@ -39,4 +50,22 @@ class MainActivity : AppCompatActivity() {
}
}
// override fun onResume() {
// super.onResume()
// if (!OpenCVLoader.initDebug()) {
// OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
// } else {
// mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
// }
// }
// internal var mLoaderCallback: LoaderCallbackInterface = object : LoaderCallbackInterface {
// override fun onManagerConnected(status: Int) {
//
// }
//
// override fun onPackageInstall(operation: Int, callback: InstallCallbackInterface) {
//
// }
// }
}

@ -5,7 +5,7 @@ buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
@ -19,7 +19,9 @@ allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven {
url 'https://jitpack.io'
}
}
}

@ -0,0 +1,44 @@
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${log-lib} )

@ -11,16 +11,40 @@ android {
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
}
}
ndk {
// Specifies the ABI configurations of your native
// libraries Gradle should build and package with your APK.
// abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'mips64'
abiFilters 'armeabi-v7a'
}
}
buildTypes {
debug{
minifyEnabled false //
minifyEnabled false //®
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
assets.srcDir("main/assets")
}
}
}
dependencies {
@ -32,4 +56,15 @@ dependencies {
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'org.tensorflow:tensorflow-lite:+'
implementation 'org.tensorflow:tensorflow-lite-gpu:+'
implementation project(path: ':openCVLibrary340')
}
task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
from fileTree(dir: 'libs', include: '**/*.so')
into 'lib/'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}

@ -1 +1,4 @@
<manifest package="com.zwy.nsfw"/>
<manifest package="com.zwy.nsfw" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>

@ -0,0 +1,24 @@
#include <jni.h>
#include <string>
extern "C"
JNIEXPORT void JNICALL
Java_com_zwy_nsfw_JniLoader_argb2bgr(JNIEnv *env, jobject thiz,
jbyteArray rgbSrc_,
jbyteArray bgrDesc_) {
jbyte *rgbSrc = env->GetByteArrayElements(rgbSrc_, NULL);
jbyte *bgrDesc = env->GetByteArrayElements(bgrDesc_, NULL);
printf("s[]=%s\n","C+++++++++");/*输出数组字符串s[]=Hello,Comrade*/
int wh = env->GetArrayLength(rgbSrc_) / 4 ;
//#pragma omp parallel for
for (int i = 0; i < wh; ++i) {
bgrDesc[i * 3] = rgbSrc[i * 4 + 2]; //B
bgrDesc[i * 3 + 1] = rgbSrc[i * 4 + 1]; //G
bgrDesc[i * 3 + 2] = rgbSrc[i * 4 ]; //R
}
env->ReleaseByteArrayElements(rgbSrc_, rgbSrc, JNI_ABORT);
env->ReleaseByteArrayElements(bgrDesc_, bgrDesc, JNI_COMMIT);
}

@ -5,9 +5,15 @@ import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Matrix;
import android.os.SystemClock;
import android.util.Log;
import com.zwy.nsfw.api.NsfwBean;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
import org.tensorflow.lite.Interpreter;
import org.tensorflow.lite.gpu.GpuDelegate;
@ -35,7 +41,7 @@ public abstract class Classifier {
/**
* Preallocated buffers for storing image data in.
*/
private int[] intValues = new int[getImageSizeX() * getImageSizeY()];
private int[] intValues = new int[224 * 224];
/**
* Options for configuring the Interpreter.
@ -100,6 +106,7 @@ public abstract class Classifier {
* DIM_PIXEL_SIZE
* getNumBytesPerChannel());
imgData.order(ByteOrder.LITTLE_ENDIAN);
OpenCVLoader.initDebug();
Log.d(TAG, "Tensorflow Lite Image Classifier Initialization Success.");
}
@ -122,32 +129,29 @@ public abstract class Classifier {
if (imgData == null || bitmap_ == null) {
return;
}
Bitmap bitmap = Bitmap.createScaledBitmap(bitmap_, 224, 224, false);
imgData.rewind();
// intValues= ImageUtil.bitmap2BGR(bitmap);
Matrix m = new Matrix();
m.setScale(-1, 1);//水平翻转
Bitmap reversePic = Bitmap.createBitmap(bitmap_, 0, 0, bitmap_.getWidth(), bitmap_.getHeight(), m, true);
//把每个像素的颜色值转为int 存入intValues
bitmap.getPixels(intValues, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
// bitmap.copyPixelsToBuffer(imgData);
reversePic.getPixels(intValues, 0, 224, 16, 16, 224, 224);
// Convert the image to floating point.
int pixel = 0;
long startTime = SystemClock.uptimeMillis();
for (int i = 0; i < getImageSizeX(); ++i) {
for (int j = 0; j < getImageSizeY(); ++j) {
//操作每一个像素
//拿出每一个像素点对应的R、G、B的int值
//对每一个int值减去阈值 R-123 B-104 G-117
//将R、G、B 利用 B、G、R顺序重新写入数组
//将数组传入tflite获取回传结果
for (int i = 16; i < 240; ++i) {
for (int j = 16; j < 240; ++j) {
final int color = intValues[pixel++];
int r1 = Color.red(color) - 123;
int g1 = Color.green(color) - 117;
int b1 = Color.blue(color) - 104;
int r1 = Color.red(color);
int g1 = Color.green(color);
int b1 = Color.blue(color);
int rr1 = r1 - 123;
int gg1 = g1 - 117;
int bb1 = b1 - 104;
imgData.putFloat(b1);
imgData.putFloat(g1);
imgData.putFloat(r1);
imgData.putFloat(bb1);
imgData.putFloat(gg1);
imgData.putFloat(rr1);
}
}
long endTime = SystemClock.uptimeMillis();
@ -155,7 +159,14 @@ public abstract class Classifier {
}
public NsfwBean run(Bitmap bitmap) {
convertBitmapToByteBuffer(bitmap);
Mat mat = new Mat();
Utils.bitmapToMat(bitmap, mat, false);
//线性采样
Mat mat1 = new Mat();
Imgproc.resize(mat, mat1, new Size(256, 256), 0, 0, Imgproc.INTER_CUBIC);
Bitmap bitmap_256 = Bitmap.createBitmap(256, 256, Bitmap.Config.RGB_565);
Utils.matToBitmap(mat1, bitmap_256);
convertBitmapToByteBuffer(bitmap_256);
long startTime = SystemClock.uptimeMillis();
float[][] labelProbArray = new float[1][2];
tflite.run(imgData, labelProbArray);

@ -0,0 +1,10 @@
package com.zwy.nsfw;
public class JniLoader {
static {
System.loadLibrary("native-lib");
}
public static native void argb2bgr(byte[] rgbSrc,byte[] bgrDesc);
}

@ -0,0 +1,17 @@
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 15
targetSdkVersion 28
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}

@ -0,0 +1,199 @@
/*
* This file is auto-generated. DO NOT MODIFY.
* Original file: /Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/main/aidl/org/opencv/engine/OpenCVEngineInterface.aidl
*/
package org.opencv.engine;
/**
* Class provides a Java interface for OpenCV Engine Service. It's synchronous with native OpenCVEngine class.
*/
public interface OpenCVEngineInterface extends android.os.IInterface
{
/** Local-side IPC implementation stub class. */
public static abstract class Stub extends android.os.Binder implements org.opencv.engine.OpenCVEngineInterface
{
private static final java.lang.String DESCRIPTOR = "org.opencv.engine.OpenCVEngineInterface";
/** Construct the stub at attach it to the interface. */
public Stub()
{
this.attachInterface(this, DESCRIPTOR);
}
/**
* Cast an IBinder object into an org.opencv.engine.OpenCVEngineInterface interface,
* generating a proxy if needed.
*/
public static org.opencv.engine.OpenCVEngineInterface asInterface(android.os.IBinder obj)
{
if ((obj==null)) {
return null;
}
android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
if (((iin!=null)&&(iin instanceof org.opencv.engine.OpenCVEngineInterface))) {
return ((org.opencv.engine.OpenCVEngineInterface)iin);
}
return new org.opencv.engine.OpenCVEngineInterface.Stub.Proxy(obj);
}
@Override public android.os.IBinder asBinder()
{
return this;
}
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
{
java.lang.String descriptor = DESCRIPTOR;
switch (code)
{
case INTERFACE_TRANSACTION:
{
reply.writeString(descriptor);
return true;
}
case TRANSACTION_getEngineVersion:
{
data.enforceInterface(descriptor);
int _result = this.getEngineVersion();
reply.writeNoException();
reply.writeInt(_result);
return true;
}
case TRANSACTION_getLibPathByVersion:
{
data.enforceInterface(descriptor);
java.lang.String _arg0;
_arg0 = data.readString();
java.lang.String _result = this.getLibPathByVersion(_arg0);
reply.writeNoException();
reply.writeString(_result);
return true;
}
case TRANSACTION_installVersion:
{
data.enforceInterface(descriptor);
java.lang.String _arg0;
_arg0 = data.readString();
boolean _result = this.installVersion(_arg0);
reply.writeNoException();
reply.writeInt(((_result)?(1):(0)));
return true;
}
case TRANSACTION_getLibraryList:
{
data.enforceInterface(descriptor);
java.lang.String _arg0;
_arg0 = data.readString();
java.lang.String _result = this.getLibraryList(_arg0);
reply.writeNoException();
reply.writeString(_result);
return true;
}
default:
{
return super.onTransact(code, data, reply, flags);
}
}
}
private static class Proxy implements org.opencv.engine.OpenCVEngineInterface
{
private android.os.IBinder mRemote;
Proxy(android.os.IBinder remote)
{
mRemote = remote;
}
@Override public android.os.IBinder asBinder()
{
return mRemote;
}
public java.lang.String getInterfaceDescriptor()
{
return DESCRIPTOR;
}
@Override public int getEngineVersion() throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
int _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
mRemote.transact(Stub.TRANSACTION_getEngineVersion, _data, _reply, 0);
_reply.readException();
_result = _reply.readInt();
}
finally {
_reply.recycle();
_data.recycle();
}
return _result;
}
@Override public java.lang.String getLibPathByVersion(java.lang.String version) throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
java.lang.String _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
_data.writeString(version);
mRemote.transact(Stub.TRANSACTION_getLibPathByVersion, _data, _reply, 0);
_reply.readException();
_result = _reply.readString();
}
finally {
_reply.recycle();
_data.recycle();
}
return _result;
}
/**
* Tries to install defined version of OpenCV from Google Play Market.
* @param OpenCV version.
* @return Returns true if installation was successful or OpenCV package has been already installed.
*/
@Override public boolean installVersion(java.lang.String version) throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
boolean _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
_data.writeString(version);
mRemote.transact(Stub.TRANSACTION_installVersion, _data, _reply, 0);
_reply.readException();
_result = (0!=_reply.readInt());
}
finally {
_reply.recycle();
_data.recycle();
}
return _result;
}
@Override public java.lang.String getLibraryList(java.lang.String version) throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
java.lang.String _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
_data.writeString(version);
mRemote.transact(Stub.TRANSACTION_getLibraryList, _data, _reply, 0);
_reply.readException();
_result = _reply.readString();
}
finally {
_reply.recycle();
_data.recycle();
}
return _result;
}
}
static final int TRANSACTION_getEngineVersion = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
static final int TRANSACTION_getLibPathByVersion = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
static final int TRANSACTION_installVersion = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);
static final int TRANSACTION_getLibraryList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3);
}
public int getEngineVersion() throws android.os.RemoteException;
public java.lang.String getLibPathByVersion(java.lang.String version) throws android.os.RemoteException;
/**
* Tries to install defined version of OpenCV from Google Play Market.
* @param OpenCV version.
* @return Returns true if installation was successful or OpenCV package has been already installed.
*/
public boolean installVersion(java.lang.String version) throws android.os.RemoteException;
public java.lang.String getLibraryList(java.lang.String version) throws android.os.RemoteException;
}

@ -0,0 +1,13 @@
/**
* Automatically generated file. DO NOT MODIFY
*/
package org.opencv;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "org.opencv";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = -1;
public static final String VERSION_NAME = "";
}

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.opencv" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="28" />
</manifest>

@ -0,0 +1 @@
[{"outputType":{"type":"AAPT_FRIENDLY_MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":-1,"enabled":true,"outputFile":"openCVLibrary340-debug.aar","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"org.opencv","split":""}}]

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/main/jniLibs"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/debug/jniLibs"/></dataSet></merger>

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/main/shaders"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/debug/shaders"/></dataSet></merger>

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/main/assets"/><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/build/intermediates/shader_assets/debug/compileDebugShaders/out"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/debug/assets"/></dataSet></merger>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CameraBridgeViewBase">
<attr format="boolean" name="show_fps"/>
<attr format="integer" name="camera_id">
<enum name="any" value="-1"/>
<enum name="back" value="99"/>
<enum name="front" value="98"/>
</attr>
</declare-styleable>
</resources>

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/main/res"/><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/build/generated/res/rs/debug"/><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/build/generated/res/resValues/debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main" generated-set="main$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/main/res"><file path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/main/res/values/attrs.xml" qualifiers=""><declare-styleable name="CameraBridgeViewBase">
<attr format="boolean" name="show_fps"/>
<attr format="integer" name="camera_id">
<enum name="any" value="-1"/>
<enum name="back" value="99"/>
<enum name="front" value="98"/>
</attr>
</declare-styleable></file></source><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/build/generated/res/rs/debug"/><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/build/generated/res/resValues/debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/debug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug" generated-set="debug$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jason/AndroidStudioProjects/open_nsfw_android/openCVLibrary340/src/debug/res"/></dataSet><mergedItems><configuration qualifiers=""><declare-styleable name="CameraBridgeViewBase">
<attr format="boolean" name="show_fps"/>
<attr format="integer" name="camera_id">
<enum name="any" value="-1"/>
<enum name="back" value="99"/>
<enum name="front" value="98"/>
</attr>
</declare-styleable></configuration></mergedItems></merger>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save