I am doing a project that recognize human face from camera. Here is the workflow:
- acquire a frame of image from camera
- detect if there is motion in the frame, if motion detected in current frame, put the motion frame in queue for further process.
- 开发者_高级运维search faces in the output frame from step2
- if there is faces, save the face
what I want:
- the workflow can be easily extend, say i may wanna add new steps to the workflow to add new features.
- a step can be easily turned on/off without affect following steps
what i can think of is a service bus-like architecture. for example. step2. can publish message that indicating a motion frame is detected, the subscriber can then proceed with its process with the captured motion frame.
so what do you think?
The application seems to be similar to a pipeline. I would go for the chain-of-responsibility pattern.
I would use a plugin architecture and a linked-list of callbacks for each frame to process.
This way, in C at-least, they are just pointers. You can create different callback linked-list chains for different purposes, for example:
Chain 1: sobel()->generic_features()->eigenfaces()->metric_analysis()->save()
So the chain is applies as callbacks accepting the frame, or result of a previous step as input.
Hope my poor explanation helps.
精彩评论