//---------------------------------------------------------------------------- // Copyright (C) 2004-2021 by EMGU Corporation. All rights reserved. //---------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; using Emgu.CV.Cuda; using Emgu.CV.Dnn; using Emgu.CV.ML; using Xamarin.Forms; namespace Emgu.CV.XamarinForms { public class AboutPage : ContentPage { public AboutPage() { String lineBreak = "
"; String openclTxt = String.Format("Has OpenCL: {0}", CvInvoke.HaveOpenCL); if (CvInvoke.HaveOpenCL) { openclTxt = String.Format("{0}{1}Use OpenCL: {2}{1}{1}", openclTxt, lineBreak, CvInvoke.UseOpenCL, CvInvoke.OclGetPlatformsSummary()); } String cudaTxt = String.Format("Has CUDA: {0}", CudaInvoke.HasCuda); if (CudaInvoke.HasCuda) { cudaTxt = String.Format("{0}{1}{1}", cudaTxt, lineBreak, CudaInvoke.GetCudaDevicesSummary()); } var openCVConfigDict = CvInvoke.ConfigDict; bool haveDNN = (openCVConfigDict["HAVE_OPENCV_DNN"] != 0); String dnnText; if (haveDNN) { var dnnBackends = DnnInvoke.AvailableBackends; List dnnBackendsText = new List(); foreach (var dnnBackend in dnnBackends) { dnnBackendsText.Add(String.Format("

{0} - {1}

", dnnBackend.Backend, dnnBackend.Target)); } dnnText = String.Join("", dnnBackendsText.ToArray()); } else { dnnText = "DNN not available on this platform"; } bool haveVideoio = (openCVConfigDict["HAVE_OPENCV_VIDEOIO"] != 0); String osDescription = Emgu.Util.Platform.OperationSystem.ToString(); String parallelText; List parallelBackendText = new List(); foreach (var parallelBackend in CvInvoke.AvailableParallelBackends) { parallelBackendText.Add(String.Format("

{0}

", parallelBackend)); } parallelText = String.Join("", parallelBackendText.ToArray()); String tesseractText; String tesseractVersion = Emgu.CV.OCR.Tesseract.VersionString; if (tesseractVersion.Length == 0) { tesseractText = "Not Built"; } else { tesseractText = String.Format("Version: {0}", tesseractVersion); } Content = new WebView() { WidthRequest = 1000, HeightRequest = 1000, Source = new HtmlWebViewSource() { Html = @"

Emgu CV Examples

Visit our website

Email Support

OpenCL Info

" + openclTxt + @"

Cuda Info

" + cudaTxt + @"

OS:

" + osDescription + @"

OS Architecture:

" + RuntimeInformation.OSArchitecture + @"

Framework Description:

" + RuntimeInformation.FrameworkDescription + @"

Process Architecture:

" + RuntimeInformation.ProcessArchitecture + @"

Available Parallel Backends:

" + parallelText + @"

Dnn Backends:

" + dnnText + @"

Capture Backends (VideoCapture from device):

" + (haveVideoio ? GetBackendInfo(CvInvoke.Backends) : "Videoio backend not supported.") + @"

Stream Backends (VideoCapture from file/Stream):

" + (haveVideoio ? GetBackendInfo(CvInvoke.StreamBackends) : "Videoio backend not supported.") + @"

VideoWriter Backends:

" + (haveVideoio ? GetBackendInfo(CvInvoke.WriterBackends) : "Videoio backend not supported.") + @"

Tesseract OCR:

" + tesseractText + @"

Build Info

" } }; } private static String GetBackendInfo(Backend[] backends) { List backendsText = new List(); foreach (var backend in backends) { backendsText.Add(String.Format("

{0} - {1}

", backend.ID, backend.Name)); } return String.Join("", backendsText.ToArray()); } } }