我正在從用戶那里獲取上傳的影像,然后將其發送到 YOLO 模型,然后該模型回傳給我一張影像。
我想將回傳的影像存盤在我的本地目錄中,然后將其顯示在用戶界面上。
這是views.py接收影像并將其發送到 Yolo 模型的代碼,
def predictImage(request):
# print(request)
# print(request.POST.dict())
fileObj = request.FILES['filePath']
fs = FileSystemStorage()
filePathName = fs.save(fileObj.name, fileObj)
filePathName = fs.url(filePathName)
testimage = '.' filePathName
# img = image.load_img(testimage, target_size=(img_height, img_width))
img = detect_image(testimage)
filePathName = fs.save(fileObj.name "_result", img) # -> HERE IS THE ERROR
filePathName = fs.url(filePathName)
這是 YOLO 模型的函式,它使用 OpenCV 讀取影像(影像作為引數發送給函式)然后回傳該影像,
import numpy as np
import cv2
def detect_image(img_path):
confidenceThreshold = 0.5
NMSThreshold = 0.3
modelConfiguration = 'cfg/yolov3.cfg'
modelWeights = 'yolov3.weights'
labelsPath = 'coco.names'
labels = open(labelsPath).read().strip().split('\n')
np.random.seed(10)
COLORS = np.random.randint(0, 255, size=(len(labels), 3), dtype="uint8")
net = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights)
image = cv2.imread(img_path)
(H, W) = image.shape[:2]
#Determine output layer names
layerName = net.getLayerNames()
layerName = [layerName[i - 1] for i in net.getUnconnectedOutLayers()]
blob = cv2.dnn.blobFromImage(image, 1 / 255.0, (416, 416), swapRB = True, crop = False)
net.setInput(blob)
layersOutputs = net.forward(layerName)
boxes = []
confidences = []
classIDs = []
for output in layersOutputs:
for detection in output:
scores = detection[5:]
classID = np.argmax(scores)
confidence = scores[classID]
if confidence > confidenceThreshold:
box = detection[0:4] * np.array([W, H, W, H])
(centerX, centerY, width, height) = box.astype('int')
x = int(centerX - (width/2))
y = int(centerY - (height/2))
boxes.append([x, y, int(width), int(height)])
confidences.append(float(confidence))
classIDs.append(classID)
#Apply Non Maxima Suppression
detectionNMS = cv2.dnn.NMSBoxes(boxes, confidences, confidenceThreshold, NMSThreshold)
if(len(detectionNMS) > 0):
for i in detectionNMS.flatten():
(x, y) = (boxes[i][0], boxes[i][1])
(w, h) = (boxes[i][2], boxes[i][3])
color = [int(c) for c in COLORS[classIDs[i]]]
cv2.rectangle(image, (x, y), (x w, y h), color, 2)
text = '{}: {:.4f}'.format(labels[classIDs[i]], confidences[i])
cv2.putText(image, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
return image
#cv2.imshow('Image', image)
#cv2.waitKey(0)
在這條線上,
filePathName = fs.save(fileObj.name "_result", img)
我收到以下錯誤,
'numpy.ndarray' object has no attribute 'read'
我不確定如何解決這個問題。我嘗試搜索如何存盤 OpenCV 修改檔案 usnig FileSystemStorage 但沒有找到任何幫助。任何人都可以幫我解決這個問題嗎?
uj5u.com熱心網友回復:
您可以使用庫的imwrite功能cv2將檔案存盤在本地目錄中,即
在您的情況下,只需執行此操作,
img = detect_image(testimage)
cv2.imwrite(fileObj.name "_result.jpg", img=img)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424709.html
標籤:Python django 图片 opencv 文件系统存储
