利用python web框架django实现py-faster-rcnn demo实例
操作系统、编程环境及其他: window7 cpu python2.7 pycharm5.0 django1.8x
说明:本blog是上一篇blog(http://www.cnblogs.com/deeplearning1314/p/7137737.html)的后继。本blog要解决的问题是利用Python的web框架,将faster-rcnn的demo程序以网页形式展现出来,简而言之是基于B-S架构的编程,直观地以网页形式展示目标检测的功能。由于本人才疏学浅,暂时未能习得Django精髓与Python编程精髓,虽然功能实现了,但以本人的要求来看,实现还是略为粗糙的,编程基本功正在加强中。这也是我一直追求的模样,我希望成为一个兼具理论和技能的研究生。本blog不具备较强的理论性,东拼西凑的Django上传、显示图片机制,以及一些为图省事拍脑袋想出的编程小技巧,但至少本blog具备较强的实践性。理论部分待我空下来了,系统学习Django框架后另行补充。我会回头来学好Django,大概是导师某天带着我去看一个老师写的Django工程,我被密密麻麻的代码震撼了,这大抵是原因。最后,如果读者在复现实验时认为本文有疏漏不对的地方,请在博客园私信联系我改正,谢谢!
感谢:特别感谢负责的导师,本人陋习太多,正在改正,比如拖延症、强迫症···如果不是导师一次次催我,一次次耐心地为我讲解代码、工作机制,以及上面提到的带着我求助Django编程方面比较专业的老师,我可能要花更久的时间来做好这项小任务。真诚地感谢这种督促,我会更加努力,少说话,多做事,丰富个人的学习和生活。除此之外,我还要感谢同济大学的俊杰兄,在python编程方面给了我很多指导,甚至为一个未曾谋面的我请教其师兄相关Django的问题。只记得那天完成这个小任务,我内心很有成就感,慢慢加油吧。毕竟是个小任务,不在此一一感谢那些在乎我关心我的人了。
注意:上一篇blog被多个技术网站转载并且未署名和来源,部分评论我看不到恢复不了,如有问题交流请在博客园上评论区联系我,如果看到了我一般会回,共同提高。
不说太多废话了,切入正题!
要完成上述提及的小任务,主要需要以下几个步骤:Django环境的搭建、弄懂Django文件上传机制、对faster rcnn demo程序的适应性修改
在讲解前,首先看下本文任务实现的效果:
首先启动服务器,返回一个网址: http://127.0.0.1:8000/ 即本主机地址 (模拟网页,本机同时是服务器、后台和用户)
然后,我们可以登录上面给出的地址
接着,我们输入相关内容,点击ok
等待网页返回处理后的结果(实例图片是俺美丽的女朋友)
我们可以看到此时的后台程序是在执行相关代码的
效果看完了,接着我们开始介绍,如果想复现实验,请按本人写作顺序看懂后依次进行。
一、Django环境的搭建
提供一个网址: https://code.ziqiangxuetang.com/django/django-tutorial.html
以本人Windows7系统为例看Django环境搭建2.1.2部分应该就会了,建议选Django1.8版本便于学习,这个网址的作者也是这么建议的。
建议自主学习本网址Django视图与网址部分,半小时就能理解。大致能对新建Django工程、工程目录下都有什么文件、以及主要的一些文件如views.py、urls.py的作用有个清晰的理解,这些内容还是静静地看这个网址的讲解,后面我也会提及一部分,但是为避免出错不会过分提及。以下是本人安装Django的笔记,大略可以参考一下。
二、本文Django工程上传文件机制
参考blog链接:http://www.cnblogs.com/fnng/p/3740274.html
上述网址中是基于deepin linux 2013、python 2.7、Django 1.6.2环境来实现的,根据本人window7 Django1.8因此需要做部分修改,结合参考blog具体以下面所讲为主。
(1)创建项目与应用
这部分内容在”一”中所给网址中讲解的非常清楚,我的django工程地址:E:\deep learning\py-faster-rcnn-master\tools\,首先cmd模式下cd到你想放置的路径,然后输入django-admin.py startproject mysite2 创建一个名为mysite2的Django工程,接着cd到mysite2的路径 cd mysite2,在项目下创建一个disk应用 python manage.py startapp disk,这时,可以在相应位置看到新建的Django工程,以及可以看到类似于下面的Django工程目录结构。
(2)设计model(数据库)
后面执行上传图片操作时,会将图片传至upload文件夹内。
(3)数据库同步
cmd模式下cd 到Django工程mysite2(第一级的mysite2)下,依次敲入以下命令(由于本人版本不同所以与上述blog中略有不同),按提示操作python manage.py syncdb,python manage.py makemigration,python manage.py migrate,正常情况下,cmd窗口应该会显示以下内容:(忽略我这里设置的路径,我刚开始默认存在c盘的,为了方便工作我后来直接拷贝整个Django工程到e盘相关路径下也是能正常工作的)
同时可以在mysite2中看到一些和数据库有关的文件
(4)创建视图函数 按下面截图要求修改views.py视图函数
(5)创建模板文件
先在mysite2/disk/目录下创建templates文件夹,接着在mysite2/disk/templates/目录下创建register.html 文件
不用按参考blog中提到的设置模板路径,Django1.8版能够自动找到
(6)设置URL
(7)启动服务
Cmd模式下cd到Django工程mysite2(第一级mysite2)的路径,输入命令Python manage.py runserver 启动服务器,有可能会抛出相应错误,具体解决办法见参考blog,正常成功情况下应显示如下界面,并能上传图片到自己新建的upload文件夹。(upload文件夹需要新建,路径参考下面截图)
至此,本文任务实现了一小部分,需要弄明白这里Django文件上传的机制。Django最主要的几个文件大概是urls.py、views.py、html、models.py文件,在这里我简要介绍一下上述代码的执行过程(读者可先不进行此步实验、文末我会给出完整的代码云盘链接)
首先,我们来看urls.py文件
重点看我标注的这一句,urls文件指明了当用户访问登录返回的网址时需要执行的函数,这句表示当用户访问http://127.0.0.1:8000/ 时要执行views.py中定义的register函数
接着我们看一下html文件内容
学过html一些概念的人应该能读懂这段,但是这里有句{{uf.as_p}}让人很难理解意思,uf是建立的user数据库,具体理论我说不清,但是这里是填充一些内容的,怎么知道的呢?当显示登录界面时,请在浏览器工具栏—工具----查看源代码可以看到网页信息如下,比较上下区别,就可以弄懂啦!
我们接下来关注views.py视图函数,这里面定义了一些Django工程中的核心函数,我们后续也是要将demo代码添加进来的。
在这里我主要想讲解一下这段代码的执行顺序,当我们输入网址登录网页时,这时request.method还不是post方式,所以执行的是else下的代码,返回了一个html文件,并且在原始文件中{{uf.as_p}}填充了uf的一些输入要求,比如type,这可以在上面的源文件中看到。render_to_response() 的第一个参数必须是要使用的模板名称。 如果要给定第二个参数,那么该参数必须是为该模板创建 Context 时所使用的字典。之后,当我们输入了username、选择的图片后点击OK,这时变成post方式,执行if语句,返回httpresponse对象,显示upload ok,这时文件夹upload里就会保存刚才上传的图片。至此upload的form表单方式上传文件机制介绍完了,实际上还有更简单的文件上传机制,比如文件流的方式,只是当时我没调通,所以没有细究。除此以外,将选择的图片经过demo处理后需要再在网页上显示处理结果,这里我投机取巧找到一个文件流的显示方式,具体见代码,返回了一个httpresponse对象。
以上只是为了讲解Django的文件上传显示机制,具体全部代码、代码执行过程以及本人投机取巧的地方将在后面代码注解中给出。
三、本文faster rcnn demo程序的适应性局部修改与关键地方讲解
现在服务器、后台能够接受到用户传来的图片,所以我们很自然的想到下一步任务就是把demo的关键处理代码拷贝到Django工程下的views.py文件。拷贝过来,当然需要修改一些地方,faster_rcnn的模块调用要理顺。首先需要将E:\deep learning\py-faster-rcnn-master\tools中的_init_paths.py文件修改成如下图,并拷贝到如下路径,主要是为了使添加上述代码后的views.py执行时能找到faster_rcnn的相关文件,为方便处理,我直接给出了相应模块、py文件的完整路径。其中osp.join函数是个拼接路径函数,路径的正确格式也是我打断点调试才知道的。
接下来,让我们来看最后的完整地views.py文件,具体代码关键注解部分请看文末给出的完整代码云盘链接。
关于views.py,我想在这里补充一下我投机取巧的地方,一是一些关键地方,比如模型文件、图片等的路径我直接给出了完整路径,并且代码修改的很粗糙。另外,利用form表单上传图片我在后台不知道如何取相应的图片,所以我采用的方法是:由于我知道图片会保存在upload文件夹里,每次将不同名字的图片保存后,我首先将图片改名成000001.jpg,这样就能被demo处理,处理完后生成test.png后清空upload文件夹里的图片,保存处理后的test.png显示在网页上。
四、其他需要补充讲解的部分
Django工程是可以在pycharm中打断点调试的!!!这大大方便了编程,我之前查了好久,然后被导师一查就查到了,不得不佩服啊!!!具体debug调试可参考blog:
(https://www.cnblogs.com/Rocky_/p/6187275.html)
在views.py打断点,用户在前端选择图片点ok后可以在pycharm中看到变量值。本文Django工程完整代码链接:https://pan.baidu.com/s/1sldYaWP 提取密码:y0os
结语:写blog一为总结、二为让后人少走弯路,国内Django方面的知识貌似传播的不太成熟,很少有系统的讲解。如果读者觉得有疏漏的地方,麻烦在博客园下留言。如果觉得有用,请祝福本人家人健康、学习进步、生活愉快、恋情美满!!!加油!!!
利用python web框架django实现py-faster-rcnn demo实例的更多相关文章
- Python Web框架——Django
返回顶部 使用框架简单快速开发特定的系统. pip freeze > requirements.txt pip install -r requirements.txt 一 MVC和MTV模式 二 ...
- python web框架 Django进阶
django 进阶 基础中,一些操作都是手动创建连接的非主流操作,这样显得太low,当然也是为了熟悉这个框架! 实际中,django自带连接数据库和创建app的机制,同时还有更完善的路由系统机制.既然 ...
- python web框架 Django基本操作
django 操作总结! django框架安装: cmd安装: pip3 install django pycharm安装: 在python变量下 搜索 django 安装 创建django项目: c ...
- python web框架Django入门
Django 简介 背景及介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以 ...
- python web框架 django wsgi 理论
django wsgi python有个自带的wsgi模块 可以写自定义web框架 用wsgi在内部创建socket对象就可以了 自己只写处理函数就可以了django只是web框架 他也不负责写soc ...
- python web框架 django 工程 创建 目录介绍
# 创建Django工程django-admin startproject [工程名称] 默认创建django 项目都会自带这些东西 django setting 配置文件 django可以配置缓存 ...
- python web框架Django——ORM
ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...
- python web框架 django 练习1 django 1.11版本
django练习 在我自己项目里创建一个xiaoliu的文件夹 里面创建s1.py 文件 s1.py文件 里面写各种函数 from django.shortcuts import HttpRespon ...
- python web框架 django工程的创建
安装 django pip3 install django pip install django 安装完后出现这两个文件 django-admin 用来创建文件夹 在script目录 执行这个命令 d ...
随机推荐
- bug:逆向思维的延伸
哈哈,我又来了. 前段时间自己出了一个bug,说起来也属于比较常见的类型 A业务需要做一个活动,需要B业务判断,如果是通过A业务跳转至B业务的用户,则在B页面给这类用户展示一个对应的弹窗.(A是新增业 ...
- RabbitMQ 默认端口号
4369 (epmd), 25672 (Erlang distribution) 5672, 5671 (AMQP 0-9-1 without and with TLS) 15672 (if mana ...
- Thinkphp5 常量设置问题
楼主是之前使用了thinkphp3.2快两年了,很早就听说过thinkphp的版本已经到达5了. 不过鉴于早期的版本尚未完善,并没有立即开始学习.最近做一个项目,尝试一下新的知识. 但是在使用的时候, ...
- 八皇后问题 dfs/递归
#include <bits/stdc++.h> using namespace std; const int maxn = 55; int ans=0; int vis_Q[maxn]; ...
- [译]移动API安全终极指南
文章主要讲了移动api调用的授权和验证问题,原文链接:The Ultimate Guide to Mobile API Security 移动API的使用是Stack Overflow和 Stormp ...
- 和为S的两个数
题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 思考 注 ...
- idea 新建的xml文件显示为文本问题
由于是新手 在用idea 中出现了 显示问题,一开始 都随它去 ,结果发现几次 都一样 由于 mybatis配置的config 我都命名为 mybatis-config.xml 网上搜索了下 没有搜到 ...
- 运维必须掌握的150个Linux命令
线上查询及帮助命令(1个)man 目录操作命令(6个)ls tree pwd mkdir rmdir cd 文件操作命令(7个)touch cp mv rm ln find rename 文件查看及处 ...
- 基于 Aspose.Cells与XML导入excel 数据----操作类封装
前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...
- Python中__new__和__init__区别
__new__:创建对象时调用,会返回当前对象的一个实例 __init__:创建完对象后调用,对当前对象的一些实例初始化,无返回值 1.在类中,如果__new__和__init__同时存在,会优先调用 ...