最近遇到了一个很烧脑的问题,在机器视觉的检测模块部署到了服务器以后,python指令可以将指定文件夹中的图片进行识别并将检测结果保存到一个文件夹里,但是部署到了服务器以后我们不可能总是打开xftp7和xshell去将所需检测的照片放进去再python指令运行呀,如果能够打开一个代码运行,直接将本地想上传的图片进行一个参数包装传入,服务端收到请求再将检测后的结果反馈到本地岂不是方便太多了?

        于是我找了很多博客和网站的方法,最终总结了一个简单且高效的图片上传下达的办法----base64

        首先,写好server端代码结构:

import base64
from flask import Flask, request
import cv2
import numpy as np
import jsonapp = Flask(__name__)'''
路由器端口api,传输方式POST
GET用于从服务器端获取数据,包括静态资源(HTML|JS|CSS|Image等等)、动态数据展示(列表数据、详情数据等等)。
POST用于向服务器提交数据,比如增删改数据,提交一个表单新建一个用户、或修改一个用户等。
'''
@app.route('/api',methods=['POST'])def api():#来捕捉客户端传来的数据data = request.get_data().decode('utf-8')#json.loads将string转换为dictdata = json.loads(data)#获取dict中'img'标签的数据image_b64 = data["img"]#进行base64解码工作 base64->数组image_decode = base64.b64decode(image_b64)#fromstring实现了字符串到Ascii码的转换nparr = np.fromstring(image_decode, np.uint8)#从nparr中读取数据,并把数据转换(解码)成图像格式img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)cv2.imwrite('test.jpg',img_np)return  'OK'if __name__ == '__main__':app.run(debug=True)

        将server部署服务器后,在本地写好client代码段:

        其实就相当于是将本地的一张图片选择后,进行了base64的编码转换,这个时候以编码形式传递到服务端,服务端接收后对base64编码进行解码,然后在服务器端就会自行保存成一张图片,这样就完成了一张图片的上传。

import base64
import requests
import jsonurl = 'http://127.0.0.1:5000/api'f = open('1.png', 'rb')
#base64编码
base64_data = base64.b64encode(f.read())
f.close()
'''注意编码类型问题,byte->string '''
base64_data = base64_data.decode()
#传输的数据格式
data = {'img':base64_data}
#post传递数据
r = requests.post(url,data =json.dumps(data))
print(r.text)

         以为看到这里就完了吗?

        不不不,还有下达,既然上传好了,我们必然是要将检测的结果做一个下达的,那又如何下达呢?

        原理其实是一样的,比如这里服务端将图片的编码解码后转化成了test.jpg,那么同理,将上面的服务端代码包装成一个函数,也就是def main():之类的自定义函数,然后找到检测后的图片名比如test.jpg,利用编码工具,转码,放到base64_data里头,然后把这个base64_data给return给这个自定义main函数,以反馈给客户端:return base64_data

        if __name__=='__main__':

                main()

        创建运行就OK,解码函数如下:

import os, base64with open("1.txt", "r") as f:# str = "iVBORw0KGgoAAAANSUhEUgAAANwAAAAoCAIAAAAaOwPZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQuSURBVHhe7ZptmoMgDIR7rh6o5+lpvEwP01XUGshAokgX+8z+7PKRTF6SoN7e/KMCnSlw68wemkMF3oSSEHSnAKHsLiQ0iFCSge4UIJTdhYQGEUoy0J0ChLK7kNAgQkkGulOAUHYXEhpEKMlAdwpcG8rhcRv/HkN3stIgW4F88DYoX89nObjmANuOc0eMXpHHcyX9+mowhgHKmdlChM0BZzvzet6DSSW7xjEWk8Hu+/O1x7zF1237/Uu4t/O46V6sZuARoZb9KqbO7On4rJlykqcYYnNAjSbx3Gmrj6WTzxirVlA+90F82G+nm4fX3zOxgqyKqRaUU7b8FpRDOeyjJa7k5oByT1yWse4mxfDC3NrrprnQtQeUMuUXoURmCGHdKfl/oTS8MElxu2mudO0BXUCZL8efVGU0EmsQjkGpM2H8y/CwGtW1C3el8ywxhHKWxgOlaPNj0VcRRW+OoiKvCXF0o6YeXWLQDaNQyMf1Clhsi22D9HUNXOBCVZamaBmiO5BxRdRQOt3M3oFUAD4/HDolSChx7AvXzRIJQtgsUfMu6HB+HglNLc5d5KiwpcAqTH7Idk/lvLD9Z0rUx4vYWL2UJ4WY6XbdL91ML57+EjsRNEMnw/LCrKklN9NNkbuLvKsdabjM/ZMByh+PDWuuw6kDEYXPzeSfzGARlNG1M1ENRCfGLlUuJ5MVTg+UyxGzC+1+KN/DkDyuTSVbqo7vNnagfKPTrH9b8pQtgQ/PRCifDTaUJaIWw8adUycklLrcppkyCZfkJ5cYlSZnQTkmsYf58OYAlMpg6JnlhYlC9uxhIdWvbr1NS8Ahc9pgQlkkai3fOorVUK4JGeYTJIgVTm+mnCqrmSfOgDJ0mOlOlhcmClk3M0KmPzeF0mnDGVB6LjqbmKB8p5GRQ34DStRCdpEpp5MRNWRNocwsjk9i7nyqugzPYTWUSZuqe0qVucAT5tgH9ITmxEdCdihjpcCVAgfI8uJ4pgx3K3UhgBeRQ9dtbJmjp1TnYmsKoSH1UGqKE23mxlrsri4yKsuAFnZ5BrAugypw0/IdSvHmxHJbEI6lREzj0asuOc7TR8BONdd9pNKCo4LRNY9CdgCEXjqObDhQvsFpy7z7DsqHP9khxp9DzNeKbSR+Iy3/n31tqVFYe17xFUZkTu507+4px4USFwBRm32lbzFyXphgRMtn3cwqqaef8a0UrMHlaJYM8RC1Iq2DeOXvKUdVjALmzromST8+4N+Egm9rrwzl/DpAVlddnE9su36Jyx6ECtkUxufaUMJOzfwQsxldUbnTLyO/ckCcNsS112yDmkkGF/4xKL8rHndrowChbKMrV61QgFBWiMepbRQglG105aoVChDKCvE4tY0ChLKNrly1QgFCWSEep7ZRgFC20ZWrVihAKCvE49Q2ChDKNrpy1QoF/gDXIhmWmc+CSAAAAABJRU5ErkJggg=="imgdata = base64.b64decode(f.read())file = open('1.jpg', 'wb')file.write(imgdata)file.close()

        这里的1.txt可以作为base64编码的保存,将这个编码传入也可以,1.txt里的内容我放到下面,大家可以创建1.txt 然后把编码复制进去保存 :

iVBORw0KGgoAAAANSUhEUgAAANwAAAAoCAIAAAAaOwPZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQuSURBVHhe7ZptmoMgDIR7rh6o5+lpvEwP01XUGshAokgX+8z+7PKRTF6SoN7e/KMCnSlw68wemkMF3oSSEHSnAKHsLiQ0iFCSge4UIJTdhYQGEUoy0J0ChLK7kNAgQkkGulOAUHYXEhpEKMlAdwpcG8rhcRv/HkN3stIgW4F88DYoX89nObjmANuOc0eMXpHHcyX9+mowhgHKmdlChM0BZzvzet6DSSW7xjEWk8Hu+/O1x7zF1237/Uu4t/O46V6sZuARoZb9KqbO7On4rJlykqcYYnNAjSbx3Gmrj6WTzxirVlA+90F82G+nm4fX3zOxgqyKqRaUU7b8FpRDOeyjJa7k5oByT1yWse4mxfDC3NrrprnQtQeUMuUXoURmCGHdKfl/oTS8MElxu2mudO0BXUCZL8efVGU0EmsQjkGpM2H8y/CwGtW1C3el8ywxhHKWxgOlaPNj0VcRRW+OoiKvCXF0o6YeXWLQDaNQyMf1Clhsi22D9HUNXOBCVZamaBmiO5BxRdRQOt3M3oFUAD4/HDolSChx7AvXzRIJQtgsUfMu6HB+HglNLc5d5KiwpcAqTH7Idk/lvLD9Z0rUx4vYWL2UJ4WY6XbdL91ML57+EjsRNEMnw/LCrKklN9NNkbuLvKsdabjM/ZMByh+PDWuuw6kDEYXPzeSfzGARlNG1M1ENRCfGLlUuJ5MVTg+UyxGzC+1+KN/DkDyuTSVbqo7vNnagfKPTrH9b8pQtgQ/PRCifDTaUJaIWw8adUycklLrcppkyCZfkJ5cYlSZnQTkmsYf58OYAlMpg6JnlhYlC9uxhIdWvbr1NS8Ahc9pgQlkkai3fOorVUK4JGeYTJIgVTm+mnCqrmSfOgDJ0mOlOlhcmClk3M0KmPzeF0mnDGVB6LjqbmKB8p5GRQ34DStRCdpEpp5MRNWRNocwsjk9i7nyqugzPYTWUSZuqe0qVucAT5tgH9ITmxEdCdihjpcCVAgfI8uJ4pgx3K3UhgBeRQ9dtbJmjp1TnYmsKoSH1UGqKE23mxlrsri4yKsuAFnZ5BrAugypw0/IdSvHmxHJbEI6lREzj0asuOc7TR8BONdd9pNKCo4LRNY9CdgCEXjqObDhQvsFpy7z7DsqHP9khxp9DzNeKbSR+Iy3/n31tqVFYe17xFUZkTu507+4px4USFwBRm32lbzFyXphgRMtn3cwqqaef8a0UrMHlaJYM8RC1Iq2DeOXvKUdVjALmzromST8+4N+Egm9rrwzl/DpAVlddnE9su36Jyx6ECtkUxufaUMJOzfwQsxldUbnTLyO/ckCcNsS112yDmkkGF/4xKL8rHndrowChbKMrV61QgFBWiMepbRQglG105aoVChDKCvE4tY0ChLKNrly1QgFCWSEep7ZRgFC20ZWrVihAKCvE49Q2ChDKNrpy1QoF/gDXIhmWmc+CSAAAAABJRU5ErkJggg==

        我的博客个人下载资源里有很全面base64源码,大家可以下载下来慢慢研究 学习

        好了,今天的分享就到这里了,本来想写很现成的东西的,但是作为算法设计者如果完全没有自己的思想套用现成的想必也没什么太大的意义,系统的思路提供结合自己真实的想法去设计,才是稳步前进的正轨。

        Bye~

 

还在为本地到服务器图片的上传下达而烦恼吗?使用base64及flask框架实现服务端部署服务器! 本地客户端图片的上传下达!相关推荐

  1. 诛仙在服务器启动虚拟机镜像添加代码,诛仙3风吟虚拟机镜像一键服务端+青萝+配套客户端+GM工具+EL编辑器+启动说明...

    诛仙3风吟虚拟机镜像一键服务端+青萝+配套客户端+GM工具+EL编辑器+启动说明等 资源介绍: 1.修复部分bug. 2.添加官方12月圣诞2018时装.坐骑.(已收录官方最新所有时装) 3.UI 升 ...

  2. 热血江湖服务端架设服务器搭建一条龙

    热血江湖服务端架设服务器搭建一条龙 服务端:服务端就是我们所说的版本,从最开始的1.1版本,只有刀.枪.剑.医四个职业.1.7版本出了新的合成系统--属性石,2.0版本新出地图--北海冰宫,到3.0版 ...

  3. Android和服务端通过Socket收发文字图片的实现

    今天总结一下Android客户端和服务端通过Socket收发文字和图片的实现方式: 关于网络通信的基础知识这边就不赘述了,网上多的是,今天主要写一下实现的部分: 简单的描述Sokcket的通信主要有一 ...

  4. 奇迹MU开服服务端租用服务器架设搭建

    奇迹MU开服服务端租用服务器架设搭建 作为奇迹MU资深玩家,你是否有想过自己开服当服主? 相信能看到此篇文章的你心里是有想法的.首先你需要知道开奇迹需要准备哪些软件? 我是艾西今天带您了解下奇迹mu开 ...

  5. ​​​​奇迹mu开服务端架设服务器

    奇迹mu开服务端架设服务器 SQL数据库安装好 奇迹MU服务端+服务器 配置说明: 采用导入.mdb数据库的方式,但你也可以用还原sqk数据库的方法不懂可以找我 字符替换器 用来替换文件里的IP 方便 ...

  6. 弹弹堂服务器如何修改,弹弹堂端游服务端+手工弹弹堂游戏客户端+GM管理后台+附安裝构建实例教程...

    弹弹堂端游服务端+手工弹弹堂游戏客户端+GM管理后台+附安裝构建实例教程 系统centos 7.2 64位 安装宝塔 yum install -y wget && wget -O in ...

  7. 原神3.2服务端架设服务器搭建教程ubuntu系统(保姆级)

    原神3.2服务端架设服务器搭建教程ubuntu系统(保姆级) 大家好,我是艾西今天跟大家分享下原神3.2服务端架设ubuntu系统实操教程 准备阶段:服务器一台 32h32g起.服务端.客户端.服务器 ...

  8. 魔兽巫妖王服务端架设服务器搭建教程

    魔兽巫妖王服务端架设服务器搭建教程新手必看 我是艾西,今天给想自己当服主的小伙伴简单说说开魔兽需要东西,还有一些操作步骤等 自己不懂技术可以开吗?当然可以,开服技术这是每个开服的小伙伴都要掌握的技术, ...

  9. 我的世界服务器java出错_看懂 游戏《Minecraft》的崩溃报告 服务端/客户端

    前言 [WARNING] 本篇适用于Minecraft服务端/客户端报错的诊断分析,其他游戏除外,比如网易 [WARNING] 本篇适用于Minecraft服务端/客户端报错的诊断分析,其他游戏除外, ...

最新文章

  1. 斯坦福神经网络神经元对特征提取的影响JS演示
  2. myeclipse + tomcat 项目自动部署
  3. 在Kubernetes上运行区块链服务(BaaS)
  4. android 8.0 edittext,关注TextInputEditText的Android 8.0 Oreo崩溃
  5. java中的Vector的用法
  6. 初级第二课——统计总分
  7. 加载项目的时候提示:需要缺少的web组件才能进行加载
  8. 计算机商务应用课要带电脑吗,笔记本电脑上网课需要用麦吗
  9. 停车场寻车难?蓝牙5.1提供的新思路
  10. Win10提示无法更新正在撤销安装怎么解决
  11. php简单抽奖,php 简单随机抽奖函数的简单示例
  12. Rstudio如何安装、加载工具包
  13. 德鲁克日志读后感之八十八
  14. idea设置控制台为单独的窗口
  15. C语言判断一个五位数是不是回文数
  16. 精华帖——八人过河的程序实现
  17. 无监督算法——自组织映射算法(Self-Organizing Map , SOM)
  18. Java学习之旅(一):探索extends
  19. 共建网络安全 共享网络文明 2015福建网络安全宣传日成功举办
  20. AI day09(2020 8/8)

热门文章

  1. 什么是“ Windows Shell体验主机”,为什么在我的PC上运行?
  2. 如何实现上传图片并显示图片?
  3. 为表中的某个字段添加check约束
  4. Android制作的一个通讯录
  5. ASP.NET - 查询邮件及邮件内容
  6. SpringBoot邮件服务spring-boot-starter-mail
  7. 【单片机毕业设计】【mcuclub-312】数字时钟 | 万年历电子时钟 | 多功能时钟 | 智能闹钟 | 语音电子时钟
  8. 10、Kafka 消息订阅系统
  9. 新手如何实现自媒体盈利,我把自媒体变现的套路都总结出来
  10. 超越 FPN 和 NAS-FPN!商汤港中文提出 FPG,特征金字塔网格强势登场!