Ошибка индекса во время вывода. Использование Roboflow Docker с cv2 с использованием Picamera2.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка индекса во время вывода. Использование Roboflow Docker с cv2 с использованием Picamera2.

Сообщение Anonymous »

Я новичок в этом, поэтому, пожалуйста, будьте откровенны: я использую библиотеку roboflow и библиотеку cv2 для своей модели обнаружения объектов, которую я использую с докером с Raspberry Pi, но я получаю это ошибка и пытаюсь подумать, каким должен быть мой следующий шаг. Любой знающий может оказать большую помощь, поскольку это тема для моей диссертации.

Код: Выделить всё

import cv2
import time
from picamera2 import Picamera2
from inference import InferencePipeline
from roboflow import Roboflow
import pandas as pd
import cvzone
import numpy as np

picam2a = Picamera2(0)
picam2b = Picamera2(1)

picam2a.preview_configuration.sensor.output_size = (640,480)
picam2b.preview_configuration.sensor.output_size = (640,480)

picam2a.preview_configuration.sensor.bit_depth = 10
picam2b.preview_configuration.sensor.bit_depth = 10

picam2a.preview_configuration.main.format = "RGB888"
picam2b.preview_configuration.main.format = "RGB888"

picam2a.preview_configuration.controls.FrameRate = 30
picam2b.preview_configuration.controls.FrameRate = 30

picam2a.configure("preview")
picam2b.configure("preview")

picam2a.start()
picam2b.start()

rf = Roboflow(api_key="~~~~~~~~~~~")
project = rf.workspace().project("~~~~~~~~~~~")
model = project.version(3, local="http:~~~~~~~~~~~~~/").model
classes = ['Ripe','Unripe','Overripe']
data = classes
class_list = data
count=0

fps = 0

while True:
tStart = time.time()
im= picam2a.capture_array()
im2= picam2b.capture_array()

count += 1
if count % 3 != 0:
continue
im=cv2.flip(im,0) # type: ignore
prediction=model.predict(im,confidence=40, overlap=30)
print(prediction.json())
a=prediction[0].boxdata
px=pd.DataFrame(a).astype("float")

for index,row in px.iterrows():
#        print(row)

x1=int(row[0])
y1=int(row[1])
x2=int(row[2])
y2=int(row[3])
d=int(row[5])
c=class_list[d]

cv2.rectangle(im,(x1,y1),(x2,y2),(0,0,255),2)
cvzone.putTextRect(im,f'{c}',(x1,y1),1,1)
cv2.imshow("Camera1", im)

im2=cv2.flip(im2,0) # type: ignore
prediction=model.predict(im2, confidence=40, overlap=30)
print(prediction.json())
a=prediction[0].boxdata
px=pd.DataFrame(a).astype("float")

for index,row in px.iterrows():
#        print(row)

x1=int(row[0])
y1=int(row[1])
x2=int(row[2])
y2=int(row[3])
d=int(row[5])
c=class_list[d]

cv2.rectangle(im2,(x1,y1),(x2,y2),(0,0,255),2)
cvzone.putTextRect(im2,f'{c}',(x1,y1),1,1)
cv2.imshow("Camera2", im2)

if cv2.waitKey(30)==ord('q'):
break
tEnd = time.time()
loopTime = tEnd-tStart
fps = .9*fps + .1*(1/loopTime)
print(int(fps))
cv2.destroyAllWindows()
Это код, который я создавал и раньше тестировал с помощью YOLO, и он работает отлично, но у меня возникли проблемы с обучением данных на локальном компьютере, поэтому я Вместо этого я перешел в окно настройки Roboflow и получил вот такую ​​ошибку вывода.

Код: Выделить всё

File "/home/ACSIPGuro/rpi-bookworm-yolov8/cam_3.py", line 53, in 
a=prediction[0].boxdata
~~~~~~~~~~^^^
File "/home/ACSIPGuro/.local/lib/python3.11/site-packages/roboflow/util/prediction.py", line 421, in __getitem__
return self.predictions[index]
~~~~~~~~~~~~~~~~^^^^^^^
IndexError: list index out of range
Я пробовал удалить эти строки, и это работает, но поля, показывающие то, что он обнаруживает, не отображаются, если я не определяю рамки блоков.

Код: Выделить всё

 a=prediction[0].boxdata
px=pd.DataFrame(a).astype("float")

for index,row in px.iterrows():
#        print(row)

x1=int(row[0])
y1=int(row[1])
x2=int(row[2])
y2=int(row[3])
d=int(row[5])
c=class_list[d]

cv2.rectangle(im2,(x1,y1),(x2,y2),(0,0,255),2)
cvzone.putTextRect(im2,f'{c}',(x1,y1),1,1)
У кого-нибудь есть другие способы сделать это или другие альтернативы? Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/784 ... -picamera2
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»