라즈베리파이4와 imx219 카메라 모듈을 사용하여 yolov5모델로 차량 인식 시 아두이노로 신호 1을 주어 아두이노에서 동작을 수행하도록 해놓은 상태입니다. 근데 명령창에서 실행을 시켰을 때는 딜레이가 길어봣자 2초였는데, 자동실행시키도록 탑재하니 통신이 3초에서 길게는 10초 에 한번씩 되는 것 같았습니다(아두이노의 L버튼이 3~10초마다 깜빡이는데 그 때만 잠깐 신호를 받는 것같음) 무엇이 문제일까요?
아래는 detect.py 코드입니다.
import serial
from picamera2 import Picamera2
import torch
import cv2
import numpy as np
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True).to(device)
picam2 = Picamera2()
picam2.configure(picam2.create_preview_configuration(main={"format": "RGB888", "size": (320, 240)}))
picam2.start()
arduino = serial.Serial('/dev/ttyUSB0', 115200)
while True:
frame = picam2.capture_array()
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = model(img)
detected = results.pandas().xyxy[0]
if len(detected) > 0:
for i in range(len(detected)):
if detected.iloc[i]['name'] == 'car':
arduino.write(b'1')
print("Car detected! Signal sent to Arduino.")
break
output_img = np.squeeze(results.render())
output_img = cv2.cvtColor(output_img, cv2.COLOR_RGB2BGR)
cv2.imshow("YOLOv5 Object Detection", output_img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
picam2.stop()
arduino.close()
그리고 아래는 systemd 파일입니다.
[Unit]
Description=YOLOv5 Detection Service
After=network. target
[Service]
Type=simple
ExecStart=/home/pi/Downloads/yolov5/start_detect.sh
Nice=-10
CPUShares=1024
MemoryLimit=512M
workingDirectory=/home/pi/Downloads/yolov5
Environment="PATH=/usr/bin:/bin:/usr/local/bin:/home/pi/. local/bin"
ExecStartPre=/bin/sleep 2
StandardOutput=journal StandardError=journal
Restart=always
[Install] wantedBy=multi-user. target