Green screen with yolov5 on nvidia jetson nano 2gb and raspi camera

Hi i tried to run imx219 Raspi camera on nvidia jetson nano and with some advices i check:

gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=> 
int)1920, height=(int)1080,format=(string)NV12, framerate=(fraction)30/1' !   nvoverlaysink

and it runs perfectly good but when i try running detect.py from yolo with my webcam using:

sudo python3 detect.py --weights yolov5n6.pt --conf 0.25  --source 0 --         
 device 0

i got green screen
detect.py that it uses webcam is :

if webcam:
        view_img = check_imshow()
        cudnn.benchmark = True  # set True to speed up constant image size inference
        dataset = LoadStreams(source, img_size=imgsz, stride=stride, auto=pt)
        bs = len(dataset)  # batch_size
    else:
        dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt)
        bs = 1  # batch_size
    vid_path, vid_writer = [None] * bs, [None] * bs

and LoadStreams is in file datasets

from utils.datasets import IMG_FORMATS, VID_FORMATS, LoadImages, LoadStreams

so in this file (datasets)

class LoadImages:
    # YOLOv5 image/video dataloader, i.e. `python detect.py --source image.jpg/vid.mp4`
    def __init__(self, path, img_size=640, stride=32, auto=True):
        p = str(Path(path).resolve())  # os-agnostic absolute path
        if '*' in p:
            files = sorted(glob.glob(p, recursive=True))  # glob
        elif os.path.isdir(p):
            files = sorted(glob.glob(os.path.join(p, '*.*')))  # dir
        elif os.path.isfile(p):
            files = [p]  # files
        else:
            raise Exception(f'ERROR: {p} does not exist')

        images = [x for x in files if x.split('.')[-1].lower() in IMG_FORMATS]
        videos = [x for x in files if x.split('.')[-1].lower() in VID_FORMATS]
        ni, nv = len(images), len(videos)

        self.img_size = img_size
        self.stride = stride
        self.files = images + videos
        self.nf = ni + nv  # number of files
        self.video_flag = [False] * ni + [True] * nv
        self.mode = 'image'
        self.auto = auto
        if any(videos):
            self.new_video(videos[0])  # new video
        else:
            self.cap = None
        assert self.nf > 0, f'No images or videos found in {p}. ' \
                            f'Supported formats are:\nimages: {IMG_FORMATS}\nvideos: {VID_FORMATS}'

    def __iter__(self):
        self.count = 0
        return self

    def __next__(self):
        if self.count == self.nf:
            raise StopIteration
        path = self.files[self.count]

        if self.video_flag[self.count]:
            # Read video
            self.mode = 'video'
            ret_val, img0 = self.cap.read()
            while not ret_val:
                self.count += 1
                self.cap.release()
                if self.count == self.nf:  # last video
                    raise StopIteration
                else:
                    path = self.files[self.count]
                    self.new_video(path)
                    ret_val, img0 = self.cap.read()

            self.frame += 1
            s = f'video {self.count + 1}/{self.nf} ({self.frame}/{self.frames}) {path}: '

        else:
            # Read image
            self.count += 1
            img0 = cv2.imread(path)  # BGR
            assert img0 is not None, f'Image Not Found {path}'
            s = f'image {self.count}/{self.nf} {path}: '

        # Padded resize
        img = letterbox(img0, self.img_size, stride=self.stride, auto=self.auto)[0]

        # Convert
        img = img.transpose((2, 0, 1))[::-1]  # HWC to CHW, BGR to RGB
        img = np.ascontiguousarray(img)

        return path, img, img0, self.cap, s

    def new_video(self, path):
        self.frame = 0
        self.cap = cv2.VideoCapture("v4l2src device=/dev/video0 ! video/x-raw, format=YUY2 ! videoconvert ! video/x-raw, format=BGR ! appsink", cv2.CAP_GSTREAMER)
        self.frames = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT))
    def _gst_str(self):
    	return 'nvarguscamerasrc sensor-id=%d ! video/x-raw(memory:NVMM), width=%d, height=%d, 			format=(string)NV12, framerate=(fraction)%d/1 ! nvvidconv ! video/x-raw, 			width=(int)%d, height=(int)%d, format=(string)BGRx ! videoconvert ! appsink' % (
        	self.capture_device, self.capture_width, self.capture_height, self.capture_fps, 		self.width, self.height)

    def __len__(self):
        return self.nf  # number of files


class LoadWebcam:  # for inference
    # YOLOv5 local webcam dataloader, i.e. `python detect.py --source 0`
    def __init__(self, pipe='0', img_size=640, stride=32):
        self.img_size = img_size
        self.stride = stride
        self.pipe = eval(pipe) if pipe.isnumeric() else pipe
        self.cap = cv2.VideoCapture("v4l2src device=/dev/video0 ! video/x-raw, format=YUY2 ! videoconvert ! video/x-raw, format=BGR ! appsink",self.pipe)  # video capture object
        self.cap.set(cv2.CAP_PROP_BUFFERSIZE, 3)  # set buffer size

    def __iter__(self):
        self.count = -1
        return self

    def __next__(self):
        self.count += 1
        if cv2.waitKey(1) == ord('q'):  # q to quit
            self.cap.release()
            cv2.destroyAllWindows()
            raise StopIteration

        # Read frame
        ret_val, img0 = self.cap.read()
        img0 = cv2.flip(img0, 1)  # flip left-right

i put below code as ppl with raspi camera problems were told to do

nvarguscamerasrc sensor-id=%d ! video/x-raw(memory:NVMM), width=%d, height=%d, 			format=(string)NV12, framerate=(fraction)%d/1 ! nvvidconv ! video/x-raw, 			width=(int)%d, height=(int)%d, format=(string)BGRx ! videoconvert ! appsink

and got green screen. My question is if i did it right or should change something else in this file so yolov5 detecting works.

These are my files:
detect.py (13.3 KB)
datasets.py (44.6 KB)

and these are clean from github:

Hi,
We would suggest use Jetson Nano 4GB for running deep learning inferences. We have DeepStream SDK and it demonstrates some Yolo models. Please install the package and give it a try.

And on Jetson Nano, suggest run tiny models such as Yolov3 tiny or Yolov4 tiny.

I see but ill check it in next week first ill try to run this one any advices about pipeline ?

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