opencv+树莓派+c语言,实时图像处理与OpenCV的和树莓派

最近我在OpenCV的加速图像处理上我的树莓派3平台上运行的挣扎。我做了脸部识别应用程序,但它运行速度非常缓慢。我读线程,多处理等诸多课题,但我仍然感到困惑了。我只是用面部检测来测试它,以使其更简单。这里是我的代码:实时图像处理与OpenCV的和树莓派

pivideostream.py - 在线程更新帧

from picamera.array import PiRGBArray

from picamera import PiCamera

from threading import Thread

import cv2

class PiVideoStream:

def __init__(self, resolution=(640, 480), framerate=30):

self.camera = PiCamera()

self.camera.resolution = resolution

self.camera.framerate = framerate

self.rawCapture = PiRGBArray(self.camera, size=resolution)

self.stream = self.camera.capture_continuous(self.rawCapture,format='bgr', use_video_port=True)

self.image = None

self.stopped = False

def start(self):

t = Thread(target=self.update)

t.daemon = True

t.start()

return self

def update(self):

for frame in self.stream:

self.image = frame.array

self.rawCapture.truncate(0)

if self.stopped:

self.stream.close()

self.rawCapture.close()

self.camera.close()

return

def read(self):

return self.image

def stop(self):

self.stopped = True

process_img_thread.py - 主程序

from pivideostream import PiVideoStream

import cv2

from picamera.array import PiRGBArray

from picamera import PiCamera

import time

def detect_in_thread():

# Start updating frames in threaded manner

face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')

eye_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml')

thread_stream = PiVideoStream()

thread_stream.start()

time.sleep(2)

# Read frames

while True:

# Original image

image = thread_stream.read()

# Full image - face detection

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray,1.3,5)

for (x,y,w,h) in faces:

detected_face = cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)

# Region of interest - eyes detection

roi_color = image[y:y+h,x:x+w]

roi_gray = gray[y:y+h,x:x+w]

eyes = eye_cascade.detectMultiScale(roi_gray,1.03,5,0,(40,40))

for (ex,ey,ew,eh) in eyes:

cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,255),2)

# Show computed image

cv2.imshow('Threaded Camera OpenCV Preview',image)

if cv2.waitKey(1) & 0xFF == ord("q"):

break

# Close image window and thread

cv2.destroyAllWindows()

thread_stream.stop()

if __name__ == "__main__":

detect_in_thread()

当我显示来自相机它的工作原始帧伟大的,但是当我仅仅是为了处理图像添加主程序的东西,视频速度大约是1 FPS :(。 有人能帮助我吗?

2017-02-01

Kordian

+1

脸部检测是一种昂贵的任务和覆盆子pi是一个缓慢的decice 。也许试试TK1 SoC,但不能保证足够快。 –

+1

如果你知道面的近似大小在您的图像,你可以调整图像或限制检测尺寸。 –

你可能感兴趣的:(opencv+树莓派+c语言)