//----------------------------------------------------------------------------
// 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());
}
}
}