Ask Your Question

Revision history [back]

imwrite not working when Spawned by Crontab or Systemd??

Hi all,

I've written a Raspberry Pi application (Ubuntu Mate) that's essentially a time-lapse camera. Every 30 seconds, it snaps an image and writes it to disk.

When I start the application manually from the terminal, it works as expected.

When I configure the script to execute automatically at startup, (using crontab or systemd - It needs to be executed as root) the script runs without any error, but no images are written to the disk.

At first I thought a permission issue, but the script is running as root... Any idea of what may be going on?

My script:

import time
import neopixel
import board
import cv2

class Camera01:
    GiGe = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())
    Light = neopixel.NeoPixel(board.D18, 16, bpp=4, auto_write=True)


count = 0

while True:
    # Open camera
    Camera01.GiGe.Open()

# Turn on Light
Camera01.Light.fill((255, 255, 255, 255))

# Snap Image
image = Camera01.GiGe.GrabOne(1000)

# Convert image to OpenCV Array
image = cv2.cvtColor(image.Array, cv2.COLOR_BAYER_BG2BGR)

# Save image to disk
cv2.imwrite('saved_images/image'+str(count)+'.png', image)

# Turn off Light
Camera01.Light.fill((0, 0, 0, 0))

# Close camera
Camera01.GiGe.Close()

# Increment counter
count = count + 1

time.sleep(30)<code>

imwrite not working when Spawned by Crontab or Systemd??

Hi all,

I've written a Raspberry Pi application (Ubuntu Mate) that's essentially a time-lapse camera. Every 30 seconds, it snaps an image and writes it to disk.

When I start the application manually from the terminal, it works as expected.

When I configure the script to execute automatically at startup, (using crontab or systemd - It needs to be executed as root) the script runs without any error, but no images are written to the disk.

At first I thought a permission issue, but the script is running as root... Any idea of what may be going on?

My script:

import time
import neopixel
import board
import cv2

class Camera01:
    GiGe = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())
    Light = neopixel.NeoPixel(board.D18, 16, bpp=4, auto_write=True)


count = 0

while True:
    # Open camera
    Camera01.GiGe.Open()

 # Turn on Light
 Camera01.Light.fill((255, 255, 255, 255))

 # Snap Image
 image = Camera01.GiGe.GrabOne(1000)

 # Convert image to OpenCV Array
 image = cv2.cvtColor(image.Array, cv2.COLOR_BAYER_BG2BGR)

 # Save image to disk
 cv2.imwrite('saved_images/image'+str(count)+'.png', image)

 # Turn off Light
 Camera01.Light.fill((0, 0, 0, 0))

 # Close camera
 Camera01.GiGe.Close()

 # Increment counter
 count = count + 1

time.sleep(30)<code>
    time.sleep(30)