首页 > 编程语言 >基于DJango和Pybind11,实现网络后端调用OpenCV算法

基于DJango和Pybind11,实现网络后端调用OpenCV算法

时间:2022-12-26 15:00:35浏览次数:44  
标签:manage py django OpenCV 调用 Pybind11 import DJango

本Blog来源于实际项目,所采用框架组合中,OpenCV实现算法主体、pybind11完成OpenCV的Python封装、django提供Web应用服务,三者协同配合,共同实现“网络后端调用OpenCV算法,解决特定问题”的目标。



由于pybind11在windows和在linux下的部署安装,都已经分别专门撰文,​​基于pybind11实现Python调用c++编写的CV算法--上(Windows+VS)​​ ​​基于pybind11实现Python调用c++编写的CV算法--下 (Linux+Cmake)​​



 



本文以django的配置和整体集成为重心。最终调用的OpenCV算法,也以GOWarper来表示。



 



一、Django的下载和测试



1、在管理员权限下,直接可以使用pip进行安装。

    pip3 install django

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App​​

如果网络正常,那么可以通过

    pip3 show django

查看django版本和django安装路径:

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_02​​  

2、创建一个django project

在空文件夹下,使用以下命令创建django project

    django-admin.py startproject mysites

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_03​​

我们可以使用vscode来查看,其中较为关键的几项:

基于DJango和Pybind11,实现网络后端调用OpenCV算法_OpenCV_04

manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。



settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。



urls.py ----- 负责把URL模式映射到应用程序。   

需要注意的是,这里的几个py都是行使管理权限的。

3、在mysites目录下创建应用(app)

    python3 manage.py startapp goApp

基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_05

这新建一个goApp的实际项目,这个实际的项目是可以被启动的。

4、启动django项目

    python3 manage.py runserver 8080

    这样,我们的django就启动起来了。当我们访问http://127.0.0.1:8080/时,可以看到

    ​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_06​​ 

  ​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_07

如果以上工作全部能够成功,那么证明Djangon的下载安装是成功的,下面我们来具体理解其相关内容。

 

二、文件结构和各种作用

manage.py文件位于整个项目的最外层,是该项目的项目管理器,通过不指定命令运行,可以发现它具备以下功能。

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_08​​

比如,我们在上面使用过的:



创建应用:python3 manage.py startapp goApp
启动项目:python3 manage.py runserver 8080



wsgi.py:全称 webserver getway interface,即Web服务器的网关接口

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_09​​

urls.py:即路由配置

django下所有的页面都需要urls文件中配置一下,否则在访问的时候会找不到该文件。

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_10​​

 

settings.py:

配置文件,各种路径、国际化、debug、模版等均在此文件中配置。

 

 

三、简单示例

 

我了进一步加速对相关知识的理解,我们创建一个最为简单的程序,它能够实现的就是读取并显示当前系统OpenCV版本。我们需要改写以下文件:

url控制器 url.py



from django.contrib 
import admin

from django.urls
import path

from goApp import views


urlpatterns
= [

path(
'admin/', admin.
site.urls),


path('index/',views.index),

]



视图 view.py



from django.shortcuts import render
from django.http import HttpResponse
import cv2

def index(request):
    return HttpResponse(cv2.__version__ )



 



以上代码中,标红的部分代表是新添加的,代码修改后,djangon会自动更新。运行结果如下:



​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_11​​



需要注意到,goApp是我们新创建的app的名称,这里相当于在主目录中,引用我们的新编模块。



如果能够运行到这一步,那么证明OpenCV相关的引入工作已经没有问题。



 

四、融合GOWarper

 

在pybind11中,我们已经比较清楚地说明了如何使用python调用opencv算法。在我实际配置过程中,主要是遇到了路径配置问题。之前是将GOWarper*.so和*.py放在同一个目录下面,这对于测试或者单机来说可行;但是对于服务器来说往往不可行。解决方法是在引入中强制指定后头文件中引入GOPyWarper地址:比如以下目录:

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_OpenCV_12​​

 

 



from django.shortcuts import render
from django.http import HttpResponse
import sys;
sys.path.append("/home/helu/sandbox/GOPyWarper0430/demo/bin")
import cv2
import GOPyWarper

def index(request):
    src = cv2.imread('/home/helu/sandbox/GOPyWarper0430/demo/pip.jpg',1) 
    rows,cols,ch=src.shape
    varCircles = GOPyWarper.GO_FindPips(src) 
    return HttpResponse(varCircles)



 

 



​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_13​​



其中



sys.path.append( "/home/helu/sandbox/GOPyWarper0430/demo/bin")



​就是制定GOPyWarper0430的具体位置。​

五、后端调用优缺点分析

       优势是极大程度地扩展了OpenCV的使用范围,在以前图像算法大多是运行在PC机上面,通过这种方式,能够非常方便地在手机等消费类电器上进行部署,但是也需要进一步就时延和并发进行相关研究;后端调用能够比较方便地集成复杂和自研算法,对于实际项目来说很有帮助。

        这种方法的缺点是可想而知的性能问题,因为OpenCV通过Python调用,再通过Django变成网络服务,这里面很多环节都是瓶颈,那么在实际项目过程中都需要在各个节点关口去做性能优化。

感谢阅读至此,希望有所帮助。

 



 


本Blog来源于实际项目,所采用框架组合中,OpenCV实现算法主体、pybind11完成OpenCV的Python封装、django提供Web应用服务,三者协同配合,共同实现“网络后端调用OpenCV算法,解决特定问题”的目标。



由于pybind11在windows和在linux下的部署安装,都已经分别专门撰文,​​基于pybind11实现Python调用c++编写的CV算法--上(Windows+VS)​​ ​​基于pybind11实现Python调用c++编写的CV算法--下 (Linux+Cmake)​​



 



本文以django的配置和整体集成为重心。最终调用的OpenCV算法,也以GOWarper来表示。



 



一、Django的下载和测试



1、在管理员权限下,直接可以使用pip进行安装。

    pip3 install django

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App​​

如果网络正常,那么可以通过

    pip3 show django

查看django版本和django安装路径:

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_02​​  

2、创建一个django project

在空文件夹下,使用以下命令创建django project

    django-admin.py startproject mysites

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_03​​

我们可以使用vscode来查看,其中较为关键的几项:

基于DJango和Pybind11,实现网络后端调用OpenCV算法_OpenCV_04

manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。



settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。



urls.py ----- 负责把URL模式映射到应用程序。   

需要注意的是,这里的几个py都是行使管理权限的。

3、在mysites目录下创建应用(app)

    python3 manage.py startapp goApp

基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_05

这新建一个goApp的实际项目,这个实际的项目是可以被启动的。

4、启动django项目

    python3 manage.py runserver 8080

    这样,我们的django就启动起来了。当我们访问http://127.0.0.1:8080/时,可以看到

    ​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_06​​    ​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_07​​

如果以上工作全部能够成功,那么证明Djangon的下载安装是成功的,下面我们来具体理解其相关内容。

 

二、文件结构和各种作用

manage.py文件位于整个项目的最外层,是该项目的项目管理器,通过不指定命令运行,可以发现它具备以下功能。

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_08​​

比如,我们在上面使用过的:



创建应用:python3 manage.py startapp goApp
启动项目:python3 manage.py runserver 8080



wsgi.py:全称 webserver getway interface,即Web服务器的网关接口

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_09​​

urls.py:即路由配置

django下所有的页面都需要urls文件中配置一下,否则在访问的时候会找不到该文件。

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_10​​

 

settings.py:

配置文件,各种路径、国际化、debug、模版等均在此文件中配置。

 

 

三、简单示例

 

我了进一步加速对相关知识的理解,我们创建一个最为简单的程序,它能够实现的就是读取并显示当前系统OpenCV版本。我们需要改写以下文件:

url控制器 url.py



from django.contrib import admin
from django.urls import path
from goApp import views

urlpatterns = [
    path( 'admin/', admin. site.urls),
    path('index/',views.index),
]



视图 view.py



from django.shortcuts import render
from django.http import HttpResponse
import cv2

def index(request):
    return HttpResponse(cv2.__version__ )



 



以上代码中,标红的部分代表是新添加的,代码修改后,djangon会自动更新。运行结果如下:



​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_11​​



需要注意到,goApp是我们新创建的app的名称,这里相当于在主目录中,引用我们的新编模块。



如果能够运行到这一步,那么证明OpenCV相关的引入工作已经没有问题。



 

四、融合GOWarper

 

在pybind11中,我们已经比较清楚地说明了如何使用python调用opencv算法。在我实际配置过程中,主要是遇到了路径配置问题。之前是将GOWarper*.so和*.py放在同一个目录下面,这对于测试或者单机来说可行;但是对于服务器来说往往不可行。解决方法是在引入中强制指定后头文件中引入GOPyWarper地址:比如以下目录:

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_OpenCV_12​​

 

 



from django.shortcuts import render
from django.http import HttpResponse
import sys;
sys.path.append("/home/helu/sandbox/GOPyWarper0430/demo/bin")
import cv2
import GOPyWarper

def index(request):
    src = cv2.imread('/home/helu/sandbox/GOPyWarper0430/demo/pip.jpg',1) 
    rows,cols,ch=src.shape
    varCircles = GOPyWarper.GO_FindPips(src) 
    return HttpResponse(varCircles)



 

 



​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_13​​



其中



sys.path.append( "/home/helu/sandbox/GOPyWarper0430/demo/bin")



​就是制定GOPyWarper0430的具体位置。​

五、后端调用优缺点分析

       优势是极大程度地扩展了OpenCV的使用范围,在以前图像算法大多是运行在PC机上面,通过这种方式,能够非常方便地在手机等消费类电器上进行部署,但是也需要进一步就时延和并发进行相关研究;后端调用能够比较方便地集成复杂和自研算法,对于实际项目来说很有帮助。

        这种方法的缺点是可想而知的性能问题,因为OpenCV通过Python调用,再通过Django变成网络服务,这里面很多环节都是瓶颈,那么在实际项目过程中都需要在各个节点关口去做性能优化。

感谢阅读至此,希望有所帮助。

 



 

1、在管理员权限下,直接可以使用pip进行安装。

    pip3 install django

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App​​

如果网络正常,那么可以通过

    pip3 show django

查看django版本和django安装路径:

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_02​​  

2、创建一个django project

在空文件夹下,使用以下命令创建django project

    django-admin.py startproject mysites

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_03​​

我们可以使用vscode来查看,其中较为关键的几项:

基于DJango和Pybind11,实现网络后端调用OpenCV算法_OpenCV_04

manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。



settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。



urls.py ----- 负责把URL模式映射到应用程序。   

需要注意的是,这里的几个py都是行使管理权限的。

3、在mysites目录下创建应用(app)

    python3 manage.py startapp goApp

基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_05

这新建一个goApp的实际项目,这个实际的项目是可以被启动的。

4、启动django项目

    python3 manage.py runserver 8080

    这样,我们的django就启动起来了。当我们访问http://127.0.0.1:8080/时,可以看到

    ​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_06​​    ​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_07​​

如果以上工作全部能够成功,那么证明Djangon的下载安装是成功的,下面我们来具体理解其相关内容。

 

二、文件结构和各种作用

manage.py文件位于整个项目的最外层,是该项目的项目管理器,通过不指定命令运行,可以发现它具备以下功能。

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_08​​

比如,我们在上面使用过的:



创建应用:python3 manage.py startapp goApp
启动项目:python3 manage.py runserver 8080



wsgi.py:全称 webserver getway interface,即Web服务器的网关接口

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_09​​

urls.py:即路由配置

django下所有的页面都需要urls文件中配置一下,否则在访问的时候会找不到该文件。

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_django_10​​

 

settings.py:

配置文件,各种路径、国际化、debug、模版等均在此文件中配置。

 

 

三、简单示例

 

我了进一步加速对相关知识的理解,我们创建一个最为简单的程序,它能够实现的就是读取并显示当前系统OpenCV版本。我们需要改写以下文件:

url控制器 url.py



from django.contrib import admin
from django.urls import path
from goApp import views

urlpatterns = [
    path( 'admin/', admin. site.urls),
    path('index/',views.index),
]



视图 view.py



from django.shortcuts import render
from django.http import HttpResponse
import cv2

def index(request):
    return HttpResponse(cv2.__version__ )



 



以上代码中,标红的部分代表是新添加的,代码修改后,djangon会自动更新。运行结果如下:



​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_11​​



需要注意到,goApp是我们新创建的app的名称,这里相当于在主目录中,引用我们的新编模块。



如果能够运行到这一步,那么证明OpenCV相关的引入工作已经没有问题。



 

四、融合GOWarper

 

在pybind11中,我们已经比较清楚地说明了如何使用python调用opencv算法。在我实际配置过程中,主要是遇到了路径配置问题。之前是将GOWarper*.so和*.py放在同一个目录下面,这对于测试或者单机来说可行;但是对于服务器来说往往不可行。解决方法是在引入中强制指定后头文件中引入GOPyWarper地址:比如以下目录:

​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_OpenCV_12​​

 

 



from django.shortcuts import render
from django.http import HttpResponse
import sys;
sys.path.append("/home/helu/sandbox/GOPyWarper0430/demo/bin")
import cv2
import GOPyWarper

def index(request):
    src = cv2.imread('/home/helu/sandbox/GOPyWarper0430/demo/pip.jpg',1) 
    rows,cols,ch=src.shape
    varCircles = GOPyWarper.GO_FindPips(src) 
    return HttpResponse(varCircles)



 

 



​​基于DJango和Pybind11,实现网络后端调用OpenCV算法_App_13​​



其中



sys.path.append( "/home/helu/sandbox/GOPyWarper0430/demo/bin")



​就是制定GOPyWarper0430的具体位置。​

五、后端调用优缺点分析

       优势是极大程度地扩展了OpenCV的使用范围,在以前图像算法大多是运行在PC机上面,通过这种方式,能够非常方便地在手机等消费类电器上进行部署,但是也需要进一步就时延和并发进行相关研究;后端调用能够比较方便地集成复杂和自研算法,对于实际项目来说很有帮助。

        这种方法的缺点是可想而知的性能问题,因为OpenCV通过Python调用,再通过Django变成网络服务,这里面很多环节都是瓶颈,那么在实际项目过程中都需要在各个节点关口去做性能优化。

感谢阅读至此,希望有所帮助。

 

标签:manage,py,django,OpenCV,调用,Pybind11,import,DJango
From: https://blog.51cto.com/jsxyhelu2017/5969000

相关文章

  • Django:auth认证模块
    目录一、django的auth认证模块1.什么是auth模块2.生成auth物理表二、创建django-admin账户1.创建超级管理员2.注册超级管理员账户3.登录admin账户三、auth模块中的方法1.导......
  • django中间件
    django中间件django默认有七个中间件并且还支持用户自定义中间件中间件主要可以用于:网站访问频率的校验用户权限的校验等全局类型的功能需求MIDDLEWARE=['......
  • 用 Python 和 OpenCV 检测图片上的条形码()
    原文地址:http://python.jobbole.com/80448/假设我们要检测下图中的条形码:图1:包含条形码的示例图片现在让我们开始写点代码,新建一个文件,命名为detect_barcode.py,打开并编码:Py......
  • OpenCV中Denoising相关函数的简单介绍
    参考:http://wenhuix.github.io/research/denoise.html一、基本情况      (一)基本方法     Fast Non-Local MeansDenoising(FNLMD),论文为  ......
  • 《学习OpenCV3》第7章第4题-SVD奇异值分解的验算
    原文题目:中文翻译: 解题过程d.使用OpenCV编写代码/************************************************************************......
  • Django之forms组件内容,Django中间件
    目录Django之forms组件内容,Django中间件今日内容概要今日内容详细forms组件渲染标签forms组件展示信息forms组件校验补充forms组件参数补充forms组件源码剖析modelform组件......
  • pybind11
    概述https://zhuanlan.zhihu.com/p/444805518背景:目前AI算法开发特别是训练基本都以Python为主,主流的AI计算框架如TensorFlow、PyTorch等都提供了丰富的Pytho......
  • django forms组件,model from组件
    djangoforms组件,modelfrom组件内容概要forms组件简单使用form组件渲染标签forms组件校验补充forms组件参数补充forms组件源码剖析modelfrom组件forms组件小需求......
  • django,多对多,序列化组件,ORM批量操作数据,自定义分页器
    django,多对多,序列化组件,ORM批量操作数据,自定义分页器多对多三种创建方式1.全自动classBook(models.Model):title=models.CharField(max_length=32)authors......
  • Django之SQL注入漏洞复现(CVE-2021-35042)
    前言SQL注入的原理是对web请求,表单或域名等提交查询的字符串没有进行安全检测过滤,攻击者可以拼接执行恶意SQL命令,导致用户数据泄露漏洞原理Django组件存在SQL注入漏......