Problem CSI camera Jetson Nano OpenCV

Hello,

I am new with the Jetson Nano board and I have some troubles with my CSI camera through python

The goal to this program is to classify the frames from the CSI camera of my Jetson Nano with a deep learning model.
I trained it with pictures I took with the CSI camera with the command : nvgstcapture-1.0 --image-res=3 in the console.

The program is working well when I use a USB webcam with the command : cap = cv2.VideoCapture(1)
I can get my visualize_model function for each frames so everything is fine.

But I d like to use the CSI camera because I trained my model with.

When I try to use the CSI camera with GSTREAMER, the window with the frame opens (there is a big latency, like 2 or 3 sec) and either the window crashes or either I can press Escape key to close the windows but the program is not closing (I have to stop it with keyboard interrupt) and it doesn t print my visualize_model function…

Is someone knows how I can fix my problem ?

Here the program :

> import cv2
> import torch
> import torch.nn as nn
> import torch.optim as optim
> from torch.optim import lr_scheduler
> import numpy as np
> import torchvision
> from torchvision import datasets, models, transforms
> import os
> import time
> import copy
> import torch.nn.functional as f
> from PIL import Image
> 
> 
> def gstreamer_pipeline(
>     capture_width=1280,
>     capture_height=720,
>     display_width=1280,
>     display_height=720,
>     framerate=60,
>     flip_method=0,
> ):
>     return (
>         "nvarguscamerasrc ! "
>         "video/x-raw(memory:NVMM), "
>         "width=(int)%d, height=(int)%d, "
>         "format=(string)NV12, framerate=(fraction)%d/1 ! "
>         "nvvidconv flip-method=%d ! "
>         "video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
>         "videoconvert ! "
>         "video/x-raw, format=(string)BGR ! appsink"
>         % (
>             capture_width,
>             capture_height,
>             framerate,
>             flip_method,
>             display_width,
>             display_height,
>         )
>     )
> 
> data_dir = '/home/Name/Classification'
> model_dir = data_dir+"/best_model_mobilenet_v2.pth"
> 
> device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
> model = torch.load(model_dir)
> model = model.to(device)
> was_training = model.training
> model.eval()
> 
> def visualize_model(model, image=''):
>     
>     imsizel=700
>     imsizeL=round((imsizel/16)*9)
>     
>     data_transforms =transforms.Compose([transforms.Resize((imsizeL,imsizel)),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
>         
>     img = Image.open(image)
>     image_datasets = data_transforms(img)
>     dataloaders = torch.utils.data.DataLoader(image_datasets, batch_size=1, shuffle=False, num_workers=0)
>     class_names = ["B", "G"]
>     
>     with torch.no_grad():
>         inputs = image_datasets
>         inputs = inputs.to(device)
>         outputs = model(inputs[None])
>         
>         _, preds = torch.max(outputs, 1)
>         precision = f.softmax(outputs, dim=1)
>         print('-'*20)
>         for k in range(0, len(class_names)):
>             print("Probability ", class_names[k] + " : ", round(precision[0][k].item(), 3))
>         print('-'*20 + '\n')
>         return
> 
> cap = cv2.VideoCapture(1)
> #cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER)
> 
> if cap.isOpened():
>     window_handle = cv2.namedWindow("CSI Camera", cv2.WINDOW_AUTOSIZE)
>     while cv2.getWindowProperty("CSI Camera", 0) >= 0:
>         ret_val, img = cap.read()  
>         cv2.imwrite('/home/Name/Classification/CamCap/cap.jpg', img)          
>         image = '/home/Name/Classification/CamCap/cap.jpg'
>         visualize_model(model=model, image = image)
>         cv2.imshow("CSI Camera", img)
>         keyCode = cv2.waitKey(30) & 0xFF
> 
>         if keyCode == 27:
>             break
>    
>     cap.release()
>     cv2.destroyAllWindows()
```Preformatted text

Hello !
I finally managed to make my CSI camera works
I used the nanocamera module instead of using Gstreamer
To install it : pip3 install nanocamera
GitHub page : GitHub - thehapyone/NanoCamera: A simple to use camera interface for the Jetson Nano for working with USB and CSI cameras in Python.
Thank you very much

1 Like

Glad to know your camera works, thanks for sharing.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.