色情图片离线识别,基于TensorFlow实现。识别只需200ms,可断网测试,成功率99%,调用只要一行代码,从雅虎的开源项目open_nsfw移植,tflite(6M)为训练好的模型(已量化),该模型文件可用于iOS、java、C++等平台,Python使用生成的tfLite文件检测图片的速度远远快于使用原模型.
iOS请参考:issues13
Java参考:Tensorflow-Api
C++参考:TensorflowLite-Api
JavaScript参考JS相关文档
其中Python、C++均有两种数据喂入的方式,可根据需求选择pb模型或tfLite文件,详细请参考上面的链接.Java的目前只能加载pb模型。其他的平台可自行百度
- Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
//versionCode:上面小icon中最新版本号
implementation 'com.github.devzwy:open_nsfw_android:[versionCode]'
}
- 扫描时报如下错误
java.lang.NullPointerException: Attempt to invoke virtual method 'com.zwy.nsfw.api.NsfwBean com.zwy.nsfw.Classifier.run(android.graphics.Bitmap)' on a null object reference
请添加
android {
...
aaptOptions {
noCompress "tflite"
}
}
- 使用(请使用最新版本1.3.0)
- 建议在Application中全局初始化
Classifier.Build()
.context(this) //必须调用 否则会有异常抛出
// .isOpenGPU(true)//默认不开启GPU加速 部分机型开启会奔溃,自行选择,默认false
// .numThreads(10) //分配的线程数 根据手机配置设置,默认1
.build()
- 使用:
//方式一:
val nsfwBean = Classifier.Build().context(this).build().run(bitmap)
//方式二
val nsfwBean = bitmap.getNsfwScore()
//方式三
val nsfwBean = file.getNsfwScore()
nsfwBean.sfw ... 非涉黄数值 数值越大约安全
nsfwBean.nsfw ... 涉黄数值 数值越大约危险