作者:快乐小天使2602926543 | 来源:互联网 | 2023-09-16 13:50
任务描述机器人需要在运行过程中拍摄图片并获得检测结果,机器人上的电脑处理太慢,所以想把图像处理的程序放在服务器上,机器人需要检测的时候,把拍摄的图像和处理需求发送到服务器,服务器
任务描述 机器人需要在运行过程中拍摄图片并获得检测结果,机器人上的电脑处理太慢,所以想把图像处理的程序放在服务器上,机器人需要检测的时候,把拍摄的图像和处理需求发送到服务器,服务器处理后,把检测的结果发送回机器人。
系统架构 一台服务器,一台独立电脑,两台电脑需要在同一个局域网下
代码 1、服务器 主文件 from flask import request, Flaskimport osimport cv2from traffic. TrafficNet import TrafficNet app = Flask( __name__) def trafficPredict ( img_path) : pred_ret = trafficNet. predict( img_path) return pred_ret@app. route( "/" , methods= [ 'POST' ] ) def get_frame ( ) : upload_file = request. files[ 'file' ] file_name = upload_file. filename file_path = os. path. join( '/home/wangdx/research/mir_robot/server/getImgs' , file_name) if upload_file: upload_file. save( file_path) result = trafficPredict( file_path) toClient = str ( { 'cls' : int ( result) } ) print ( "success" ) return toClientelse : return 'failed' if __name__ == "__main__" : trafficNet = TrafficNet( ) app. run( "0.0.0.0" , port= 1212 )
注意点 服务器端的IP可以设置为"0.0.0.0",这样客户端就可以通过服务器端的真实IP访问到;端口随便设置,没被其他程序占用就行。
2、客户端 主文件 import requestsimport osimport timeurl = "http://180.201.5.159:1212" files = os. listdir( './demo' ) file_dirs = [ os. path. join( './demo' , f) for f in files] start_time = time. time( ) for img in file_dirs: file = open ( img, 'rb' ) files = { 'file' : ( os. path. basename( img) , file , 'image/ppm' ) } r = requests. post( url, files= files) result = r. text print ( result) sum_t = time. time( ) - start_timeprint ( 'sum time: ' , sum_t)
注意 访问服务器时的IP不要写服务器设置的IP"0.0.0.0",要写服务器真正的IP,我的服务器的IP是180.201.5.159
完整的程序请参考我的github:
https://github.com/dexin-wang/flask_communication_py
客户端向服务器发送ppm格式的图像,服务器运行交通标志识别,再将识别结果发回客户端。demo里的图像都是类别0的。使用的数据集是BelgiumTSC,网址:
https://btsd.ethz.ch/shareddata/
关于Flask的其他基础使用,可以参考:
https://blog.csdn.net/stesha_chen/article/details/82768510