From 4531fbfe2cb5278b06712f7b5db0b46e389028c4 Mon Sep 17 00:00:00 2001
From: s47700 <s47700@bht-berlin.de>
Date: Tue, 26 Mar 2024 14:15:31 +0100
Subject: [PATCH] Upload New File

---
 test/TEST_MODEL_with_VIDEO_1_.py | 149 +++++++++++++++++++++++++++++++
 1 file changed, 149 insertions(+)
 create mode 100644 test/TEST_MODEL_with_VIDEO_1_.py

diff --git a/test/TEST_MODEL_with_VIDEO_1_.py b/test/TEST_MODEL_with_VIDEO_1_.py
new file mode 100644
index 0000000..23f4049
--- /dev/null
+++ b/test/TEST_MODEL_with_VIDEO_1_.py
@@ -0,0 +1,149 @@
+import torch
+import torchvision
+import torchvision.transforms as transforms
+import torch.nn as nn
+
+
+import os
+import sys
+import numpy as np
+import time
+import yaml
+import cv2 
+import matplotlib.pyplot as plt
+
+
+"""
+Author: Jenö Faist, Paul Judis 
+"""
+
+"""
+With this File you can use a Video of a 3D Print to Tets your Model.
+By Pressing "f" you mark the current frame as a Fail Print 
+else the print is considered good
+"""
+
+"""
+Depending on the Video you must crop it so there a no black lines in it.
+You can find out the cropping by just using try and error.
+(TODO) IMPLEMENT ADAPTIVE CROPING 
+"""
+
+def crop_frame(image):
+    cromped_image = image[200:1080-200,620:1920-740,:] #image[:,250:1920-250,:] #image[:,470:1920-700,:] image[:,250:1920-250,:]#image[170:1080-500,650:1920-650,:]
+    return cromped_image
+
+
+if __name__ == '__main__':
+
+    absolutepath = os.path.dirname(__file__)
+    video_PATH = absolutepath+'/TEST_VIDEOS/test_4.mp4'
+    model_save_PATH = absolutepath+'/COMPLETE_MODELS/3D_DEC_MODEL_MIXR18_18E_64B.pt'
+
+
+    print("STARTING CNN VIDEO TEST")
+    print("--------------------")
+    print("Cuda Version:       " + torch.version.cuda)
+    print("Cuda:               "+str(torch.cuda.is_available()))
+    print("GPU:                "+str(torch.cuda.get_device_name()))
+    print("Video PATH:         "+video_PATH)
+    print("Model PATH:         "+model_save_PATH)
+    print("--------------------")
+    print("Loading Model...")
+
+
+    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
+
+    """
+    Specifing which Model we using for testing the Data this!
+    THIS MUST BE CHANGED DEPENDING OF WHICH MODEL YOU ARE USING !!! 
+    """
+    model  = torchvision.models.resnet18(weights='DEFAULT')
+    num_ftrs = model.fc.in_features
+    model.fc = nn.Linear(num_ftrs, 2)
+
+    try:
+        model.load_state_dict(torch.load(model_save_PATH))
+        model.eval()
+        print("[✓] Model Loaded [✓]")
+    except:
+        print("[!?] No Model Found [?!]")
+        exit(1)
+
+    model.eval()
+    model = model.to(device)
+
+    print("Loading VIDEO")
+
+    cap = None
+    try:
+        cap = cv2.VideoCapture(video_PATH)
+        print("[✓] Video Loaded [✓]")
+    except:
+        print("[!?] Video couldn't be found [?!]")
+        exit(1)
+
+    print("--------------------")
+    print("STARTING TEST THE VIDEO 3D PRINT")
+    print("--------------------")
+
+    transform = transforms.Compose([   
+        transforms.ToTensor(),
+        transforms.Resize((256,256)),
+    ])
+
+    running_accrucay = 0
+    count = 0
+    VIDEO_ON = True
+    while(VIDEO_ON):
+        count += 1
+        ret, frame = cap.read()
+
+        frame = crop_frame(frame)
+
+        input = transform(frame)
+        img = (input.squeeze()).numpy()
+        img = np.transpose(img, (1, 2, 0))
+
+         
+        input = input.to(device)
+        output = model(input.unsqueeze(0))
+        _, preds = torch.max(output, 1)
+
+
+        cv2.imshow('TEST MODEL PRESS "F" TO MARK AS FAIL',img)
+        k =cv2.waitKey(20)
+        FAILED_PRINT = False
+
+        if(k==ord("f")):
+            FAILED_PRINT = True
+
+        if(preds[0].item() == 1 and FAILED_PRINT):
+            running_accrucay +=1
+        elif(preds[0].item() == 0 and not FAILED_PRINT):
+            running_accrucay +=1
+
+        """
+        JUST FOR VISUALS 
+        """
+
+        sym = "NO"
+        sym_2 = "NO"
+        if(preds[0].item() == 1):
+            sym = "YES"
+        if FAILED_PRINT:
+            sym_2 = "YES"
+
+        
+        sys.stdout.write("\033[K")
+        print("CNN FAIL DETECTED: " + sym + " USER FAIL DETECTED: " + sym_2 + " CURRENT ACCURACY: "+str(int(100*(running_accrucay/count)))+"%", end='\r')
+        
+        if k == ord('q'):
+            VIDEO_ON = False
+        
+
+    sys.stdout.write("\033[K")
+    print("TESTING VIDEO FINISHED ACCURACY: "+str(int(100*(running_accrucay/count)))+"%", end='\r')
+    cap.release()
+    cv2.destroyAllWindows()
+
-- 
GitLab