UNPKG

noflo-ccv

Version:

CCV face detection for NoFlo

65 lines (58 loc) 1.81 kB
noflo = require 'noflo' exports.getComponent = -> c = new noflo.Component c.description = 'Calculates the bounds of an array of rectangles' c.icon = 'crop' c.inPorts.add 'rectangles', datatype: 'array' c.outPorts.add 'bounds', datatype: 'object' description: 'minX, minY, maxX, maxY, width, height, ratio' c.forwardBrackets = rectangles: ['bounds'] c.process (input, output) -> return unless input.hasData 'rectangles' data = input.getData 'rectangles' unless data.length #TODO error handling output.done() return dims = minX: Infinity minY: Infinity maxX: -Infinity maxY: -Infinity width: 0 height: 0 ratio: 1 for rect in data if rect.x? if dims.minX > rect.x dims.minX = rect.x if dims.minY > rect.y dims.minY = rect.y if dims.maxX < rect.x+rect.width dims.maxX = rect.x+rect.width if dims.maxY < rect.y+rect.height dims.maxY = rect.y+rect.height else if rect[0]? # array-type rectangles if dims.minX > face[0] dims.minX = face[0] if dims.minY > face[1] dims.minY = face[1] if dims.maxX < face[0]+face[2] dims.maxX = face[0]+face[2] if dims.maxY < face[1]+face[3] dims.maxY = face[1]+face[3] unless isFinite(dims.minX) and isFinite(dims.minY) and isFinite(dims.maxX) and isFinite(dims.maxY) output.done() return dims.minX = Math.round(dims.minX) dims.minY = Math.round(dims.minY) dims.maxX = Math.round(dims.maxX) dims.maxY = Math.round(dims.maxY) dims.width = dims.maxX - dims.minX dims.height = dims.maxY - dims.minY dims.ratio = dims.width/dims.height output.sendDone bounds: dims