Многопроцессорность с Tensorflow на Raspberry PiPython

Программы на Python
Ответить
Anonymous
 Многопроцессорность с Tensorflow на Raspberry Pi

Сообщение Anonymous »

У меня возникли проблемы с запуском Tensorflow за пределами моего основного сценария, и мне интересно, есть ли обходной путь.
Поэтому, чтобы изолировать проблему, я написал пару тестовых сценариев. чтобы увидеть, в чем проблема. Этот скрипт работает нормально.
main.py

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

from tflite_support.task import core
from tflite_support.task import processor
from tflite_support.task import vision
from multiprocessing import Process

def start_ml():
model = "efficientdet_lite0.tflite"
numThreads = 4

dispW = int(1280 / 2)
dispH = int(720 / 2)

picam2 = Picamera2()
picam2.preview_configuration.main.size=(dispW, dispH)
picam2.preview_configuration.main.format='RGB888'
picam2.preview_configuration.align()
picam2.configure("preview")
picam2.start()

baseOptions = core.BaseOptions(file_name=model, use_coral=False, num_threads=numThreads)
detectionOptions = processor.DetectionOptions(max_results=3, score_threshold=0.5)
options = vision.ObjectDetectorOptions(base_options=baseOptions, detection_options=detectionOptions)
detector = vision.ObjectDetector.create_from_options(options)

while True:
im = picam2.capture_array()
im = cv2.flip(im, -1)

imRGB = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) # convert from BGR to RGB image
imTensor = vision.TensorImage.create_from_array(imRGB) # create a tensor image
myDetections = detector.detect(imTensor) # get the objects that are detected by tensorflow
image = utils.visualize(im, myDetections) # create a decorated image with detected objects

cv2.imshow('Camera', im)
if cv2.waitKey(1)==ord('q'):
break

cv2.destroyAllWindows()

process = Process(target=start_ml)
process.start()
Как только у меня появляется код тензорного потока за пределами main.py, он застревает в вызовах метода тензорного потока или рядом с ним. Нет никаких ошибок или каких-либо признаков того, что что-то пошло не так, оно просто зависает.
main.py

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

from detector import Detector

detector = Detector()
detector.start_camera_feed(detector)
detector.py

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

from tflite_support.task import core
from tflite_support.task import processor
from tflite_support.task import vision
from multiprocessing import Process

class Detector:
def __init__(self):
dispW = int(1280 / 2)
dispH = int(720 / 2)

self._picam2 = Picamera2()
self._picam2.preview_configuration.main.size = (dispW, dispH)
self._picam2.preview_configuration.main.format = 'RGB888'
self._picam2.preview_configuration.align()
self._picam2.configure("preview")
self._picam2.start()

model = "efficientdet_lite0.tflite"
numThreads = 4

baseOptions = core.BaseOptions(file_name=model, use_coral=False, num_threads=numThreads)
detectionOptions = processor.DetectionOptions(max_results=3, score_threshold=0.5)
options = vision.ObjectDetectorOptions(base_options=baseOptions, detection_options=detectionOptions)
self._detector = vision.ObjectDetector.create_from_options(options)

def start_camera_feed(self):
process = Process(target=self._show_camera_feed)
process.start()

def _show_camera_feed(self):
iterator = 0
while True:
im = self._picam2.capture_array()
im = cv2.flip(im, -1)

imRGB = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)  # convert from BGR to RGB image
imTensor = vision.TensorImage.create_from_array(imRGB)  # create a tensor image
myDetections = self._detector.detect(imTensor)  # get the objects that are detected by tensorflow
image = utils.visualize(im, myDetections)  # create a decorated image with detected objects

cv2.imshow('Camera', im)
if cv2.waitKey(1) == ord('q'):
break

iterator += 1
if iterator == 100:
break

cv2.destroyAllWindows()
Эта проблема на самом деле возникла, когда я пытался реализовать обнаружение объектов тензорного потока в хобби-проекте, над которым я работаю. Я действительно хочу сохранить структуру, которая у меня есть в этом проекте, и не иметь никакого кода тензорного потока в моем основном скрипте, поэтому я не просто перемещаю все это в main.py. Я также хотел бы сохранить подпроцессы.

Подробнее здесь: https://stackoverflow.com/questions/791 ... spberry-pi
Ответить

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

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

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

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

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