日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【flask整合深度学习】ubuntu系统下显示深度学习视觉检测结果图片并可在web端访问,配置允许手机浏览器打开

發布時間:2024/9/30 windows 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【flask整合深度学习】ubuntu系统下显示深度学习视觉检测结果图片并可在web端访问,配置允许手机浏览器打开 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 介紹
  • flask文件
  • 前端代碼
  • 輸入命令

介紹

之前有一篇flask和mongodb交互的記錄文:
https://blog.csdn.net/qq_41358574/article/details/117845077

首先需要先下載的工具:pycharm,pytorch一堆的相關包,flask相關包
本電腦沒有cuda,故模型傳入時輸入:

device = torch.device('cpu')# Set up modellamodel = Darknet(opt.model_def, img_size=opt.img_size).to(device)if opt.weights_path.endswith(".weights"):# Load darknet weightsmodel.load_darknet_weights(opt.weights_path)else:# Load checkpoint weightsmodel.load_state_dict(torch.load(opt.weights_path,map_location=device))

項目在深度學習的pytorch框架下載入模型對圖片進行檢測,然后結果保存在文件夾中,用flask渲染前段頁面動畫顯示結果,且可以手機瀏覽器輸入ip+端口號訪問頁面
效果:


(字體是動畫的,圖片看不出來)

flask文件

目錄:
utils 和model.py是和深度學習有關的文件代碼。
detect.py相當于main.py,深度學習的目標檢測也寫在里面了,所以代碼挺多

from __future__ import divisionfrom models import * from utils.utils import * from utils.datasets import * from utils.augmentations import * from utils.transforms import *import os import sys import time import datetime import argparsefrom PIL import Imageimport torch import torchvision.transforms as transforms from torch.utils.data import DataLoader from torchvision import datasets from torch.autograd import Variableimport matplotlib.pyplot as plt import matplotlib.patches as patches from matplotlib.ticker import NullLocator from flask import Flask,request,make_response,render_template import socket from time import sleep myhost = socket.gethostbyname(socket.gethostname()) app = Flask(__name__) igpath = '/home/heziyi/pic/' @app.route('/', methods=['GET', 'POST']) # 使用methods參數處理不同HTTP方法 def home():return render_template('index.html')#@app.route('/img/<string:filename>',methods=['GET']) @app.route('/img/',methods=['GET']) def display():if request.method == 'GET':# if filename is None:# pass# else:image = open("/static/he_21.png", "rb").read()# image = open(igpath+filename,"rb").read()response = make_response(image)response.headers['Content-Type'] = 'image/jpg'return response if __name__ == "__main__":parser = argparse.ArgumentParser()parser.add_argument("--image_folder", type=str, default="data/custom/dd", help="path to dataset")parser.add_argument("--model_def", type=str, default="config/yolov3-custom.cfg", help="path to model definition file")parser.add_argument("--weights_path", type=str, default="checkpoints/ckpt_88.pth", help="path to weights file")parser.add_argument("--class_path", type=str, default="data/custom/classes.names", help="path to class label file")parser.add_argument("--conf_thres", type=float, default=0.8, help="object confidence threshold")parser.add_argument("--nms_thres", type=float, default=0.4, help="iou thresshold for non-maximum suppression")parser.add_argument("--batch_size", type=int, default=1, help="size of the batches")parser.add_argument("--n_cpu", type=int, default=0, help="number of cpu threads to use during batch generation")parser.add_argument("--img_size", type=int, default=416, help="size of each image dimension")parser.add_argument("--checkpoint_model", type=str,default="checkpoints/ckpt_88.pth",help="path to checkpoint model")opt = parser.parse_args()print(opt)#device = torch.device("cuda" if torch.cuda.is_available() else "cpu")device = torch.device('cpu')os.makedirs("../output", exist_ok=True)# Set up modellamodel = Darknet(opt.model_def, img_size=opt.img_size).to(device)if opt.weights_path.endswith(".weights"):# Load darknet weightsmodel.load_darknet_weights(opt.weights_path)else:# Load checkpoint weightsmodel.load_state_dict(torch.load(opt.weights_path,map_location=device))#cpu!!!!!!model.eval() # Set in evaluation modedataloader = DataLoader(ImageFolder(opt.image_folder, transform= \transforms.Compose([DEFAULT_TRANSFORMS, Resize(opt.img_size)])),batch_size=opt.batch_size,shuffle=False,num_workers=opt.n_cpu,)classes = load_classes(opt.class_path) # Extracts class labels from fileTensor = torch.cuda.FloatTensor if torch.cuda.is_available() else torch.FloatTensorimgs = [] # Stores image pathsimg_detections = [] # Stores detections for each image indexprint("\nPerforming object detection:")prev_time = time.time()for batch_i, (img_paths, input_imgs) in enumerate(dataloader):# Configure inputinput_imgs = Variable(input_imgs.type(Tensor))# Get detectionswith torch.no_grad():detections = model(input_imgs)detections = non_max_suppression(detections, opt.conf_thres, opt.nms_thres)# Log progresscurrent_time = time.time()inference_time = datetime.timedelta(seconds=current_time - prev_time)prev_time = current_timeprint("\t+ Batch %d, Inference Time: %s" % (batch_i, inference_time))# Save image and detectionsimgs.extend(img_paths)img_detections.extend(detections)# Bounding-box colorscmap = plt.get_cmap("tab20b")colors = [cmap(i) for i in np.linspace(0, 1, 20)]print("\nSaving images:")# Iterate through images and save plot of detectionsfor img_i, (path, detections) in enumerate(zip(imgs, img_detections)):print("(%d) Image: '%s'" % (img_i, path))# Create plotimg = np.array(Image.open(path))plt.figure()fig, ax = plt.subplots(1)ax.imshow(img)# Draw bounding boxes and labels of detectionsif detections is not None:# Rescale boxes to original imagedetections = rescale_boxes(detections, opt.img_size, img.shape[:2])unique_labels = detections[:, -1].cpu().unique()n_cls_preds = len(unique_labels)bbox_colors = random.sample(colors, n_cls_preds)for x1, y1, x2, y2, conf, cls_conf, cls_pred in detections:print("\t+ Label: %s, Conf: %.5f" % (classes[int(cls_pred)], cls_conf.item()))box_w = x2 - x1box_h = y2 - y1color = bbox_colors[int(np.where(unique_labels == int(cls_pred))[0])]# Create a Rectangle patchbbox = patches.Rectangle((x1, y1), box_w, box_h, linewidth=2, edgecolor=color, facecolor="none")print(int(box_w)*int(box_h))# if(box_w*box_h>10000):# se.write("1".encode())# time.sleep(3)# se.write("0".encode())# Add the bbox to the plotax.add_patch(bbox)# Add labelplt.text(x1,y1,s=classes[int(cls_pred)],color="white",verticalalignment="top",bbox={"color": color, "pad": 0},)# Save generated image with detectionsplt.axis("off")plt.gca().xaxis.set_major_locator(NullLocator())plt.gca().yaxis.set_major_locator(NullLocator())filename = os.path.basename(path).split(".")[0]output_path = os.path.join("../output", f"{filename}.png")plt.savefig(output_path, bbox_inches="tight", pad_inches=0.0)plt.close()app.run() #啟動flask服務器

其中函數display():用于在瀏覽器輸入地址后直接返回圖片

@app.route('/img/',methods=['GET']) def display():if request.method == 'GET':# if filename is None:# pass# else:image = open("/static/he_21.png", "rb").read()# image = open(igpath+filename,"rb").read()response = make_response(image)response.headers['Content-Type'] = 'image/jpg'return response

除了最后一行app.run()其他的都是深度學習的代碼,學過的應該很容易看懂。

前端代碼

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" type="text/css" href="static/Login.css"/> </head> <body><h1 >檢測結果</h1><h1>hello!!!!!!!!!!!!```</h1> <h2>this is the detection result</h2> <img src="/static/he_21.png"> <img src="/static/he_14.png"> <img src="/static/he_4.png"> </body> </html>

css:

html{width: 100%;height: 100%;overflow: hidden;font-style: sans-serif; } body{width: 100%;height: 100%;font-family: 'Open Sans',sans-serif;margin: 0;background-color: #4A374A; }img{widht: 300px;height: 300px;border: 1px solid red;}h1{text-align:center;color:#fff;font-size:48px;text-shadow: 1px 1px 1px #ccc,0 0 10px #fff,0 0 20px #fff,0 0 30px #fff,0 0 40px #ff00de,0 0 70px #ff00de,0 0 80px #ff00de,0 0 100px #ff00de,0 0 150px #ff00de;transform-style: preserve-3d;-moz-transform-style: preserve-3d;-webkit-transform-style: preserve-3d;-ms-transform-style: preserve-3d;-o-transform-style: preserve-3d;animation: run ease-in-out 9s infinite;-moz-animation: run ease-in-out 9s infinite ;-webkit-animation: run ease-in-out 9s infinite;-ms-animation: run ease-in-out 9s infinite;-o-animation: run ease-in-out 9s infinite;}@keyframes run{0% {transform:rotateX(-5deg) rotateY(0);}50%{transform:rotateX(0) rotateY(180deg);text-shadow: 1px 1px 1px #ccc,0 0 10px #fff,0 0 20px #fff,0 0 30px #fff,0 0 40px #3EFF3E,0 0 70px #3EFFff,0 0 80px #3EFFff,0 0 100px #3EFFee,0 0 150px #3EFFee;}100% {transform:rotateX(5deg) rotateY(360deg);}}@-webkit-keyframes run{0% {transform:rotateX(-5deg) rotateY(0);}50%{transform:rotateX(0) rotateY(180deg);text-shadow: 1px 1px 1px #ccc,0 0 10px #fff,0 0 20px #fff,0 0 30px #fff,0 0 40px #3EFF3E,0 0 70px #3EFFff,0 0 80px #3EFFff,0 0 100px #3EFFee,0 0 150px #3EFFee;}100% {transform:rotateX(5deg) rotateY(360deg);}}@-moz-keyframes run{0% {transform:rotateX(-5deg) rotateY(0);}50%{transform:rotateX(0) rotateY(180deg);text-shadow: 1px 1px 1px #ccc,0 0 10px #fff,0 0 20px #fff,0 0 30px #fff,0 0 40px #3EFF3E,0 0 70px #3EFFff,0 0 80px #3EFFff,0 0 100px #3EFFee,0 0 150px #3EFFee;}100% {transform:rotateX(5deg) rotateY(360deg);}}@-ms-keyframes run{0% {transform:rotateX(-5deg) rotateY(0);}50%{transform:rotateX(0) rotateY(180deg);text-shadow: 1px 1px 1px #ccc,0 0 10px #fff,0 0 20px #fff,0 0 30px #fff,0 0 40px #3EFF3E,0 0 70px #3EFFff,0 0 80px #3EFFff,0 0 100px #3EFFee,0 0 150px #3EFFee;}100% {transform:rotateX(5deg) rotateY(360deg);}}

輸入命令

export FLASK_APP=“detect.py” #由于是linux故輸入這個
flask run --host=0.0.0.0 --port=8000
記得開放ubuntu的端口:

sudo ufw allow 8000

附:
開啟/禁用

sudo ufw allow|deny [service]

sudo ufw allow smtp 允許所有的外部IP訪問本機的25/tcp (smtp)端口

sudo ufw allow 22/tcp 允許所有的外部IP訪問本機的22/tcp (ssh)端口

sudo ufw allow 53 允許外部訪問53端口(tcp/udp)

sudo ufw allow from 192.168.1.100 允許此IP訪問所有的本機端口

sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53
查看防火墻狀態

sudo ufw status

總結

以上是生活随笔為你收集整理的【flask整合深度学习】ubuntu系统下显示深度学习视觉检测结果图片并可在web端访问,配置允许手机浏览器打开的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99国产精| 好男人天堂网 | 九九久久九九久久 | 天堂av8| 国产精品资源站 | 国产一区二区在线免费观看视频 | 婷婷.com | 红桃视频成人 | 欧美 丝袜 自拍 制服 另类 | 50一60岁老妇女毛片 | 免费a级片在线观看 | 超91在线| jizz视频| 黄色日批网站 | 久久狠狠婷婷 | 国产乱视频| 麻豆69 | 国产精品黑人一区二区三区 | 亚洲网址 | 欧美成人免费在线观看 | av在线影片 | av999 | 久草视频中文在线 | 少妇在线 | 好吊色免费视频 | 日本人和亚洲人zjzjhd | 1024国产精品| 致单身男女免费观看完整版 | 欧美生活一级片 | 亚洲国产三区 | 国产v在线| 天天射日日干 | 特大黑人巨人吊xxxx | 国产极品久久久 | 欧美午夜在线视频 | 俺去俺来也在线www色官网 | 全黄性高潮 | 欧美精品一二三区 | 中文字幕观看在线 | 日韩欧美v | 国产视频精品视频 | 少妇媚药按摩中文字幕 | 欧美人与动性xxxxx杂性 | 91精品国产综合久久福利软件 | 日本少妇xxx | 97人人爽| 亚洲高潮无码久久 | 高清av免费观看 | 99欧美 | 最新黄色在线 | 污视频在线播放 | 五月婷婷激情在线 | 久久精品视频网站 | 精品久久久久一区二区国产 | 色网站入口| 97色伦97色伦国产欧美空 | 日日色av| 国产精品一区在线观看你懂的 | 亚洲高h| 亚洲综合色自拍一区 | 亚洲骚图 | av高清不卡 | 亚洲最黄视频 | 黄色在线免费观看网站 | 亚洲一区不卡在线 | 亚洲综合日韩精品欧美综合区 | 夜夜嗨av禁果av粉嫩avhd | 免费av导航| 久久97| 亚洲国产毛片aaaaa无费看 | 日韩av在线直播 | 四虎com | 久草色视频| 中文精品久久久久人妻不卡 | 粉嫩av懂色av蜜臀av分享 | 久久国产乱子伦免费精品 | 在线视频 一区二区 | 九七超碰在线 | 亚洲一区二区视频在线观看 | 91在线观看免费高清完整版在线观看 | 日本福利在线观看 | 真人真事免费毛片 | 日本一区视频在线观看 | 黄色av免费 | 久草视频这里只有精品 | 黄色69视频 | 国产伦精品一区二区三区精品 | 18成人在线观看 | 久久在线免费观看 | 日韩二区三区四区 | 久久天天综合 | 一区二区三区四区精品视频 | 青青国产在线 | 午夜影视体验区 | 亚洲做受高潮 | 五月天伊人网 | 国产美女精品视频 | 在线观看h网站 | 午夜影院福利社 |