diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..176b8ff
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,8 @@
+Docker
+.git
+obj
+bin
+build
+.vs
+build*.ps1
+build*.sh
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8425f17
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+.vs
+build/
+bin/
+obj/
+*.lib
+*.so
+*.dll
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..1e8161c
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,6 @@
+cmake_minimum_required(VERSION 3.0)
+project(OpenCvSharpAutogen)
+SET(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "limited configs" FORCE)
+SET (CMAKE_CXX_STANDARD 11)
+
+add_subdirectory(OpenVinoOpenCvSharpExtern)
diff --git a/Docker/debian-buster-arm32v7-opencv/Dockerfile b/Docker/debian-buster-arm32v7-opencv/Dockerfile
new file mode 100644
index 0000000..1389507
--- /dev/null
+++ b/Docker/debian-buster-arm32v7-opencv/Dockerfile
@@ -0,0 +1,130 @@
+FROM mcr.microsoft.com/dotnet/core/runtime:3.1.0-buster-slim-arm32v7 AS dotnet-runtime
+
+ARG DOWNLOAD_LINK=https://download.01.org/opencv/2019/openvinotoolkit/R3/l_openvino_toolkit_runtime_raspbian_p_2019.3.334.tgz
+ARG INSTALL_DIR=/opt/intel/openvino
+ARG TEMP_DIR=/tmp/openvino_installer
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ ffmpeg \
+ libgdiplus \
+ libgdk3.0-cil \
+ wget && \
+ rm -rf /var/lib/apt/lists/*
+
+
+RUN mkdir -p $TEMP_DIR && \
+ mkdir -p $INSTALL_DIR && \
+ cd $TEMP_DIR && \
+ wget -c $DOWNLOAD_LINK && \
+ tar -xf l_openvino_toolkit_runtime_raspbian_p_*.tgz --strip 1 -C $INSTALL_DIR && \
+ rm -rf ${INSTALL_DIR}/opencv
+
+FROM dotnet-runtime as opencv-build
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ build-essential \
+ unzip \
+ cmake && \
+ rm -rf /var/lib/apt/lists/*
+
+ARG OPENCV_VERSION=4.1.2
+WORKDIR /opencvbuild
+
+RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
+ unzip ${OPENCV_VERSION}.zip && \
+ rm ${OPENCV_VERSION}.zip && \
+ mv opencv-${OPENCV_VERSION} opencv && \
+ wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
+ unzip ${OPENCV_VERSION}.zip && \
+ rm ${OPENCV_VERSION}.zip && \
+ mv opencv_contrib-${OPENCV_VERSION} opencv_contrib
+
+# Build OpenCV
+WORKDIR /opencvbuild/build
+RUN cmake \
+ -D OPENCV_EXTRA_MODULES_PATH=/opencvbuild/opencv_contrib/modules \
+ -D InferenceEngine_DIR=/opt/intel/openvino/deployment_tools/inference_engine/share \
+ -D CMAKE_INSTALL_PREFIX=/opencv/install \
+ -D CMAKE_BUILD_TYPE=RELEASE \
+ -D ENABLE_NEON=ON \
+ -D ENABLE_VFPV3=ON \
+ -D WITH_OPENMP=ON \
+ -D WITH_TBB=ON \
+ -D BUILD_TBB=ON \
+ -D WITH_VTK=OFF \
+ -D WITH_INF_ENGINE=ON \
+ -D BUILD_EXAMPLES=OFF \
+ -D BUILD_DOCS=OFF \
+ -D BUILD_PERF_TESTS=OFF \
+ -D BUILD_TESTS=OFF \
+ -D BUILD_JAVA=OFF \
+ -D BUILD_opencv_app=OFF \
+ -D BUILD_opencv_java=OFF \
+ -D BUILD_opencv_python=OFF \
+ -D BUILD_opencv_ts=OFF \
+ -D BUILD_opencv_js=OFF \
+ -D WITH_GSTREAMER=OFF \
+ -D OPENCV_ENABLE_NONFREE=ON \
+ ../opencv
+
+RUN make && \
+ make install
+
+
+# Build OpenVinoOpenCvSharp
+WORKDIR /OpenVinoOpenCvSharp
+COPY CMakeLists.txt .
+COPY OpenVinoOpenCvSharpExtern/ OpenVinoOpenCvSharpExtern/
+
+WORKDIR /OpenVinoOpenCvSharp/build/
+RUN cmake \
+ -D OpenCV_DIR=/opencvbuild/install/cmake \
+ -D InferenceEngine_DIR=/opt/intel/openvino/deployment_tools/inference_engine/share \
+ -D CMAKE_INSTALL_PREFIX=../install \
+ ..
+
+RUN make -j4 && \
+ make install
+
+
+FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/core/sdk:3.1.100-buster AS build
+WORKDIR /build
+
+COPY OpenVinoOpenCvSharp/OpenVinoOpenCvSharp.csproj OpenVinoOpenCvSharp/
+COPY PeopleDetectionOpenCV/PeopleDetectionOpenCV.csproj PeopleDetectionOpenCV/
+COPY Shared/Shared.csproj Shared/
+COPY FaceDetectionOpenVino/FaceDetectionOpenVino.csproj FaceDetectionOpenVino/
+
+RUN dotnet restore PeopleDetectionOpenCV/PeopleDetectionOpenCV.csproj
+RUN dotnet restore FaceDetectionOpenVino/FaceDetectionOpenVino.csproj
+
+COPY OpenVinoOpenCvSharp/ OpenVinoOpenCvSharp/
+COPY PeopleDetectionOpenCV/ PeopleDetectionOpenCV/
+COPY Shared/ Shared/
+COPY FaceDetectionOpenVino/ FaceDetectionOpenVino/
+
+WORKDIR /build/PeopleDetectionOpenCV
+RUN dotnet build -c Release
+
+WORKDIR /build/FaceDetectionOpenVino
+RUN dotnet build -c Release
+
+FROM build AS publish
+WORKDIR /build/PeopleDetectionOpenCV
+RUN dotnet publish --no-build -c Release -o /app/PeopleDetectionOpenCV/publish
+
+WORKDIR /build/FaceDetectionOpenVino
+RUN dotnet publish --no-build -c Release -o /app/FaceDetectionOpenVino/publish
+
+FROM dotnet-runtime as final
+WORKDIR /app
+COPY --from=opencv-build /opencvsharp/install/ /opt/opencv/
+COPY --from=opencv-build /OpenVinoOpenCvSharp/install/lib/libOpenVinoOpenCvSharpExtern.so /opt/
+
+ENV LD_LIBRARY_PATH=/opt:/opt/opencv/lib:/opt/intel/openvino/deployment_tools/inference_engine/lib/armv7l
+
+COPY --from=publish /app/ .
+
+# COPY PeopleDetectionOpenCV/run.sh .
+# RUN chmod a+x run.sh
+
+# ENTRYPOINT [ "./run.sh" ]
diff --git a/Docker/debian-buster-arm32v7-opencv/build.ps1 b/Docker/debian-buster-arm32v7-opencv/build.ps1
new file mode 100644
index 0000000..1a24ef9
--- /dev/null
+++ b/Docker/debian-buster-arm32v7-opencv/build.ps1
@@ -0,0 +1,5 @@
+$VERSION="1.0.0"
+
+docker buildx build --platform linux/arm/v7 -t "nrandell/arm-opencv-nick-builder:$VERSION" -f Dockerfile --push ../..
+
+
diff --git a/Docker/debian-buster-arm32v7/Dockerfile b/Docker/debian-buster-arm32v7/Dockerfile
new file mode 100644
index 0000000..18efdbe
--- /dev/null
+++ b/Docker/debian-buster-arm32v7/Dockerfile
@@ -0,0 +1,82 @@
+FROM mcr.microsoft.com/dotnet/core/runtime:3.1.0-buster-slim-arm32v7 AS dotnet-runtime
+
+ARG DOWNLOAD_LINK=https://download.01.org/opencv/2019/openvinotoolkit/R3/l_openvino_toolkit_runtime_raspbian_p_2019.3.334.tgz
+ARG INSTALL_DIR=/opt/intel/openvino
+ARG TEMP_DIR=/tmp/openvino_installer
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ ffmpeg \
+ libgdiplus \
+ libgdk3.0-cil \
+ wget && \
+ rm -rf /var/lib/apt/lists/*
+
+
+RUN mkdir -p $TEMP_DIR && \
+ mkdir -p $INSTALL_DIR && \
+ cd $TEMP_DIR && \
+ wget -c $DOWNLOAD_LINK && \
+ tar -xf l_openvino_toolkit_runtime_raspbian_p_*.tgz --strip 1 -C $INSTALL_DIR
+
+
+FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/core/sdk:3.1.100-buster AS build
+WORKDIR /build
+
+COPY OpenVinoOpenCvSharp/OpenVinoOpenCvSharp.csproj OpenVinoOpenCvSharp/
+COPY PeopleDetectionOpenCV/PeopleDetectionOpenCV.csproj PeopleDetectionOpenCV/
+COPY Shared/Shared.csproj Shared/
+COPY FaceDetectionOpenVino/FaceDetectionOpenVino.csproj FaceDetectionOpenVino/
+
+RUN dotnet restore PeopleDetectionOpenCV/PeopleDetectionOpenCV.csproj
+RUN dotnet restore FaceDetectionOpenVino/FaceDetectionOpenVino.csproj
+
+COPY OpenVinoOpenCvSharp/ OpenVinoOpenCvSharp/
+COPY PeopleDetectionOpenCV/ PeopleDetectionOpenCV/
+COPY Shared/ Shared/
+COPY FaceDetectionOpenVino/ FaceDetectionOpenVino/
+
+WORKDIR /build/PeopleDetectionOpenCV
+RUN dotnet build -c Release
+
+WORKDIR /build/FaceDetectionOpenVino
+RUN dotnet build -c Release
+
+FROM mcr.microsoft.com/dotnet/core/sdk:3.1.100-buster-arm32v7 as build-native-env
+
+COPY --from=dotnet-runtime /opt/intel/ /opt/intel/
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ build-essential \
+ cmake && \
+ rm -rf /var/lib/apt/lists/*
+
+WORKDIR /OpenVinoOpenCvSharp
+COPY CMakeLists.txt .
+COPY OpenVinoOpenCvSharpExtern/ OpenVinoOpenCvSharpExtern/
+
+WORKDIR /OpenVinoOpenCvSharp/build/
+RUN cmake \
+ -D OpenCV_DIR=/opt/intel/openvino/opencv/cmake \
+ -D CMAKE_INSTALL_PREFIX=../install \
+ ..
+
+RUN cmake --build . --target install --config Release
+
+
+FROM build AS publish
+WORKDIR /build/PeopleDetectionOpenCV
+RUN dotnet publish --no-build -c Release -o /app/PeopleDetectionOpenCV/publish
+
+WORKDIR /build/FaceDetectionOpenVino
+RUN dotnet publish --no-build -c Release -o /app/FaceDetectionOpenVino/publish
+
+FROM dotnet-runtime as final
+WORKDIR /app
+COPY --from=build-native-env /OpenVinoOpenCvSharp/install/lib/libOpenVinoOpenCvSharpExtern.so .
+
+COPY --from=publish /app/ .
+
+COPY PeopleDetectionOpenCV/run.sh .
+RUN chmod a+x run.sh
+
+ENTRYPOINT [ "./run.sh" ]
diff --git a/Docker/debian-buster-arm32v7/build.ps1 b/Docker/debian-buster-arm32v7/build.ps1
new file mode 100644
index 0000000..2538679
--- /dev/null
+++ b/Docker/debian-buster-arm32v7/build.ps1
@@ -0,0 +1,5 @@
+$VERSION="1.0.3"
+
+docker buildx build --platform linux/arm/v7 -t "nrandell/arm-nick-builder:$VERSION" -f Dockerfile --push ../..
+
+
diff --git a/Docker/ubuntu-18.04/Dockerfile b/Docker/ubuntu-18.04/Dockerfile
new file mode 100644
index 0000000..a82010a
--- /dev/null
+++ b/Docker/ubuntu-18.04/Dockerfile
@@ -0,0 +1,80 @@
+FROM ubuntu:18.04 as build-native-env
+
+ARG DOWNLOAD_LINK=http://registrationcenter-download.intel.com/akdlm/irc_nas/16057/l_openvino_toolkit_p_2019.3.376.tgz
+ARG INSTALL_DIR=/opt/intel/openvino
+ARG TEMP_DIR=/tmp/openvino_installer
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ wget \
+ cpio \
+ sudo \
+ lsb-release && \
+ rm -rf /var/lib/apt/lists/*
+RUN mkdir -p $TEMP_DIR && cd $TEMP_DIR && \
+ wget -c $DOWNLOAD_LINK && \
+ tar xf l_openvino_toolkit*.tgz && \
+ cd l_openvino_toolkit*
+
+RUN cd $TEMP_DIR && \
+ cd l_openvino_toolkit* && \
+ sed -i 's/decline/accept/g' silent.cfg && \
+ ./install.sh -s silent.cfg && \
+ rm -rf $TEMP_DIR
+
+RUN $INSTALL_DIR/install_dependencies/install_openvino_dependencies.sh
+
+WORKDIR /OpenVinoOpenCvSharp
+COPY CMakeLists.txt .
+COPY OpenVinoOpenCvSharpExtern/ OpenVinoOpenCvSharpExtern/
+
+WORKDIR /OpenVinoOpenCvSharp/build/
+RUN cmake \
+ -D OpenCV_DIR=/opt/intel/openvino/opencv/cmake \
+ -D CMAKE_INSTALL_PREFIX=../install \
+ ..
+
+RUN cmake --build . --target install --config Release
+
+FROM mcr.microsoft.com/dotnet/core/sdk:3.1.100-bionic AS build-dotnet-env
+WORKDIR /build
+
+COPY OpenVinoOpenCvSharp/OpenVinoOpenCvSharp.csproj OpenVinoOpenCvSharp/
+COPY PeopleDetectionOpenCV/PeopleDetectionOpenCV.csproj PeopleDetectionOpenCV/
+COPY Shared/Shared.csproj Shared/
+RUN dotnet restore PeopleDetectionOpenCV/PeopleDetectionOpenCV.csproj
+
+COPY OpenVinoOpenCvSharp/ OpenVinoOpenCvSharp/
+COPY PeopleDetectionOpenCV/ PeopleDetectionOpenCV/
+COPY Shared/ Shared/
+
+WORKDIR /build/PeopleDetectionOpenCV
+RUN dotnet build -c Release
+
+FROM build-dotnet-env AS publish
+RUN dotnet publish --no-build -c Release -o /app/publish
+
+FROM mcr.microsoft.com/dotnet/core/runtime:3.1.0-bionic AS dotnet-runtime
+
+RUN apt update
+RUN apt install -y --no-install-recommends software-properties-common
+RUN add-apt-repository -y ppa:jonathonf/ffmpeg-4
+RUN apt update
+RUN apt install -y --no-install-recommends ffmpeg
+
+WORKDIR /app
+COPY --from=build-native-env /opt/intel/ /opt/intel/
+RUN /opt/intel/openvino/install_dependencies/install_openvino_dependencies.sh
+
+RUN apt install -y --no-install-recommends libgdiplus
+RUN echo "deb http://ppa.launchpad.net/intel-opencl/intel-opencl/ubuntu bionic main" >/etc/apt/sources.list.d/intel-opencl.list
+RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B9732172C4830B8F
+RUN apt update
+RUN apt install -y intel-opencl-icd clinfo
+COPY --from=build-native-env /OpenVinoOpenCvSharp/install/lib/libOpenVinoOpenCvSharpExtern.so .
+
+
+COPY --from=publish /app/publish .
+
+COPY PeopleDetectionOpenCV/run.sh .
+RUN chmod a+x run.sh
+
+ENTRYPOINT [ "./run.sh" ]
diff --git a/Docker/ubuntu-18.04/build.ps1 b/Docker/ubuntu-18.04/build.ps1
new file mode 100644
index 0000000..1fe34e7
--- /dev/null
+++ b/Docker/ubuntu-18.04/build.ps1
@@ -0,0 +1,6 @@
+$VERSION="1.0.4"
+
+docker build -t "nrandell/nick-builder:$VERSION" -f Dockerfile ../..
+docker push "nrandell/nick-builder:$VERSION"
+
+
diff --git a/FaceDetectionOpenVino/FaceDetectionOpenVino.csproj b/FaceDetectionOpenVino/FaceDetectionOpenVino.csproj
new file mode 100644
index 0000000..6da3e88
--- /dev/null
+++ b/FaceDetectionOpenVino/FaceDetectionOpenVino.csproj
@@ -0,0 +1,15 @@
+
+
+
+ Exe
+ netcoreapp3.1
+ x64
+ enable
+
+
+
+
+
+
+
+
diff --git a/FaceDetectionOpenVino/InferenceEngineDetector.cs b/FaceDetectionOpenVino/InferenceEngineDetector.cs
new file mode 100644
index 0000000..03c75aa
--- /dev/null
+++ b/FaceDetectionOpenVino/InferenceEngineDetector.cs
@@ -0,0 +1,49 @@
+using OpenCvSharp;
+using OpenCvSharp.Dnn;
+using Shared;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+
+namespace FaceDetectionOpenVino
+{
+ public class InferenceEngineDetector : IDetector
+ {
+ public Net Net { get; }
+
+ public InferenceEngineDetector(string modelFile)
+ {
+ Net = CvDnn.ReadNet(modelFile, Path.ChangeExtension(modelFile, ".xml"));
+ //Net.SetPreferableBackend(Net.Backend.INFERENCE_ENGINE);
+ //Net.SetPreferableTarget(Net.Target.OPENCL_FP16);
+ Net.SetPreferableBackend(Net.Backend.OPENCV);
+ }
+
+ public Rectangle[] Detect(Mat mat, byte[] buffer)
+ {
+ var frameWidth = mat.Width;
+ var frameHeight = mat.Height;
+ using var blob = CvDnn.BlobFromImage(mat, 1.0, new OpenCvSharp.Size(300, 300), new OpenCvSharp.Scalar(104, 117, 123), false, false);
+ Net.SetInput(blob);
+ using var detections = Net.Forward();
+ using var detectionMat = new Mat(detections.Size(2), detections.Size(3), MatType.CV_32F, detections.Ptr(0));
+ var rectangles = new List();
+ for (var i = 0; i < detectionMat.Rows; i++)
+ {
+ var confidence = detectionMat.At(i, 2);
+ if (confidence > 0.7)
+ {
+ var left = (int)(detectionMat.At(i, 3) * frameWidth);
+ var top = (int)(detectionMat.At(i, 4) * frameHeight);
+ var right = (int)(detectionMat.At(i, 5) * frameWidth);
+ var bottom = (int)(detectionMat.At(i, 6) * frameHeight);
+
+ rectangles.Add(new Rectangle(left, top, right - left, bottom - top));
+ }
+ }
+
+ return rectangles.ToArray();
+ }
+
+ }
+}
diff --git a/FaceDetectionOpenVino/Program.cs b/FaceDetectionOpenVino/Program.cs
new file mode 100644
index 0000000..e646397
--- /dev/null
+++ b/FaceDetectionOpenVino/Program.cs
@@ -0,0 +1,126 @@
+using OpenCvSharp;
+using Shared;
+using System;
+using System.Diagnostics;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace FaceDetectionOpenVino
+{
+ internal static class Program
+ {
+ public static async Task Main(string[] args)
+ {
+ var path = Environment.GetEnvironmentVariable("PATH");
+ Environment.SetEnvironmentVariable("PATH", @"C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\inference_engine\bin\intel64\Release;C:\Program Files (x86)\IntelSWTools\openvino\opencv\bin;" + path);
+ WindowsLibraryLoader.Instance.AdditionalPaths.Add(@"C:\Users\nick\Source\Repos\OpenVinoOpenCvSharp\install\bin");
+ if (args.Length != 4)
+ {
+ Console.WriteLine("Usage: PersonDetection