用python3搭建http通信

POST一张图片到服务端,服务端调用SSD_Detection.py对图片进行目标检测,返回检测结果(检测框数据)

sever端

 #! -*- coding:utf-8 -*-
 #!/usr/bin/python
from  http.server import BaseHTTPRequestHandler,HTTPServer
import cgi
import cv2
import numpy as np
from SSD_Detection import SSD_Detection #有一个SSD_Detection.py的文件里面放了关于图片目标检测的相关程序,这里不给出这个程序
import socket

detector = SSD_Detection(0.10)#构建检测模型对象
class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.wfile.write("这是一个http后台服务。".encode())

    def do_POST(self):
        '''
          获取POST的单张图片数据,利用目标检测程序,返回检测结果(json数据)
        '''
        form = cgi.FieldStorage(
            fp=self.rfile,
            headers=self.headers,
            environ={'REQUEST_METHOD':'POST',
                     'CONTENT_TYPE':self.headers['Content-Type'],
                     }
        )
        #print("键值:",form.keys())
        self.send_response(200)
        self.end_headers()
        imageData = form['file'].value#获取图片数据
        #imageData = form.getvalue('search')
        imageNp = np.asarray(bytearray(imageData), dtype="uint8")
        image = cv2.imdecode(imageNp, cv2.IMREAD_COLOR)
        image[:, :, [0, 1, 2]] = image[:, :, [2, 1, 0]]#BGR转RGB
        jsonData = detector.getJsonData(detector.detect_single_image(image))#获得检测结果框
        #csvData = detector.getCsvData(detector.detect_single_image(image))
        self.wfile.write(jsonData.encode())



def main():
    try:
       server=HTTPServer(('127.0.0.1',8080),MyHandler) #启动服务
       print ('welcome to  the  server.......')
       server.serve_forever()# 一直运行
    except KeyboardInterrupt:
        print ('shuting  done server')
        server.socket.close()
if  __name__=='__main__':
     main()

客户端:

#coding=utf-8
import requests
url = 'http://localhost:8080'
path = u'/media/a/DATA/test.jpg'
#path='./test.jpg'
print (path)
#files = {'file': ('1.jpg',open(path, 'rb'))}
files = {'file': open(path, 'rb')}

r = requests.post(url, files=files)
print ("检测框:",r.text)

猜你喜欢

转载自blog.csdn.net/u012160945/article/details/88071774