初试深度学习

公司内容由用户生成的话,不可避免地会遇到各种色情图片的问题。虽然我们有了举报系统,但是靠人工处理也是挺累的。

正好在半年前,Yahoo 发布了一个开源的基于 Caffe 的色情图片模型。https://github.com/yahoo/open_nsfw

这部分经验我会另起一篇文章来介绍一下。

而本文,主要是我在接触到深度学习相关知识后,发现可以用它来解决自己的一个痛点。

所以就有了此文和一些开源小代码。

 

利用深度学习技术识别图片内容

攒了十多年的图片,有时候想要找一张图片真的是非常痛苦的事情。只能根据大致的时间去找,所以常常找不到。

现在深度学习火了以后,各种图片内容识别技术越来越成熟了,体验了一下各种方案,都可以识别个八九不离十的。

firework

上图是我识别完后丢到 NAS 的图片,创建智能相册后点开烟火,里面就都是烟火。

总的来说,方案分两类:在线的 OpenAPI 和利用开源免费框架自己搭建。

 

利用收费或免费的 OpenAPI

目前找到的收费或免费的 API 一共有3个:

  1. Google Cloud Vision: https://cloud.google.com/vision/
  2. Clarifai: https://www.clarifai.com/
  3. 腾讯优图: https://open.youtu.qq.com/

前两个都是收费的,Google 被墙用起来比较麻烦,所以没有采用。

Clarifai 也是国外的,速度不快,但是起码还能访问。每个月有 5000 张免费额度,对于个人使用来说完全够了,你不太可能在一个月拍 5000 多张照片吧?

最后一个是腾讯优图,目前还没收费,原因肯定是因为还不成熟,但毕竟在国内,速度很有优势。

 

利用 Caffe 和 Caffe Model 做图片识别

这里推荐一个博客,很全面很详细:http://www.cnblogs.com/denny402/category/759199.html

Caffe 相关东西已经非常成熟了,特别是内容识别的 Model,都有现成的素材,可以自己训练,也可以用现成的 Model。

而且还可以利用自己的素材修正现有的 Model。

 

方案选择

目前我的项目里只实现了腾讯优图,后续我会加上其它几种方案的支持。但 Caffe 方案略复杂,而且实际效果不一定好,因为你自己的素材和大厂比起来少太多了。所以不一定会去做。如果做,也只是为了学习实践一下。

 

如何修改图片的标签

keywords

群晖 NAS 的照片管理可以直接编辑图片的标签,但是怎么在电脑上搞定呢?怎么在代码里修改呢?

 

图片信息的相关标准

EXIF https://zh.wikipedia.org/wiki/EXIF 是大家最熟悉的标准了。

EXIF 主要是用来记录硬件信息的标准,想要加标签用的就是另一个标准:IPTC https://en.wikipedia.org/wiki/International_Press_Telecommunications_Council

知道了用什么标准,那就要找相关工具了。支持 EXIF 的工具和开源框架真是遍地都是,但 IPTC 没那么流行,所以很难找。

最后找到了一个很不错的开源工具。包含 C++ 的源码和一个命令行工具。很多 Linux 的桌面底层就是利用它来读取图片相关信息的。

 

Exiv2

项目地址:http://www.exiv2.org/

由于对 C++ 不熟,所以第一版只能在语言里直接调用命令行工具了。介绍几句简单的命令:

显示当前的 IPTC 信息:

exiv2 -PI IMG_20170129_185732.jpg

添加新的标签:

exiv2 -M "add Iptc.Application2.Keywords string newTag"  DSC01018.JPG

删除所有的标签:

exiv2 -M "del Iptc.Application2.Keywords"  DSC01018.JPG

 

photo-tag

最后贴上完成的项目:https://github.com/dozer47528/photo-tag

只用方法也非常简单:

photo-tag -h
Usage of photo-tag:
  -d	Delete current tags
  -p string
    	Photo file path (default "./")

代码使用 Go 语言写的,为什么用 Go?因为 Go 编译出来的是二进制文件,用起来方便。然后 Python 的编码问题实在是太头疼,我选择狗带。Python 写了半天还不如从头学习 Go 写得快。

 

Todo list:

  • 支持 Clarifai
  • 支持 Google Cloud Vision
  • 支持 Caffe 自己训练模型(做的可能性不大)
  • 直接调用 Exiv2 源码,不再调用 Exiv2 命令行工具

本作品由 Dozer 创作,采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。