feileo / guone

🐾 A simple demo automatic recognition web system for buildings based on flask supports two modes of image classification and object detection .

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

guone

guone 是一个简单的(DEMO)基于 flask 开发的户外建筑自动识别 web 系统,支持图像分类和实时目标检测两种模式。

下载

使用命令:

git clone https://github.com/acthse/guone.git you_path

然后:

git submodule init
git submodule update

或使用 --recursive 也阔以:

git clone --recursive https://github.com/acthse/guone.git you_path

启动

下载完成后,进入 guone 构建项目:

cd guone/
buildout

如果你没有安装 buildout 可使用 pip 安装:

pip install zc.buildout

构建完成后,本地 debug 模式下启动 guone:

./runguone.sh debug   # 注意单词区分大小写

或者直接

./bin/guone

正式生产环境启动:

./runguone.sh

gunicorn 的配置在 gun.conf 中,可根据需求更改。


成功启动项目后,可看到如下信息:

[2018-06-07 19:33:02 +0800] [9928] [INFO] Starting gunicorn 19.8.1
[2018-06-07 19:33:02 +0800] [9928] [INFO] Listening at: http://0.0.0.0:8004 (9928)
[2018-06-07 19:33:02 +0800] [9928] [INFO] Using worker: gevent
[2018-06-07 19:33:02 +0800] [9931] [INFO] Booting worker with pid: 9931

访问 http://localhost:8004 即可看到系统的登录界面使用 guone,但因为 guone 依赖 darknet 框架和 VLFeat 工具包, 所以你需要安装完成 darknet 并下载配置 VLFeat 工具包后才能正常使用,下面介绍安装方法。

使用 darknet

darknet 是一个用 C 和 CUDA 编写的相当不错的开源神经网络框架,这是作者的 darknet 主页

关于安装和使用,请阅读 darknet 主页的 Installing DarknetYOLO: Real-Time Object Detection,有详细介绍。
你需要在你的机子上根据你的需要以及硬件条件决定是否安装 OpenCV 和 CUDA,安装完成后, 在 MakeFile 中修改相关选项。因为我的代码已经编译过,你需要进入 darknet 目录执行:

meke clean

然后重新编译完成即可使用:

meke -j16

测试一下

站在大神的肩膀上,一切都变得很简单。

采用本系统训练好的模型(当然你也可以下载官网给出的其他模型)进行测试,命令如下(windows 下使用 darknet.exe 即可)

  1. building_v3.cfg 复杂版网络
./darknet detector test cfg/building.data cfg/building_v3.cfg weights/building_v3.weights test_image_path
  1. building_v3_tiny.cfg 简版网络,速度比上面的快10多倍,检测效果略差。
/darknet detector test cfg/building.data cfg/building_v3_tiny.cfg weights/building_v3_tiny.weights  test_image_path
  1. 开启摄像头实时检测,需要在编译时开启 CUDA 和 opencv,不用-c指定摄像头时 opencv 默认为 0。
./darknet detector demo cfg/building.data cfg/building_v3.cfg weights/building_v3.weights  [ -c <num> ]
  1. 检测本地视频文件,至少需要在编译时开启 opencv。
./darknet detector demo cfg/building.data cfg/building_v3.cfg weights/building_v3.weights  test_video_file_path

如果测试成功,则说明你已经成功安装并可以使用 darknet 框架了。

安装 opencv 以及安装后编译遇到问题

关于安装opencv ,各操作系统不相同,推荐 使用 Google 或者必应搜索国际版 搜索关键字 opencv3 install on your_system 来找到靠谱的教程。
笔者 mac os 系统安装,推荐这篇教程
安装成功opencv 后,在 MakeFile 中令:

OPENCV = 1

遇到问题:

gcc -Iinclude/ -Isrc/ -DOPENCV pkg-config --cflags opencv -Wall -Wno-unknown-pragmas -Wfatal-```
errors -fPIC -Ofast -DOPENCV -c ./src/gemm.c -o obj/gemm.o
In file included from /usr/local/include/opencv2/core/types_c.h:59:0,
from /usr/local/include/opencv2/core/core_c.h:48,
from /usr/local/include/opencv2/highgui/highgui_c.h:45,
from include/darknet.h:25,
from ./src/utils.h:5,
from ./src/gemm.c:2:
/usr/local/include/opencv2/core/cvdef.h:485:1: error: unknown type name ‘namespace’
namespace cv {
^~~~~~~~~
compilation terminated due to -Wfatal-errors.
Makefile:85: recipe for target 'obj/gemm.o' failed
make: *** [obj/gemm.o] Error 1

这也是笔者在使用opencv编译所遇到的问题,可参考这里解决。

VLFeat

本系统在传统图像分类模式中图像特征的提取(计算图像sift特征值)使用了开源工具包VLFeat提供的二进制文件,获取我要工具包。该工具包支持主流的(windows, Mac, Linux)操作系统,下载好工具包后,我们只需要 sift 的可执行文件,将其在系统中的配置:

在 scripta/sift.py 的方法 process_image()中的cmmd给出 sift 可执行文件的位置即可。

buildout

buildout 是一个基于 Python 的构建工具, 通过一个配置文件,可以从多个部分创建、组装并部署你的应用,即使应用包含了非 Python 的组件,buildout 也能够胜任。 buildout 不但能够像 setuptools 一样自动更新或下载安装依赖包,而且还能够像 virtualenv 一样,构建一个封闭隔离的开发环境。

开发过程中如果需要添加依赖,只需要在 setup.py 中的 install_requires 中添加你的包名,然后 buildout 一下即可。

关于训练

本系统的有两种模式,其中主要介绍实时目标识别 Yolo(darknet) 关于自己数据集的训练。

Yolo (darknet)

训练过程步骤细节较多,需细心关注,大致可以分为以下阶段:

  1. 数据准备,采集图像数据,预处理等;
  2. 标注,推荐使用LabelImg。该工具在 linux 和 windows 下安装极为简单,mac os 下比较困难,作者在 github 上有说明。
  3. 理解并修改 darknet/scripts/voc_label.py,并用其将标注产生的 xml 文件转换成 yolo 需要的格式,以及生成相关图像路径文件;
  4. 准备你的 pro_name.namespro_name.data
  5. 配置你想采用的网络,本系统使用了 yolov3-voc.cfgyolov3-tiny.cfg两个版本 ;
  6. 下载预训练模型/权重文件,开始训练,命令如下:
./darknet detector train cfg/your_pro_name.data cfg/your_pro_name.cfg [预训练模型] [-gpus 0,1,2,3]

这里墙裂推荐使用 GPU,没有条件的可以瞅瞅极客云,不是打广告,笔者就是用的这个,觉着很好用,方便性,价比高。CPU 的话,额,等的你花儿都谢了。

  1. 测试你的模型/权重文件。

具体过程可以参考这篇博文。
这是 yolov2 的训练过程,与 yolov3 的训练过程主要相差在网络文件的修改配置,v3 可看这篇博文。

图像分类模式

图像分类模式的本地图像库训练方法很简单:依次使用脚本

  • guone/core/savevocab.py 图像训练
  • guone/core/buildindex.py 建库创索引/存储库
  • guone/query.py(可选) 查询测试

此部分图像处理参考自《Python计算机视觉编程》

About

🐾 A simple demo automatic recognition web system for buildings based on flask supports two modes of image classification and object detection .

License:MIT License


Languages

Language:Python 99.9%Language:Shell 0.1%