windows下用Apache部署mmdetection的cascade目标检测项目

本文详细介绍了在Windows 10环境下,如何使用Apache和mod_wsgi部署基于Flask的web应用,以及mmdetection目标检测算法的集成过程。涵盖了环境配置、Apache与mod_wsgi的安装步骤、WSGI配置细节、Flask-socketio的实时通信实现,以及遇到的常见问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:

windows10

Apache 2.4

Flask 1.1.1

Flask-SocketIO 4.2.1

mod-wsgi 4.7.1+ap24vc14

 

mmdetection相关环境:

python=3.6

cuda=10.0

cudnn=7.5.0

pytorch=1.2.0

torchversion=0.4.0

 

介绍:

整个程序是web端的,用的是flask的web框架,将检测到的结果展示到前端界面,后端算法用的是mmdetection的cascade r-cnn的目标检测算法,mmdetection的环境搭建可以参考我前序文章:mmdetection在windows10系统环境中搭建,因为是在windows系统部署,本来考虑用IIS,但是IIS对python的支持不好,后来还是考虑使用Apache来部署,但是Apache一直有一个问题,就是里面所有的相对路径都不能使用,只能使用绝对路径,不知道是配置的问题还是其他什么的,都需要特殊修改一下。

 

 

Apache安装:

下载地址:

http://httpd.apache.org/docs/current/platform/windows.html

点击ApacheHaus进入下载选择界面

 根据需求下载32位或者64位,需要和python wsgi环境一致,我这里都为64位程序

下载完成之后解压到目录

 

wsgi安装:

下载地址:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

选择对应版本,这里选的是mod_wsgi‑4.7.1+ap24vc14‑cp36‑cp36m‑win_amd64.whl

进入下载目录运行

pip install mod_wsgi-4.7.1+ap24vc14-cp36-cp36m-win_amd64.whl

注意:python Apache wsgi都得要是64位程序或者编译

下载好之后安装到python目录下,在安装成功后在python的安装目录的\scripts文件夹下运行

mod_wsgi-express module-config

 输出如下三行结果:

LoadFile "c:/programdata/anaconda3/envs/mmdetection/python36.dll"
LoadModule wsgi_module "c:/programdata/anaconda3/envs/mmdetection/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "c:/programdata/anaconda3/envs/mmdetection"

 这3行文字很重要,apache选择运行什么python环境就和这个有关

 

Apache配置:

配置httpd.conf文件:

文件在Apache24\conf目录下

打开文件

将上面3行文字复制到其中

将LoadModule access_compat_module modules/mod_access_compat.so前的#号去除

在最后复制:

Listen 6111
<VirtualHost *:6111>
    WSGIScriptAlias / D:\pythonprojects\mmdetection\wsgi.py
    <Directory 'D:\pythonprojects\mmdetection'>
        Require all granted
        Require host ip
		# WSGIProcessGroup mmdetection
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

Listen:监听6111端口

WSGIScriptAlias / D:\pythonprojects\mmdetection\wsgi.py:wsgi文件路径

Directory 'D:\pythonprojects\mmdetection':程序主目录

写法有很多种

 

在mmdetection主目录下添加wsgi.py文件:

import sys
sys.path.insert(0, "D:/pythonprojects/mmdetection")
from server import app
application = app

sys.path是当前mmdetection目录路径

from server import app

server是启动程序的py文件名,我的叫server.py

application名称固定

 

添加到Windows服务中:

httpd -k install -n Apache24

 这里服务名就是Apache24,需要以管理员身份运行

server.py文件

# encoding:utf-8
# !/usr/bin/env python
import base64
import os
import time
import numpy as np
import cv2
from io import BytesIO
from threading import Lock

from PIL import Image
from flask import Flask, render_template
from flask_socketio import SocketIO

from mmdet.apis import init_detector, inference_detector, show_result

async_mode = None
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
socketio = SocketIO(app, async_mode=async_mode)
thread = None
thread_lock = Lock()


config_file = r'D:\pythonprojects\mmdetection\configs\cascade_rcnn_r50_fpn_1x.py'
checkpoint_file = r'D:\pythonprojects\mmdetection\work_dirs\cascade_rcnn_r50_fpn_1x\epoch_200.pth'

# 初始化模型
model = init_detector(config_file, checkpoint_file)
# 先测试一张图片,防止第一次运行时太慢
rtest = inference_detector(model, r'D:\pythonprojects\mmdetection\result\20191230\20191230145713.jpg')


def background_thread():
    socketio.emit('server_response',{'name': '', 'base64': str(base64_data, 'utf-8'),'label': label, 'bgc': color, 'clear': 0, 'id': pic_count},namespace='/liqing')
   


@app.route('/')
def index():
    return render_template('index.html', async_mode=socketio.async_mode)


@socketio.on('connect', namespace='/test')
def test_connect():
    global thread
    with thread_lock:
        if thread is None:
            thread = socketio.start_background_task(target=background_thread)


if __name__ == '__main__':
    socketio.run(app)

这里使用的flask-socketio来将检测的结果通过json返回到前端界面 

相关问题:

Windows安装pytorch及from torch._C import *找不到模块问题

参考文章:

windows 下配置python WSGI

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值