USBカメラopencv systemd 自動起動で失敗します
解決したいこと
USBカメラを用いて特定の画像を認識すると、ネオピクセルLEDに指定した図形が表示するプログラム(face_led0910.py)を作りました。認識のためカスケード分類器でxmlファイルを作り、特定の画像を認識することができました。LXターミナル上では意図した動きになりましたが、systemdの自動起動で失敗でします。プログラムはネオピクセルが仮想環境のもとしか動かないため、仮想環境のものでで動かしています。ラズベリーパイは初心者です。ご教示いただけると大変助かります。どうぞよろしくおねがいします。
自動起動のためにsystemd unitファイルを作りました
systemd unitファイルを作り、sudo systemctl enableでサービスを有効化
↓
sudo systemctl startでサービスをスタート
↓
sudo systemctl statusで動作確認を行うと以下のエラーが表示されます。
発生している問題・エラー
× face_0910.service - face_led0910
Loaded: loaded (/lib/systemd/system/face_0910.service; enabled; preset: enabled)
Active: failed (Result: signal) since Sun 2024-10-06 19:14:41 JST; 7s ago
Duration: 1.847s
Process: 5931 ExecStart=/home/kiyohara/env/bin/python3 /home/kiyohara/env/bin/face_led0910.py (code=killed, signal=ABRT)
Main PID: 5931 (code=killed, signal=ABRT)
CPU: 941ms
10月 06 19:14:40 raspberrypi systemd[1]: Started face_0910.service - face_led0910.
10月 06 19:14:41 raspberrypi python3[5931]: qt.qpa.xcb: could not connect to display
10月 06 19:14:41 raspberrypi python3[5931]: qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/kiyohara/env/lib/python3.11/site-packages/cv2/qt/>
10月 06 19:14:41 raspberrypi python3[5931]: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may >
10月 06 19:14:41 raspberrypi python3[5931]: Available platform plugins are: xcb.
10月 06 19:14:41 raspberrypi systemd[1]: face_0910.service: Main process exited, code=killed, status=6/ABRT
10月 06 19:14:41 raspberrypi systemd[1]: face_0910.service: Failed with result 'signal'.
python3のプログラム
import time
import board
import neopixel
import cv2
import numpy as np
import RPi.GPIO as GPIO
import os
print('basename: ', os.path.basename(__file__))
print('dirname: ', os.path.dirname(__file__))
GPIO.setmode(GPIO.BCM)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
GPIO.output(12,GPIO.LOW)
GPIO.output(18,GPIO.HIGH)
GPIO.output(23,GPIO.LOW)
GPIO.output(24,GPIO.LOW)
pixel_pin = board.D18
num_pixels = 64
ORDER = neopixel.GRB
pixels = neopixel.NeoPixel(pixel_pin,num_pixels,brightness=0.01, auto_write=False, pixel_order=ORDER)
pixels.fill((0, 0, 0))
pixels.show()
capture = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier('/home/kiyohara/env/bin/data/haarcascade_ok.xml')
while True:
ret,img = capture.read()
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.1,5)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
xkao = int(x+w/2)
if xkao > 200 and xkao > 400:
GPIO.output(18,GPIO.HIGH)
GPIO.output(23,GPIO.HIGH)
GPIO.output(24,GPIO.LOW)
time.sleep(1)
pixels[0] = (0,0,0)
pixels[1] = (0,0,0)
pixels[2] = (0,0,0)
pixels[3] = (0,255,0)
pixels[4] = (0,255,0)
pixels[5] = (0,0,0)
pixels[6] = (0,0,0)
pixels[7] = (0,0,0)
以下省略
pip3 list
pip3 list
Package Version
Adafruit-Blinka 8.47.0
adafruit-circuitpython-busdevice 5.2.9
adafruit-circuitpython-connectionmanager 3.1.1
adafruit-circuitpython-neopixel 6.3.11
adafruit-circuitpython-pixelbuf 2.0.5
adafruit-circuitpython-requests 4.1.6
adafruit-circuitpython-typing 1.11.0
Adafruit-PlatformDetect 3.74.0
Adafruit-PureIO 1.1.11
binho-host-adapter 0.1.6
numpy 2.1.2
opencv-python 4.10.0.84
pip 23.0.1
pyftdi 0.55.4
pyserial 3.5
pyusb 1.2.1
RPi.GPIO 0.7.1
rpi_ws281x 5.0.0
setuptools 66.1.1
sysv_ipc 1.1.0
typing_extensions 4.12.2
自分で試したこと
opencvの再アンインストール
カスケード分類器の保存場所の確認