docker 通过python方式调用YOLO镜像

2023-05-16

这篇blog记录下配置的yolov3的docker环境(cuda9+cudnn7+ubuntu16.04)

可以pull我的镜像 已经pull在docker.hub上了

docker pull cheney0813/yolo3-darknet-ubuntu16.04

主要实现的是动态检测系统的调用算法部分  通过python调用docker容器完成相应图片的检测并将对应图片的检测结果(json文件输出)

主要利用了docker容器与宿主机之间的共享目录。 话不多说上代码:

server.py  这个python文件的主要作用是接收网络服务器送来的图片名字,然后通过docker-py开启一个yolov3的docker容器,开启容器的时候调用test.py去执行yolov3的检测API。然后将返回的txt转成json文件。

import docker
import tarfile
import json
import sys
cli=docker.from_env()
volumes={'/home/aeroplane/test':{'bind':'/home/yolov3/darknet/test','mode':'rw'}}
container=cli.containers.run(
    image="aeroplane-yolov3",
    command="bash",
    detach=True,
    tty=True,
    volumes=volumes,
    runtime = 'nvidia'
)
#container=cli.containers.get()
filename = 'dog.jpg'
#filename = sys.argv[1]
result=container.exec_run(cmd="python /home/yolov3/darknet/test/test.py " +filename)
print(result[1])



container.remove(force=True)

txtname = filename.split('.')[0]+'.txt'
jsoname = filename.split('.')[0]+'.json'
list =[]
input_file = open(txtname,'r')
output_file = open(jsoname,'w')
for line in input_file.readlines():
    line =line.strip('\n')
    slist ={}
    slist['filename']= filename
    ss = line.split(' ')
    category = ss[0]
    sorce = ss[1]
    bbox = ss[2]
    slist[category.split(':')[0]]= category.split(':')[1]
    slist[sorce.split(':')[0]]= sorce.split(':')[1]
    slist[bbox.split(':')[0]]=bbox.split(':')[1]
    list.append(slist)
output_file.write(json.dumps(list, ensure_ascii=False))
input_file.close()
output_file.close()





test.py  

import os
import sys
filename = sys.argv[1]
name = filename.split('.')[0]
os.system('cd /home/yolov3/darknet && ./darknet detect  cfg/yolov3.cfg yolov3_final.weights ./test/'+filename +' >'+name+'.txt'+'  && cp ./'+name+'.txt' +' /home/yolov3/darknet/test')

这个python文件接收server.py传入的图片名称进行detect的调用,保存检测结果并且拷贝至共享目录下。首先说这里为什么没直接用yolo提供的valid命令。这个命令默认需要4张图片,而我们每次一个response只有一张图片,所以不合适,如果用了会报段错误。挑了好久这个恶心的bug。在这里我改了两处代码 

首先在examples/detector.c中注释掉了(598行)要不也会存入txt文件中。

然后参考https://www.cnblogs.com/leihui/p/9548910.html修改/src/image.c文件。

这样test.py生成的txt就对应如此:

转后的json如此:

下图为宿主机共享目录下:

这样就可以进行后续的跟进了。

运维需要勇气

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker 通过python方式调用YOLO镜像 的相关文章

  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • Docker COPY 命令可以链接起来吗

    是否可以将 COPY 命令链接在一起 就像使用 RUN 命令可以完成的操作一样 链接运行命令的示例 RUN echo root user 2017 chpasswd groupadd g 1000 user useradd u 1000 m
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐