Skip to contents

Experimenting with computer vision and machine learning in R. This package exposes some of the available ‘OpenCV’ https://opencv.org/ algorithms, such as edge, body or face detection. These can either be applied to analyze static images, or to filter live video footage from a camera device.

CRAN_Status_BadgeCRAN RStudio mirror downloads

Installation

On Windows and MacOS, the package can be installed directoy from CRAN:

Install from source

To install from source on MacOS, you need to install the opencv library from homebrew:

brew install opencv

On Ubuntu or Fedora you need libopencv-dev or opencv-devel:

sudo apt-get install libopencv-dev

And then install the R bindings:

install.packages("opencv", type ="source")

Basic stuff:

Face recognition:

unconf<-ocv_read('https://jeroen.github.io/images/unconf18.jpg')faces<-ocv_face(unconf)ocv_write(faces, 'faces.jpg')

Or get the face location data:

facemask<-ocv_facemask(unconf)attr(facemask, 'faces')

Live Webcam Examples

Live face detection:

Edge detection:

Combine with Graphics

Replaces the background with a plot:

library(opencv)library(ggplot2)# get webcam sizetest<-ocv_picture()bitmap<-ocv_bitmap(test)width<-dim(bitmap)[2]height<-dim(bitmap)[3]png('bg.png', width =width, height =height)par(ask=FALSE)print(ggplot2::qplot(speed, dist, data =cars, geom =c("smooth", "point")))dev.off()bg<-ocv_read('bg.png')unlink('pg.png')ocv_video(function(input){mask<-ocv_mog2(input)return(ocv_copyto(input, bg, mask))})

Put your face in the plot:

# Overlay face filterocv_video(function(input){mask<-ocv_facemask(input)ocv_copyto(input, bg, mask)})

Live Face Survey

Go stand on the left if you’re a tidier

library(opencv)# get webcam sizetest<-ocv_picture()bitmap<-ocv_bitmap(test)width<-dim(bitmap)[2]height<-dim(bitmap)[3]# generates the plotmakeplot<-function(x){png('bg.png', width =width, height =height, res =96)on.exit(unlink('bg.png'))groups<-seq(0, width, length.out =4)left<-rep("left", sum(x<groups[2]))middle<-rep("middle", sum(x>=groups[2]&x<groups[3]))right<-rep("right", sum(x>=groups[3]))f<-factor(c(left, middle, right), levels =c('left', 'middle', 'right'), labels =c("Tidy!", "Whatever Works", "Base!"))color=I(c("#F1BB7B", "#FD6467", "#5B1A18"))plot(f, ylim =c(0, 5), main ="Are you a tidyer or baser?", col =color)dev.off()ocv_read('bg.png')}# overlays faces on the plotocv_video(function(input){mask<-ocv_facemask(input)faces<-attr(mask, 'faces')bg<-makeplot(faces$x)return(ocv_copyto(input, bg, mask))})
close