前言

前几天看到了雅虎开源了一个色情图片的识别模型新闻,上Github一看,是基于caffe的。试了试,模型效果很赞。Github地址:https://github.com/yahoo/open_nsfw

至于测试的数据集,就自行找图吧(逃

关于在程序中使用caffe可以戳我的这一篇博客:http://blog.csdn.net/mr_curry/article/details/52443126 (如何在程序中像使用OpenCV一样使用caffe)

准备

下载好模型和配置文件,观察网络结构。

输入的图片需为彩色图片,尺寸为224*224(Vgg的网络也是224*224).根据最后一层,Softmax将会输出一个概率(图片有多色?)

再打开压缩包中的.py文件,我们可以观察到图像的均值:

我们对网络结构做如下修改,使用MemoryData层:

代码:

为了表示的更为明显,可以用line函数进行画线:波动越大,表示当前图片越...
caffe_predefine.h:
#include "caffe/layers/input_layer.hpp"
#include "caffe/layers/inner_product_layer.hpp"
#include "caffe/layers/dropout_layer.hpp"
#include "caffe/layers/conv_layer.hpp"
#include "caffe/layers/relu_layer.hpp"
#include <iostream>
#include "caffe/caffe.hpp"
#include <opencv.hpp>
#include <caffe/layers/memory_data_layer.hpp>
#include "caffe/layers/pooling_layer.hpp"
#include "caffe/layers/lrn_layer.hpp"
#include "caffe/layers/softmax_layer.hpp"
#include <caffe/layers/batch_norm_layer.hpp>
#include <caffe/layers/scale_layer.hpp>
#include <caffe/layers/eltwise_layer.hpp>
#include <caffe/layers/bias_layer.hpp>caffe::MemoryDataLayer<float> *memory_layer;
caffe::Net<float>* net;

DrawLine.h:

#include <opencv.hpp>using namespace cv;
using namespace std;void DrawLine(Mat T,vector<Point> point_array);

load_model.h:

#include <opencv.hpp>
using namespace cv;
using namespace std;void Caffe_Predefine();
float getProb(Mat source);

load_model.cpp:

#include <caffe_predefine.h>
#include <load_model.h>
namespace caffe
{extern INSTANTIATE_CLASS(InputLayer);extern INSTANTIATE_CLASS(InnerProductLayer);extern INSTANTIATE_CLASS(DropoutLayer);extern INSTANTIATE_CLASS(ConvolutionLayer);REGISTER_LAYER_CLASS(Convolution);extern INSTANTIATE_CLASS(ReLULayer);REGISTER_LAYER_CLASS(ReLU);extern INSTANTIATE_CLASS(PoolingLayer);REGISTER_LAYER_CLASS(Pooling);extern INSTANTIATE_CLASS(LRNLayer);REGISTER_LAYER_CLASS(LRN);extern INSTANTIATE_CLASS(SoftmaxLayer);REGISTER_LAYER_CLASS(Softmax);extern INSTANTIATE_CLASS(MemoryDataLayer);extern INSTANTIATE_CLASS(BatchNormLayer);extern INSTANTIATE_CLASS(ScaleLayer);extern INSTANTIATE_CLASS(EltwiseLayer);extern INSTANTIATE_CLASS(BiasLayer);
}template <typename Dtype>
caffe::Net<Dtype>* Net_Init_Load(std::string param_file, std::string pretrained_param_file, caffe::Phase phase)
{caffe::Net<Dtype>* net(new caffe::Net<Dtype>(param_file, caffe::TEST));net->CopyTrainedLayersFrom(pretrained_param_file);return net;
}void Caffe_Predefine()//when our code begining run must add it
{caffe::Caffe::set_mode(caffe::Caffe::CPU);net = Net_Init_Load<float>("open_nsfw_memorydata.prototxt", "resnet_50_1by2_nsfw.caffemodel", caffe::TEST);memory_layer = (caffe::MemoryDataLayer<float> *)net->layers()[0].get();
}float getProb(Mat source)
{vector<Mat> test;vector<int> label;test.push_back(source);label.push_back(0);memory_layer->AddMatVector(test, label);// memory_layer and net , must be define be a global variable.std::vector<caffe::Blob<float>*> input_vec;net->Forward(input_vec);boost::shared_ptr<caffe::Blob<float>  > prob = net->blob_by_name("prob");return prob->data_at(0, 0, 1, 0);
}

DrawLine.cpp:

#include <DrawLine.h>void DrawLine(Mat T, vector<Point> point_array)
{for (int i = 1; i < point_array.size();i++)line(T, point_array[i-1], point_array[i], Scalar(0, 0, 255), 3);
}

Main.cpp:

#include <load_model.h>#include <DrawLine.h>#define X 0
#define Y 200
int main()
{Caffe_Predefine();VideoCapture cap("test.mp4");Mat frame;float x = 1, y;vector<Point> point_array;Point T_s(X, Y);point_array.push_back(T_s);while (true){cap >> frame;if (!frame.empty()){y = getProb(frame);cout <<"当前概率为"<< y << endl;Point T_l(X+x++, (Y-100*y));//*100为了更为明显显示point_array.push_back(T_l);DrawLine(frame, point_array);imshow("NSFW", frame);waitKey(1);}else{break;}}
}

效果:

使用了某预告片来做显示:

转载于:https://www.cnblogs.com/mtcnn/p/9412031.html

【严肃脸】使用caffe实现色情图片的识别相关推荐

  1. OpenCV实践之路——雅虎色情图片检测神经网络试用报告

    本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/52821497 微博:http ...

  2. GAN严肃脸生成笑脸的TensorFlow实现

    生成对抗网络[40]是Goodfelow提出的一个巧妙的生成模型框架.启发自二人零和博弈的生成对抗网络,通过生成器和判别器相互博弈,避开了 传统生成模型训练过程中反复利用马尔科夫链采样以及采用复杂近似 ...

  3. 百度图片搜索搜出大量色情图片,原因不明

    访客Oculi同学在百度图片搜索上搜索关键字"gif"与"jpg"时发现,返回的搜索结果中出现了大量的色情图片. 不知百度一向宣称的过滤技术,在此时为何不能发挥 ...

  4. 微信自动检测色情图片_python +itchat

    利用微信的第三方库itchat,网页登陆后,当好友发送消息中有图片时,自动检测是否为色情图片并回复结果. 打开后直接弹出登陆二维码,手机扫一下就登陆运行了. 感觉是个有点好玩的东西,虽然每个人只是图一 ...

  5. 好玩的python3代码_python好玩的项目—色情图片识别代码分享

    一.实验简介 本实验将使用 Python3 去识别图片是否为色情图片,我们会使用到 PIL 这个图像处理库,会编写算法来划分图像的皮肤区域 1.1. 知识点 Python 3 的模块的安装 Pytho ...

  6. caffe与cv2图片格式的相互转换

    目录: caffe与cv2图片格式转换 str_to_cv2图片格式转换 caffe与cv2图片格式的转换 python中两种方式直接获得的图像是不一样的,主要表现在颜色通道,数据类型上,如下表.因此 ...

  7. Python 实现色情图片识别

    不管你是出于什么目的点进来的,首先你要知道,这是一个正经的教程--╭(╯^╰)╮ 今天要介绍的项目是用 Python 制作一个鉴黄程序,它可以识别一张图片是否为色情图片.内容出自课程--「Python ...

  8. python软件长什么样图片_听说各大网站的色情图片识别都是用的这个程序?Python识别色情图...

    2.2 程序原理 本程序根据颜色(肤色)找出图片中皮肤的区域,然后通过一些条件判断是否为色情图片. 程序的关键步骤如下: HSV 颜色模式 h > 0 and h < 35 and s & ...

  9. caffe python 图片训练识别 实例

    本文主要是使用caffe python做图片识别的示例包括训练数据lmdb生成,训练,以及模型测试,主要内容如下: 训练,验证数据lmdb生成,主要包括:样本的预处理 (直方图均衡化,resize), ...

最新文章

  1. 《Apache Kafka》学习笔记
  2. POJ3322滚箱子游戏(不错)
  3. Node.js技术手册
  4. 使用内存映射文件获取巨大的矩阵
  5. 如何识别媒体偏见_描述性语言理解,以识别文本中的潜在偏见
  6. 新联会是什么组织的作用_“新国标”脚蹬子受到人们热议!它的作用是什么,可有可无吗?...
  7. ASP.NET——基础 12、Request
  8. mysql 时间 sql_MySQL sql语句获取当前日期|时间|时间戳
  9. 飞龙的程序员书单 – 其它
  10. Linux四种共享内存技术(附源码):SystemV、POSIX mmap、memfd_create、dma-buf
  11. 【ERROR】:LNK1123: failure during conversion to COFF
  12. Mac与Windows或Linux的键鼠共享神器Synergy
  13. 你能识别这些科技公司的真假logo吗?
  14. 物联网标识管理系统源码
  15. vs2010 调用matlab,vs2010调用matlab引擎
  16. HTML5+CSS大作业——清新春暖花开个人博客网站(6页)
  17. ASP使用ASPupload组件上传多个文件
  18. matlab通信系统4g,matlab_通信原理.ppt
  19. 兆位和兆字节之间有什么区别?
  20. python调用谷歌地图api_python显示地图与谷歌地图

热门文章

  1. Hibernate 学习教程
  2. ixchat 的安装使用(文件在云盘)
  3. 计算机毕业设计ssm民宿平台bwla1系统+程序+源码+lw+远程部署
  4. android调试stetho的那点事
  5. JPA implementations comparison: Hibernate, Toplink Essentials, Openjpa, Eclipselink
  6. 操作系统面经大全——双非上岸阿里巴巴系列
  7. Android中init与受精卵Zygote分析,以及添加自己开机启动的系统服务
  8. 气门组的结构组成有哪些_气门组包括哪些零件?
  9. Electron常见问题 49 - module was compiled against a different Node.js version usingNODE_MODULE_VERSION
  10. 微信小程序 最强连一连攻略 程序自动玩