cv-combinators 0.1.2.2 → 0.1.2.3
raw patch · 2 files changed
+15/−27 lines, 2 filesdep ~allocated-processorPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: allocated-processor
API changes (from Hackage documentation)
- AI.CV.ImageProcessors: keyPressed :: (Show a) => a -> IO Bool
+ AI.CV.ImageProcessors: keyPressed :: Show a => a -> IO Bool
- AI.CV.ImageProcessors: runTillKeyPressed :: (Show a) => IOProcessor () a -> IO ()
+ AI.CV.ImageProcessors: runTillKeyPressed :: Show a => IOProcessor () a -> IO ()
Files
- cv-combinators.cabal +4/−4
- src/IntegratedTest.hs +11/−23
cv-combinators.cabal view
@@ -1,5 +1,5 @@ name: cv-combinators-version: 0.1.2.2+version: 0.1.2.3 license: BSD3 maintainer: Noam Lewis <jones.noamle@gmail.com> bug-reports: mailto:jones.noamle@gmail.com@@ -23,12 +23,12 @@ library exposed-modules: AI.CV.ImageProcessors hs-Source-Dirs: src- build-depends: base >=4 && <5, HOpenCV >= 0.1.2.1, allocated-processor, vector-space+ build-depends: base >=4 && <5, HOpenCV >= 0.1.2.1, allocated-processor >= 0.0.2, vector-space ghc-options: -Wall executable test-cv-combinators hs-source-dirs: src- Build-Depends: base >=4 && <5, HOpenCV >= 0.1.2.1, allocated-processor, vector-space+ Build-Depends: base >=4 && <5, HOpenCV >= 0.1.2.1, allocated-processor >= 0.0.2, vector-space main-is: Test.hs Ghc-Options: -Wall Ghc-Prof-Options: -prof -auto-all @@ -36,7 +36,7 @@ executable test-cv-combinators2 hs-source-dirs: src- Build-Depends: base >=4 && <5, HOpenCV >= 0.1.2.1, allocated-processor, SDL, graphics-drawingcombinators, vector-space+ Build-Depends: base >=4 && <5, HOpenCV >= 0.1.2.1, allocated-processor >= 0.0.2, SDL, graphics-drawingcombinators, vector-space main-is: IntegratedTest.hs Ghc-Options: -Wall Ghc-Prof-Options: -prof -auto-all
src/IntegratedTest.hs view
@@ -11,7 +11,7 @@ import qualified AI.CV.OpenCV.CV as CV import qualified Control.Processor as Processor-import Control.Processor(DTime, DClock, scanlT, IOSource, IOProcessor)+import Control.Processor(scanlT, IOSource, IOProcessor, fir, trace, holdMaybe, revertAfterT) import AI.CV.OpenCV.CxCore(CvRect(..), CvSize(..)) import Data.VectorSpace((*^), zeroV, (^+^), Scalar, VectorSpace)@@ -20,6 +20,7 @@ import Control.Arrow import Control.Category import Data.Monoid+import Data.Maybe(listToMaybe) resX, resY :: Num a => a resX = 160@@ -53,30 +54,17 @@ --drawRects = arr (mconcat . drawCvRects) --fmap (mconcat . map drawCvRect) id -- where drawCvRects = map drawCvRect +type DTime = Double -clock :: IO Double -- = DClock Double+clock :: IO DTime -- = DClock Double clock = return 1 -- todo implement really in some module that wraps SDL, GLUT or whatever. --- todo: ins't this just an n-step past memory? generalize a bit and move to Processor package?-movingAverage :: Int -> ([(DTime, b)] -> c) -> (DTime, b) -> c -> IOSource a b -> IOProcessor a c-movingAverage n f initA initB p = (scanlT clock f' (take n . repeat $ initA, initB) p) >>> arr snd- where f' _ y2 dt (lastNSamps, _) = (nextSamps, f nextSamps )- where nextSamps = (dt, y2) : (tail lastNSamps) --- todo: this is a general function, perhaps move to a module?-averageV :: (Fractional (Scalar a), VectorSpace a) => [Scalar a] -> [a] -> a-averageV weights samps = ((1/n) *^) . foldr (^+^) zeroV $ zipWith (*^) weights samps- where n = fromIntegral (length weights)- - --- todo: this is a general function, perhaps move to Processor package?-movingCvRectAverage :: (Fractional (Scalar v), VectorSpace v) => [Scalar v] -> IOProcessor a [v] -> IOProcessor a v-movingCvRectAverage weights pIn = movingAverage (length weights) (averageV weights . map snd) (0, zeroV) zeroV pIn'- where pIn' = pIn >>> arr headOrZero- headOrZero [] = zeroV- headOrZero xs = head xs- main :: IO ()-main = Processor.runUntil (captureDev >>> resizer >>> avgRect faceDetect >>> arr drawCvRect >>> sdlWindow) () (const . return $ False)- where avgRect = movingCvRectAverage [2,1,1,0]- sdlWindow = GP.sdlWindow resX resY +--main = Processor.runUntil (captureDev >>> resizer >>> averageFace >>> arr drawCvRect >>> sdlWindow) () (const . return $ False)+main = IP.runTillKeyPressed (captureDev >>> resizer >>> (id &&& averageFace) >>> (second (arr return)) >>> IP.drawRects >>> IP.window 0)+ where averageFace = lastFace --fir [0.9,0.1] 1 clock lastFace+ lastFace = revertAfterT 5 zeroV . holdMaybe zeroV clock $ (faceDetect >>> arr listToMaybe)+ --sdlWindow = GP.sdlWindow resX resY + headOrZero [] = zeroV+ headOrZero (v:vs) = v