opencv 4.10
This commit is contained in:
@@ -105,11 +105,13 @@ namespace Hawkeye.VisionBuilder.UI.Sources.Hawkeye
|
|||||||
var pointer = pinnedArray.AddrOfPinnedObject();
|
var pointer = pinnedArray.AddrOfPinnedObject();
|
||||||
|
|
||||||
|
|
||||||
Mat image = new Mat(_cameraSettings.ImageSettings.Lines, _cameraSettings.ImageSettings.SensorWidth,
|
|
||||||
|
Mat image = Mat.FromPixelData(_cameraSettings.ImageSettings.Lines, _cameraSettings.ImageSettings.SensorWidth,
|
||||||
MatType.CV_8UC1, pointer);
|
MatType.CV_8UC1, pointer);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var xCrop = _cameraSettings.ImageSettings.SensorWidth - _cameraSettings.ImageWidth -
|
var xCrop = _cameraSettings.ImageSettings.SensorWidth - _cameraSettings.ImageWidth -
|
||||||
_cameraSettings.OffsetX;
|
_cameraSettings.OffsetX;
|
||||||
|
|
||||||
|
|||||||
@@ -100,9 +100,9 @@ public class OpenCVBayerProcessor
|
|||||||
Mat greenCorrected = new Mat();
|
Mat greenCorrected = new Mat();
|
||||||
Mat redCorrected = new Mat();
|
Mat redCorrected = new Mat();
|
||||||
|
|
||||||
Mat blueLutMat = new Mat(1, 256, MatType.CV_8U, blueLut);
|
Mat blueLutMat = Mat.FromPixelData(1, 256, MatType.CV_8U, blueLut);
|
||||||
Mat greenLutMat = new Mat(1, 256, MatType.CV_8U, greenLut);
|
Mat greenLutMat = Mat.FromPixelData(1, 256, MatType.CV_8U, greenLut);
|
||||||
Mat redLutMat = new Mat(1, 256, MatType.CV_8U, redLut);
|
Mat redLutMat = Mat.FromPixelData(1, 256, MatType.CV_8U, redLut);
|
||||||
|
|
||||||
Cv2.LUT(channels[0], blueLutMat, blueCorrected);
|
Cv2.LUT(channels[0], blueLutMat, blueCorrected);
|
||||||
Cv2.LUT(channels[1], greenLutMat, greenCorrected);
|
Cv2.LUT(channels[1], greenLutMat, greenCorrected);
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\VisionBuilder.UI.Common\VisionBuilder.UI.Common.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
using OpenCvSharp;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Threading.Channels;
|
||||||
|
using VisionBuilder.UI.Common;
|
||||||
|
using VisionBuilder.UI.Common.Processing;
|
||||||
|
|
||||||
|
namespace Hawkeye.VisionBuilder.UI.Sources.Raspberry.Libcamera
|
||||||
|
{
|
||||||
|
public class LibcameraImageSource : IImageSource, IVisionBuilderModule
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<Mat> GetImage(CancellationToken token)
|
||||||
|
{
|
||||||
|
return await _imageChannel.Reader.ReadAsync(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InitializeModule()
|
||||||
|
{
|
||||||
|
Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] JpegHeader = new byte[] { 0xff, 0xd8 };
|
||||||
|
byte[] JpegFooter = new byte[] { 0xff, 0xd9 };
|
||||||
|
int ChunkSize = 1024;
|
||||||
|
|
||||||
|
ProcessStartInfo psi = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = "libcamera-vid",
|
||||||
|
Arguments = "--codec mjpeg -t0 --width 2028 --height 1520 --shutter 10000 --framerate 16 --awbgains 3.86,1.46 --nopreview -o -",
|
||||||
|
|
||||||
|
RedirectStandardOutput = true,
|
||||||
|
UseShellExecute = false
|
||||||
|
};
|
||||||
|
|
||||||
|
Channel<Mat> _imageChannel = Channel.CreateBounded<Mat>(new BoundedChannelOptions(1) { FullMode = BoundedChannelFullMode.DropOldest });
|
||||||
|
|
||||||
|
public void Start()
|
||||||
|
{
|
||||||
|
Thread th = new Thread(StartLoop);
|
||||||
|
th.IsBackground = true;
|
||||||
|
th.Start();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StartLoop()
|
||||||
|
{
|
||||||
|
using (Process process = Process.Start(psi))
|
||||||
|
using (BinaryReader br = new BinaryReader(process.StandardOutput.BaseStream))
|
||||||
|
{
|
||||||
|
|
||||||
|
byte[] imageBuffer = new byte[1024 * 1024];
|
||||||
|
|
||||||
|
|
||||||
|
// decode MJPEG buffer
|
||||||
|
var buff = br.ReadBytes(ChunkSize);
|
||||||
|
int frameId = 0;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
var imageStart = Find(buff, JpegHeader);
|
||||||
|
if (imageStart != -1)
|
||||||
|
{
|
||||||
|
var size = buff.Length - imageStart;
|
||||||
|
|
||||||
|
Array.Copy(buff, imageStart, imageBuffer, 0, size);
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
buff = br.ReadBytes(ChunkSize);
|
||||||
|
var imageEnd = Find(buff, JpegFooter);
|
||||||
|
if (imageEnd != -1)
|
||||||
|
{
|
||||||
|
var frame = new byte[size + imageEnd];
|
||||||
|
Array.Copy(imageBuffer, frame, size);
|
||||||
|
Array.Copy(buff, 0, frame, size, imageEnd);
|
||||||
|
// process frame
|
||||||
|
frameId++;
|
||||||
|
var decoded = Mat.ImDecode(frame);
|
||||||
|
|
||||||
|
_imageChannel.Writer.WriteAsync(decoded, CancellationToken.None);
|
||||||
|
|
||||||
|
// copy the leftover data to the start
|
||||||
|
Array.Copy(buff, imageEnd, buff, 0, buff.Length - imageEnd);
|
||||||
|
// fill the remainder of the buffer with new data and start over
|
||||||
|
var temp = br.ReadBytes(imageEnd);
|
||||||
|
Array.Copy(temp, 0, buff, buff.Length - imageEnd, temp.Length);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// copy all of the data to the imageBuffer
|
||||||
|
Array.Copy(buff, 0, imageBuffer, size, buff.Length);
|
||||||
|
size += buff.Length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("JPEG header not found.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
process.Kill();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int Find(byte[] buff, byte[] search)
|
||||||
|
{
|
||||||
|
// enumerate the buffer but don't overstep the bounds
|
||||||
|
for (int start = 0; start < buff.Length - search.Length; start++)
|
||||||
|
{
|
||||||
|
// we found the first character
|
||||||
|
if (buff[start] == search[0])
|
||||||
|
{
|
||||||
|
int next;
|
||||||
|
|
||||||
|
// traverse the rest of the bytes
|
||||||
|
for (next = 1; next < search.Length; next++)
|
||||||
|
{
|
||||||
|
// if we don't match, bail
|
||||||
|
if (buff[start + next] != search[next])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (next == search.Length)
|
||||||
|
return start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// not found
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Mat> GetImageAsync(CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return await _imageChannel.Reader.ReadAsync(cancellationToken);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,8 +31,8 @@
|
|||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="OpenCvSharp4" Version="4.6.0.20220608" />
|
<PackageReference Include="OpenCvSharp4" Version="4.10.0.20241108" />
|
||||||
<PackageReference Include="OpenCvSharp4.Extensions" Version="4.6.0.20220608" />
|
<PackageReference Include="OpenCvSharp4.Extensions" Version="4.10.0.20241108" />
|
||||||
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,8 @@ public class AnomalyAI: BaseOperation
|
|||||||
|
|
||||||
|
|
||||||
// black and white mask
|
// black and white mask
|
||||||
var mask = new Mat(30, 48, MatType.CV_8UC1, resultColor);
|
var mask = new Mat(30, 48, MatType.CV_8UC1);
|
||||||
|
mask.SetArray(resultColor);
|
||||||
|
|
||||||
var maskResized = mask.Resize(new Size(currentImage.ImageData.Width, currentImage.ImageData.Height));
|
var maskResized = mask.Resize(new Size(currentImage.ImageData.Width, currentImage.ImageData.Height));
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,8 @@ public class BackgroundSeparationModelOperation:BaseOperation,IHaveOrigin
|
|||||||
|
|
||||||
var bytes= MatToBytes(img);
|
var bytes= MatToBytes(img);
|
||||||
var responseBytes = _transfer.TransferData(ModelName, 3, bytes);
|
var responseBytes = _transfer.TransferData(ModelName, 3, bytes);
|
||||||
var response = new Mat(img.Rows, img.Cols, MatType.CV_8UC1, responseBytes);
|
var response = new Mat(img.Rows, img.Cols, MatType.CV_8UC1);
|
||||||
|
response.SetArray(responseBytes);
|
||||||
|
|
||||||
var contours = response.Threshold(128, 255, ThresholdTypes.Binary).FindContoursAsArray(RetrievalModes.List, ContourApproximationModes.ApproxSimple);
|
var contours = response.Threshold(128, 255, ThresholdTypes.Binary).FindContoursAsArray(RetrievalModes.List, ContourApproximationModes.ApproxSimple);
|
||||||
|
|
||||||
|
|||||||
@@ -78,8 +78,9 @@ public class Color128HalfOperation:BaseOperation
|
|||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
// black and white mask
|
// black and white mask
|
||||||
var mask = new Mat(_imageHeight, _imageWidth, MatType.CV_8UC1, resultColor);
|
var mask = new Mat(_imageHeight, _imageWidth, MatType.CV_8UC1);
|
||||||
|
mask.SetArray(resultColor);
|
||||||
|
|
||||||
var maskResized = mask.Resize(new Size(currentImage.ImageData.Width, currentImage.ImageData.Height));
|
var maskResized = mask.Resize(new Size(currentImage.ImageData.Width, currentImage.ImageData.Height));
|
||||||
|
|
||||||
context.ActiveImage = new HawkeyeImage() {ImageData = maskResized};
|
context.ActiveImage = new HawkeyeImage() {ImageData = maskResized};
|
||||||
|
|||||||
@@ -111,8 +111,9 @@ public abstract class ColorAIOperation:BaseOperation
|
|||||||
|
|
||||||
|
|
||||||
// black and white mask
|
// black and white mask
|
||||||
var mask = new Mat(_imageHeight, _imageWidth, MatType.CV_8UC1, resultColor);
|
var mask = new Mat(_imageHeight, _imageWidth, MatType.CV_8UC1);
|
||||||
|
mask.SetArray(resultColor);
|
||||||
|
|
||||||
var maskResized = mask.Resize(new Size(currentImage.ImageData.Width, currentImage.ImageData.Height));
|
var maskResized = mask.Resize(new Size(currentImage.ImageData.Width, currentImage.ImageData.Height));
|
||||||
|
|
||||||
context.ActiveImage = new HawkeyeImage() { ImageData = maskResized };
|
context.ActiveImage = new HawkeyeImage() { ImageData = maskResized };
|
||||||
|
|||||||
@@ -129,7 +129,8 @@ public class ModelAIOperation: BaseOperation
|
|||||||
|
|
||||||
|
|
||||||
// black and white mask
|
// black and white mask
|
||||||
var mask = new Mat(outputSizeArray[0], outputSizeArray[1], MatType.CV_8UC1, resultColor);
|
var mask = new Mat(outputSizeArray[0], outputSizeArray[1], MatType.CV_8UC1);
|
||||||
|
mask.SetArray(resultColor);
|
||||||
|
|
||||||
var maskResized = mask.Resize(new Size(currentImage.ImageData.Width, currentImage.ImageData.Height));
|
var maskResized = mask.Resize(new Size(currentImage.ImageData.Width, currentImage.ImageData.Height));
|
||||||
|
|
||||||
|
|||||||
@@ -105,7 +105,8 @@ public class RawModelAIOperation: BaseOperation
|
|||||||
|
|
||||||
|
|
||||||
var outputSizeArray = outputSize.Select(Convert.ToInt32).ToArray();
|
var outputSizeArray = outputSize.Select(Convert.ToInt32).ToArray();
|
||||||
var mask = new Mat(outputSizeArray[0], outputSizeArray[1], MatType.CV_8UC1, resultColor);
|
var mask = new Mat(outputSizeArray[0], outputSizeArray[1], MatType.CV_8UC1);
|
||||||
|
mask.SetArray(resultColor);
|
||||||
|
|
||||||
var maskResized = mask.Resize(new Size(currentImage.ImageData.Width, currentImage.ImageData.Height));
|
var maskResized = mask.Resize(new Size(currentImage.ImageData.Width, currentImage.ImageData.Height));
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class SkeletonOperation:BaseOperation
|
|||||||
if(!CheckGrayscale(context)) return;
|
if(!CheckGrayscale(context)) return;
|
||||||
|
|
||||||
|
|
||||||
var skeleton = new Mat(context.ActiveImage.ImageData.Size(), MatType.CV_8UC1, 0);
|
var skeleton = new Mat(context.ActiveImage.ImageData.Size(), MatType.CV_8UC1, Scalar.All(0));
|
||||||
var temp = context.ActiveImage.ImageData.Clone();
|
var temp = context.ActiveImage.ImageData.Clone();
|
||||||
var element = Cv2.GetStructuringElement(MorphShapes.Cross, new OpenCvSharp.Size(3, 3));
|
var element = Cv2.GetStructuringElement(MorphShapes.Cross, new OpenCvSharp.Size(3, 3));
|
||||||
var image = context.ActiveImage.ImageData.Clone();
|
var image = context.ActiveImage.ImageData.Clone();
|
||||||
|
|||||||
@@ -49,13 +49,13 @@ public class GaborFilterOperation : BaseOperation
|
|||||||
}
|
}
|
||||||
|
|
||||||
var image = context.ActiveImage.ImageData;
|
var image = context.ActiveImage.ImageData;
|
||||||
var newimage = new Mat(image.Size(), image.Type(), 0);
|
var newimage = new Mat(image.Size(), image.Type(), Scalar.All(0));
|
||||||
|
|
||||||
foreach (double theta in steps)
|
foreach (double theta in steps)
|
||||||
{
|
{
|
||||||
var kernel = Cv2.GetGaborKernel(new Size(KSize, KSize), Sigma, theta, Lambda, Gamma, 0, MatType.CV_64F);
|
var kernel = Cv2.GetGaborKernel(new Size(KSize, KSize), Sigma, theta, Lambda, Gamma, 0, MatType.CV_64F);
|
||||||
kernel /= 1 * kernel.Sum().Val0;
|
kernel /= 1 * kernel.Sum().Val0;
|
||||||
var filtered = new Mat(image.Size(), image.Type(), 0);
|
var filtered = new Mat(image.Size(), image.Type(), Scalar.All(0));
|
||||||
Cv2.Filter2D(image, filtered, -1, kernel);
|
Cv2.Filter2D(image, filtered, -1, kernel);
|
||||||
Cv2.Max(newimage, filtered, newimage);
|
Cv2.Max(newimage, filtered, newimage);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ public class ImageSizeProportionOperation:BaseOperation
|
|||||||
|
|
||||||
context.ActiveImage = new HawkeyeImage()
|
context.ActiveImage = new HawkeyeImage()
|
||||||
{
|
{
|
||||||
ImageData = context.ActiveImage!.ImageData.Resize(Size.Zero, Width, Height)
|
ImageData = context.ActiveImage!.ImageData.Resize(new Size(0,0), Width, Height)
|
||||||
};
|
};
|
||||||
|
|
||||||
Status = $"Image resized to {context.ActiveImage.ImageData.Width}x{context.ActiveImage.ImageData.Height}";
|
Status = $"Image resized to {context.ActiveImage.ImageData.Width}x{context.ActiveImage.ImageData.Height}";
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class InvertOperation:BaseOperation
|
|||||||
if (!CheckImageExists(context)) return;
|
if (!CheckImageExists(context)) return;
|
||||||
|
|
||||||
|
|
||||||
var res = new Mat(context.ActiveImage.ImageData.Size(), context.ActiveImage.ImageData.Type(), 0);
|
var res = new Mat(context.ActiveImage.ImageData.Size(), context.ActiveImage.ImageData.Type(), Scalar.All(0));
|
||||||
Cv2.BitwiseNot(context.ActiveImage.ImageData, res);
|
Cv2.BitwiseNot(context.ActiveImage.ImageData, res);
|
||||||
context.ActiveImage = new HawkeyeImage()
|
context.ActiveImage = new HawkeyeImage()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public class TakeBiggestOperation : BaseOperation
|
|||||||
var largestContour = contours.OrderByDescending(c => Cv2.ContourArea(c)).First();
|
var largestContour = contours.OrderByDescending(c => Cv2.ContourArea(c)).First();
|
||||||
var mask = Mat.Zeros(image.Size(), MatType.CV_8UC1).ToMat();
|
var mask = Mat.Zeros(image.Size(), MatType.CV_8UC1).ToMat();
|
||||||
|
|
||||||
Cv2.DrawContours(mask, new[] {largestContour}, -1, 255, -1);
|
Cv2.DrawContours(mask, new[] {largestContour}, -1, Scalar.All(255), -1);
|
||||||
|
|
||||||
context.ActiveImage = new HawkeyeImage()
|
context.ActiveImage = new HawkeyeImage()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class DistanceTransformOperation:BaseOperation
|
|||||||
|
|
||||||
Cv2.MinMaxLoc(distance, out double minVal, out var maxVal);
|
Cv2.MinMaxLoc(distance, out double minVal, out var maxVal);
|
||||||
// clamp the distance transform to 0-255
|
// clamp the distance transform to 0-255
|
||||||
Cv2.Normalize(distance, res, 0, maxVal, NormTypes.MinMax, MatType.CV_8UC1);
|
Cv2.Normalize(distance, res, 0, maxVal, NormTypes.MinMax, (int)MatType.CV_8UC1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="AutoCompleteMenu-ScintillaNET" Version="2.1.0" />
|
<PackageReference Include="AutoCompleteMenu-ScintillaNET" Version="2.1.0" />
|
||||||
<PackageReference Include="MathNet.Numerics" Version="5.0.0" />
|
<PackageReference Include="MathNet.Numerics" Version="5.0.0" />
|
||||||
<PackageReference Include="OpenCvSharp4" Version="4.6.0.20220608" />
|
<PackageReference Include="OpenCvSharp4" Version="4.10.0.20241108" />
|
||||||
<PackageReference Include="OpenCvSharp4.Extensions" Version="4.6.0.20220608" />
|
<PackageReference Include="OpenCvSharp4.Extensions" Version="4.10.0.20241108" />
|
||||||
<PackageReference Include="OpenCvSharp4.runtime.win" Version="4.6.0.20220608" />
|
<PackageReference Include="OpenCvSharp4.runtime.win" Version="4.10.0.20241108" />
|
||||||
<PackageReference Include="Scintilla.NET" Version="5.3.2.7" />
|
<PackageReference Include="Scintilla.NET" Version="5.3.2.7" />
|
||||||
<PackageReference Include="WindowsAPICodePack" Version="8.0.6" />
|
<PackageReference Include="WindowsAPICodePack" Version="8.0.6" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
@@ -16,13 +16,12 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MudBlazor" Version="8.0.0" />
|
<PackageReference Include="MudBlazor" Version="8.0.0" />
|
||||||
<PackageReference Include="Ninject.Extensions.ChildKernel" Version="3.3.0" />
|
<PackageReference Include="Ninject.Extensions.ChildKernel" Version="3.3.0" />
|
||||||
<PackageReference Include="OpenCvSharp4.runtime.linux-arm" Version="4.13.0.20260318" />
|
<PackageReference Include="OpenCvSharp4.runtime.win" Version="4.10.0.20241108" />
|
||||||
<PackageReference Include="OpenCvSharp4.runtime.win" Version="4.6.0.20220608" />
|
<PackageReference Include="swety.OpenCvSharp4.runtime.linux-arm64" Version="4.10.0.20241108" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\framework\Inspectron.Settings\Inspectron.Settings.csproj" />
|
<ProjectReference Include="..\framework\Inspectron.Settings\Inspectron.Settings.csproj" />
|
||||||
<ProjectReference Include="..\Hawkeye.VisionBuilder.UI.Sources.Emulation\Hawkeye.VisionBuilder.UI.Sources.Emulation.csproj" />
|
|
||||||
<ProjectReference Include="..\VisionBuilder.UI.Camera\VisionBuilder.UI.Camera.csproj" />
|
<ProjectReference Include="..\VisionBuilder.UI.Camera\VisionBuilder.UI.Camera.csproj" />
|
||||||
<ProjectReference Include="..\VisionBuilder.UI.Common\VisionBuilder.UI.Common.csproj" />
|
<ProjectReference Include="..\VisionBuilder.UI.Common\VisionBuilder.UI.Common.csproj" />
|
||||||
<ProjectReference Include="..\VisionBuilder.UI.Console\VisionBuilder.UI.Console.csproj" />
|
<ProjectReference Include="..\VisionBuilder.UI.Console\VisionBuilder.UI.Console.csproj" />
|
||||||
|
|||||||
13
VisionBuilder.UI.Blazor.Uno/dotnet-tools.json
Normal file
13
VisionBuilder.UI.Blazor.Uno/dotnet-tools.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"isRoot": true,
|
||||||
|
"tools": {
|
||||||
|
"dotnet-ef": {
|
||||||
|
"version": "10.0.5",
|
||||||
|
"commands": [
|
||||||
|
"dotnet-ef"
|
||||||
|
],
|
||||||
|
"rollForward": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MudBlazor" Version="8.0.0" />
|
<PackageReference Include="MudBlazor" Version="8.0.0" />
|
||||||
<PackageReference Include="OpenCvSharp4" Version="4.6.0.20220608" />
|
<PackageReference Include="OpenCvSharp4" Version="4.10.0.20241108" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Hawkeye.VisionBuilder.UI.Sources.Emulation;
|
using Hawkeye.VisionBuilder.UI.Sources.Emulation;
|
||||||
using Hawkeye.VisionBuilder.UI.Sources.Hawkeye;
|
using Hawkeye.VisionBuilder.UI.Sources.Hawkeye;
|
||||||
|
using Hawkeye.VisionBuilder.UI.Sources.Raspberry.Libcamera;
|
||||||
using Inspectron.Camera.UEye;
|
using Inspectron.Camera.UEye;
|
||||||
using Ninject;
|
using Ninject;
|
||||||
using Ninject.Extensions.ChildKernel;
|
using Ninject.Extensions.ChildKernel;
|
||||||
@@ -33,6 +34,9 @@ public static class ModuleExtensions
|
|||||||
case CameraSettings.EImageSource.IDS:
|
case CameraSettings.EImageSource.IDS:
|
||||||
kernel.Bind<IImageSource, IVisionBuilderModule>().To<IDSImageSource>().InSingletonScope();
|
kernel.Bind<IImageSource, IVisionBuilderModule>().To<IDSImageSource>().InSingletonScope();
|
||||||
break;
|
break;
|
||||||
|
case CameraSettings.EImageSource.Libcamera:
|
||||||
|
kernel.Bind<IImageSource, IVisionBuilderModule>().To<LibcameraImageSource>().InSingletonScope();
|
||||||
|
break;
|
||||||
case CameraSettings.EImageSource.Basler:
|
case CameraSettings.EImageSource.Basler:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
<ProjectReference Include="..\Hawkeye.VisionBuilder.UI.Sources.Emulation\Hawkeye.VisionBuilder.UI.Sources.Emulation.csproj" />
|
<ProjectReference Include="..\Hawkeye.VisionBuilder.UI.Sources.Emulation\Hawkeye.VisionBuilder.UI.Sources.Emulation.csproj" />
|
||||||
<ProjectReference Include="..\Hawkeye.VisionBuilder.UI.Sources.Hawkeye\Hawkeye.VisionBuilder.UI.Sources.Hawkeye.csproj" />
|
<ProjectReference Include="..\Hawkeye.VisionBuilder.UI.Sources.Hawkeye\Hawkeye.VisionBuilder.UI.Sources.Hawkeye.csproj" />
|
||||||
<ProjectReference Include="..\Hawkeye.VisionBuilder.UI.Sources.IDS\Hawkeye.VisionBuilder.UI.Sources.IDS.csproj" />
|
<ProjectReference Include="..\Hawkeye.VisionBuilder.UI.Sources.IDS\Hawkeye.VisionBuilder.UI.Sources.IDS.csproj" />
|
||||||
|
<ProjectReference Include="..\Hawkeye.VisionBuilder.UI.Sources.Raspberry.Libcamera\Hawkeye.VisionBuilder.UI.Sources.Raspberry.Libcamera.csproj" />
|
||||||
<ProjectReference Include="..\VisionBuilder.UI.Common\VisionBuilder.UI.Common.csproj" />
|
<ProjectReference Include="..\VisionBuilder.UI.Common\VisionBuilder.UI.Common.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ public class CameraSettings : ISettings
|
|||||||
Hawkeye,
|
Hawkeye,
|
||||||
IDS,
|
IDS,
|
||||||
Basler,
|
Basler,
|
||||||
|
Libcamera
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
||||||
<PackageReference Include="Ninject" Version="3.3.6" />
|
<PackageReference Include="Ninject" Version="3.3.6" />
|
||||||
<PackageReference Include="Ninject.Extensions.ChildKernel" Version="3.3.0" />
|
<PackageReference Include="Ninject.Extensions.ChildKernel" Version="3.3.0" />
|
||||||
<PackageReference Include="OpenCvSharp4" Version="4.6.0.20220608" />
|
<PackageReference Include="OpenCvSharp4" Version="4.10.0.20241108" />
|
||||||
<PackageReference Include="Serilog" Version="4.3.0" />
|
<PackageReference Include="Serilog" Version="4.3.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 17
|
# Visual Studio Version 18
|
||||||
VisualStudioVersion = 17.13.35931.197
|
VisualStudioVersion = 18.3.11520.95 d18.3
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.UI.Common", "VisionBuilder.UI.Common\VisionBuilder.UI.Common.csproj", "{5AFF312A-EF5F-49ED-BF54-5AC69F7BEC03}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.UI.Common", "VisionBuilder.UI.Common\VisionBuilder.UI.Common.csproj", "{5AFF312A-EF5F-49ED-BF54-5AC69F7BEC03}"
|
||||||
EndProject
|
EndProject
|
||||||
@@ -106,6 +106,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.UI.Blazor", "
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.UI.Blazor.Uno", "VisionBuilder.UI.Blazor.Uno\VisionBuilder.UI.Blazor.Uno.csproj", "{9AE35B63-607E-4009-9FE6-3DF2CD98071F}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.UI.Blazor.Uno", "VisionBuilder.UI.Blazor.Uno\VisionBuilder.UI.Blazor.Uno.csproj", "{9AE35B63-607E-4009-9FE6-3DF2CD98071F}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hawkeye.VisionBuilder.UI.Sources.Raspberry.Libcamera", "Hawkeye.VisionBuilder.UI.Sources.Raspberry.Libcamera\Hawkeye.VisionBuilder.UI.Sources.Raspberry.Libcamera.csproj", "{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -570,6 +572,18 @@ Global
|
|||||||
{9AE35B63-607E-4009-9FE6-3DF2CD98071F}.Release|x64.Build.0 = Release|Any CPU
|
{9AE35B63-607E-4009-9FE6-3DF2CD98071F}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{9AE35B63-607E-4009-9FE6-3DF2CD98071F}.Release|x86.ActiveCfg = Release|Any CPU
|
{9AE35B63-607E-4009-9FE6-3DF2CD98071F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{9AE35B63-607E-4009-9FE6-3DF2CD98071F}.Release|x86.Build.0 = Release|Any CPU
|
{9AE35B63-607E-4009-9FE6-3DF2CD98071F}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@@ -608,6 +622,7 @@ Global
|
|||||||
{AD3BC36E-8FC9-4A13-AD6B-606325AFF291} = {F3414823-B70E-435E-B4EA-80ABF4371449}
|
{AD3BC36E-8FC9-4A13-AD6B-606325AFF291} = {F3414823-B70E-435E-B4EA-80ABF4371449}
|
||||||
{0C14CF80-D743-4809-9B9C-2A096FEA2E06} = {FA674B5A-3394-926C-2B1E-70E5B00E4A5C}
|
{0C14CF80-D743-4809-9B9C-2A096FEA2E06} = {FA674B5A-3394-926C-2B1E-70E5B00E4A5C}
|
||||||
{9AE35B63-607E-4009-9FE6-3DF2CD98071F} = {F3414823-B70E-435E-B4EA-80ABF4371449}
|
{9AE35B63-607E-4009-9FE6-3DF2CD98071F} = {F3414823-B70E-435E-B4EA-80ABF4371449}
|
||||||
|
{FAD15887-EFB2-4FA5-8BD9-586C1DB2B0BE} = {D05689E3-04C6-4E3B-ACA7-3F4507CED4CC}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {3CE42AE5-D79F-4E97-A246-AA8FD228B677}
|
SolutionGuid = {3CE42AE5-D79F-4E97-A246-AA8FD228B677}
|
||||||
|
|||||||
Reference in New Issue
Block a user