Last updated: 2026๋ 1์
Accord.NET ๋์: VisioForge .Net SDK ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์ด๋
์์นด์ด๋ธ๋ Accord.NET์ ์ต์ .NET 6-10 ๋์์ผ๋ก ๊ต์ฒด
Accord.NET(Accord.Video, Accord.Vision, Accord.MachineLearning)์์ ์ต์ .NET 6-10 ๋์์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ C# ๊ฐ๋ฐ์
์ Accord.NET์ ๊ต์ฒดํด์ผ ํ๋๊ฐ?
Accord.NET์ 2015๋ ์ AForge.NET ์์ค ์ฝ๋๋ฅผ ํตํฉํ๊ณ ๋จธ์ ๋ฌ๋, ํต๊ณ, ์ถ๊ฐ ์ปดํจํฐ ๋น์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ์ฅํ์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ ํ์ฌ GitHub์์ ์์นด์ด๋ธ๋์ด ํ๋ฐํ ์ ์ง๋ณด์๊ฐ ์ด๋ฃจ์ด์ง์ง ์๊ณ ์์ต๋๋ค. .NET 6-10์ฉ Accord.NET ๋์ฒดํ์ด๋ ๋์์ ์ฐพ๊ณ ์๋ค๋ฉด, ์ด ๊ฐ์ด๋๊ฐ ๋ชจ๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ฒฝ๋ก๋ฅผ ๋ค๋ฃน๋๋ค.
| ์ํ | ์ํฅ |
|---|---|
| ํ๋ก์ ํธ ์์นด์ด๋ธ๋จ | ๋ฒ๊ทธ ์์ , ๋ณด์ ํจ์น ๋๋ ์ ๋ฐ์ดํธ ์์ |
| ๋ ๊ฑฐ์ .NET | .NET Framework๋ง ์ง์ โ .NET 6, 8, 9, 10 ์ง์ ์์ |
| ๊ตฌ์ ML | ML.NET, TensorFlow.NET, ONNX Runtime ์ด์ ๊ธฐ์ |
| AForge ๋น๋์ค ์ฝ๋ | ๋น๋์ค ์บก์ฒ์ ๋์ผํ ํ๊ธฐ๋ AForge.Video ๋ด๋ถ ์ฝ๋ ์ฌ์ฉ |
| Windows ์ ์ฉ | DirectShow ๊ธฐ๋ฐ ๋น๋์ค, ํฌ๋ก์ค ํ๋ซํผ ์ง์ ์์ |
| ๋ณด์ | ์ด๋ฏธ์ง/๋น๋์ค ์ฒ๋ฆฌ์ ๋ฏธํจ์น ์ทจ์ฝ์ |
๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต
Accord.NET์ ์ธ ๊ฐ์ง ์์ญ์ ๋ค๋ค์ต๋๋ค. ๊ฐ๊ฐ ๋ค๋ฅธ ์ต์ ์คํ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค:
| Accord.NET ์์ญ | ์ต์ ๋์ฒด |
|---|---|
| ๋น๋์ค ์บก์ฒ (Accord.Video) | VisioForge Video Capture SDK .Net |
| ์ปดํจํฐ ๋น์ (Accord.Vision, Accord.Imaging) | VisioForge .Net SDK (๋ด์ฅ OpenCV 4.11 / DLib ๊ฐ์ง๊ธฐ) ๋๋ ๋ ๋ฆฝํ OpenCvSharp |
| ๋จธ์ ๋ฌ๋ (Accord.MachineLearning, Accord.Neuro) | ML.NET ๋๋ ONNX Runtime |
๋น๋์ค ์บก์ฒ ๋ง์ด๊ทธ๋ ์ด์ : Accord.Video โ VisioForge
Accord.Video๋ ๋ณธ์ง์ ์ผ๋ก AForge.Video์ ์ฝ๊ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ํ ๊ฒ์ ๋๋ค. Accord.NET์ `VideoCaptureDevice`, `MJPEGStream` ๋๋ `ScreenCaptureStream`์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, .NET 6-10์์ ์ต์ C# ์น์บ ์บก์ฒ, RTSP ์คํธ๋ฆฌ๋ฐ, ํ๋ฉด ๋ นํ๋ฅผ ์ํด VisioForge Video Capture SDK๋ก ๊ต์ฒดํ์ธ์.
ํด๋์ค ๋งคํ
| Accord.Video ํด๋์ค | VisioForge ๋์ฒด |
|---|---|
| `VideoCaptureDevice` | `VideoCaptureCoreX` + `VideoCaptureDeviceSourceSettings` |
| `MJPEGStream` | `VideoCaptureCoreX` + `RTSPSourceSettings` |
| `ScreenCaptureStream` | `VideoCaptureCoreX` + `ScreenCaptureSourceSettings` |
| `FileVideoSource` | `MediaPlayerCoreX` ๋๋ `VideoEditCoreX` |
| `NewFrameEventArgs` | `OnVideoFrameBuffer` ์ด๋ฒคํธ |
C# ๋น๋์ค ์บก์ฒ ์์
Accord.NET โ ์น์บ ์บก์ฒ (์ด์ )
C#var videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
var videoSource = new VideoCaptureDevice(videoDevices[0].MonikerString);
videoSource.NewFrame += (s, e) =>
{
pictureBox.Image = (Bitmap)e.Frame.Clone();
};
videoSource.Start();VisioForge โ ์น์บ ์บก์ฒ (์ดํ)
C#var capture = new VideoCaptureCoreX(videoView);
var devices = await DeviceEnumerator.Shared.VideoSourcesAsync();
capture.Video_Source = new VideoCaptureDeviceSourceSettings(devices[0]);
capture.Outputs_Add(new MP4Output("recording.mp4"), true);
await capture.StartAsync();์ปดํจํฐ ๋น์ ๋ง์ด๊ทธ๋ ์ด์ : Accord.Vision โ VisioForge / OpenCvSharp
VisioForge .Net SDK์๋ OpenCV 4.11๊ณผ DLib ๊ธฐ๋ฐ์ ๋ด์ฅ ์ปดํจํฐ ๋น์ ๋ธ๋ก์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ค์ VisioForge ๋ฏธ๋์ด ํ์ดํ๋ผ์ธ์ ์ง์ ํตํฉ๋ฉ๋๋ค โ ์๋ ํ๋ ์ ๋ณํ์ด๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ ์์ต๋๋ค. ๋น๋์ค ํ์ดํ๋ผ์ธ ์ธ๋ถ์์์ ๋ ๋ฆฝํ ์ด๋ฏธ์ง ์ฒ๋ฆฌ์๋ OpenCvSharp์ ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํด๋์ค ๋งคํ
| Accord.Vision ๊ธฐ๋ฅ | VisioForge ๋ด์ฅ | ๋ ๋ฆฝํ OpenCvSharp |
|---|---|---|
| `HaarObjectDetector` (์ผ๊ตด ๊ฐ์ง) | `CVFaceDetectBlock` โ ๋/์ฝ/์ ๊ฐ์ง๊ฐ ํฌํจ๋ Haar ์บ์ค์ผ์ด๋, ์ผ๊ตด ๋ธ๋ฌ/ํฝ์ ํ | `CascadeClassifier` |
| `HaarObjectDetector` (์ผ๊ตด ๊ฐ์ง, DNN) | `CVFaceDetectBlock` โ Caffe SSD ๋ชจ๋ธ, ์ ๋ขฐ๋ ํํฐ๋ง, GPU ๊ฐ์ | DNN ๋ชจ๋ |
| `HaarObjectDetector` (์ผ๊ตด ๊ฐ์ง, DLib) | `CVFaceDetectBlock` (CVD) โ DLib HOG+SVM ์ ๋ฉด ์ผ๊ตด ๊ฐ์ง๊ธฐ | โ |
| `MotionDetector` | `CVMotionCellsBlock` โ ๊ฐ์ฒด ์ถ์ ์ด ํฌํจ๋ MOG2 ๋ฐฐ๊ฒฝ ์ฐจ๋ถ | `BackgroundSubtractorMOG2` |
| `BlobCounter` | `CVMotionCellsBlock` โ ๋ธ๋กญ ์ถ์ , ์ค๊ณฝ ๊ฐ์ง, ์ฐจ๋ ์นด์ดํ | `Cv2.FindContours()` + `Cv2.ConnectedComponents()` |
| `HistogramsOfOrientedGradients` (HOG) | `CVFaceDetectBlock` โ HOG+SVM ์ฌ๋ ๊ฐ์ง | `HOGDescriptor` |
| `CannyEdgeDetector` | `CameraCoveredDetector` โ Canny ๊ธฐ๋ฐ ๋ ์ฆ ์ฐจ๋จ ๊ฐ์ง | `Cv2.Canny()` |
| `SpeededUpRobustFeatures` (SURF) | โ | `SIFT.Create()` (SURF๋ ํนํ, SIFT ๋๋ ORB ์ฌ์ฉ) |
| `HoughLineTransformation` | โ | `Cv2.HoughLinesP()` |
| ํ ํ๋ฆฟ ๋งค์นญ | โ | `Cv2.MatchTemplate()` |
๋ด์ฅ ํ๋ผ์ด๋ฒ์ ๊ธฐ๋ฅ
VisioForge ๊ฐ์ง๊ธฐ์๋ ๋ด์ฅ ํ๋ผ์ด๋ฒ์ ์ฒ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค โ ์ถ๊ฐ ์ฝ๋ ๋ถํ์:
- โ์ผ๊ตด ๋ธ๋ฌ โ ๊ฐ์ง๋ ์ผ๊ตด ์์ญ์ ๊ฐ์ฐ์์ ๋ธ๋ฌ ์ ์ฉ
- โ์ผ๊ตด ํฝ์ ํ โ ์ผ๊ตด ์์ญ์ ๋ธ๋ก ํฝ์ ํ
- โ์์ญ ์บ์ฑ โ ํ๋ ์ ๊ฐ ๋ถ๋๋ฌ์ด ๊ฒฐ๊ณผ (์ค์ ๊ฐ๋ฅํ ์บ์ ํฌ๊ธฐ)
C# ์ผ๊ตด ๊ฐ์ง ์์
Accord.NET โ ์ผ๊ตด ๊ฐ์ง (์ด์ )
C#var detector = new HaarObjectDetector(
new HaarCascade(HaarCascade.FaceHaarCascadePath));
detector.MinSize = new Size(30, 30);
Rectangle[] faces = detector.ProcessFrame(bitmap);VisioForge โ Haar ์บ์ค์ผ์ด๋ ์ผ๊ตด ๊ฐ์ง (์ดํ)
C#var settings = new CVFaceDetectSettings
{
DetectFrontalFace = true,
DetectEyes = true,
DetectNose = true,
DetectMouth = true,
MinFaceSize = new Size(30, 30),
ScaleFactor = 1.1,
DrawEnabled = true
};
var detector = new CVFaceDetectBlock(settings);
// Add to a MediaBlocks pipeline or use standaloneVisioForge โ DNN ์ผ๊ตด ๊ฐ์ง๊ธฐ (๋์ ์ ํ๋, GPU ์ง์)
C#var settings = new CVFaceDetectSettings
{
Confidence = 0.25,
DrawEnabled = true,
BlurFaces = true // built-in privacy blur
};
var detector = new CVFaceDetectBlock(settings);VisioForge โ DLib ์ผ๊ตด ๊ฐ์ง๊ธฐ
C#var settings = new CVFaceDetectSettings
{
DrawEnabled = true,
MinFaceSize = new Size(30, 30)
};
var detector = new CVFaceDetectBlock(settings);๋ ๋ฆฝํ OpenCvSharp (๋์)
C#using var cascade = new CascadeClassifier("haarcascade_frontalface_default.xml");
using var mat = Cv2.ImRead("image.jpg");
using var gray = new Mat();
Cv2.CvtColor(mat, gray, ColorConversionCodes.BGR2GRAY);
var faces = cascade.DetectMultiScale(gray, 1.1, 3, 0, new Size(30, 30));C# ๋ณดํ์ ๊ฐ์ง ์์
Accord.NET โ HOG ๋ณดํ์ ๊ฐ์ง (์ด์ )
C#var hog = new HistogramsOfOrientedGradients();
double[] features = hog.ProcessImage(bitmap);
// Manual SVM classification neededVisioForge โ ๋ณดํ์ ๊ฐ์ง (์ดํ)
C#var settings = new CVFaceDetectSettings
{
DrawEnabled = true,
VideoScale = 1.0,
FramesToSkip = 2
};
var detector = new CVFaceDetectBlock(settings);C# ๋ชจ์ ๊ฐ์ง ์์
Accord.NET โ ๋ชจ์ ๊ฐ์ง (์ด์ )
C#var detector = new MotionDetector(
new TwoFramesDifferenceDetector(),
new BlobCountingObjectsProcessing());
double motionLevel = detector.ProcessFrame(bitmap);VisioForge โ ๊ฐ์ฒด/๋ชจ์ ๊ฐ์ง (์ดํ)
C#var settings = new CVMotionCellsSettings
{
DrawEnabled = true
};
var detector = new CVMotionCellsBlock(settings);
// MOG2 background subtraction with automatic object tracking and ID assignment๋จธ์ ๋ฌ๋ ๋ง์ด๊ทธ๋ ์ด์ : Accord.MachineLearning โ ML.NET
๋น๋์ค ์ฒ๋ฆฌ ์ค ๋ฅ ๋ฌ๋ ์ถ๋ก ์ ์ํด VisioForge๋ ๋ด์ฅ DNN ์ผ๊ตด ๊ฐ์ง(`CVFaceDetectBlock`), ๋ณดํ์ ๊ฐ์ง(`CVFaceDetectBlock`), ๊ฐ์ฒด ์ถ์ (`CVMotionCellsBlock`)์ ์ ๊ณตํฉ๋๋ค. ์ปค์คํ ๋ชจ๋ธ์ ๊ฒฝ์ฐ ํ๋ ์ ์ฝ๋ฐฑ๊ณผ ํจ๊ป ONNX Runtime์ ํตํฉํ์ธ์.
ML ํด๋์ค ๋งคํ
| Accord.ML ๊ธฐ๋ฅ | ML.NET ๋์ฒด |
|---|---|
| `SupportVectorMachine` | `SdcaMaximumEntropy` ๋๋ `LinearSvm` |
| `DecisionTree` | `FastTree` ๋๋ `FastForest` |
| `KMeans` | `KMeansTrainer` |
| `NaiveBayes` | `NaiveBayes` (ML.NET) |
| `NeuralNetwork` (Accord.Neuro) | ONNX Runtime ๋๋ TensorFlow.NET |
| `PrincipalComponentAnalysis` | `PrincipalComponentAnalysis` (ML.NET contrib) |
๋ง์ด๊ทธ๋ ์ด์ ์ฒดํฌ๋ฆฌ์คํธ
- Accord.NET ์ฌ์ฉ ํํฉ ๊ฐ์ฌ โ ์ด๋ค ์์ญ(๋น๋์ค, ๋น์ , ML)์ด ์ฌ์ฉ๋๋์ง ํ์
- ๋น๋์ค ์บก์ฒ โ VisioForge Video Capture SDK NuGet ํจํค์ง ์ค์น
- ์ปดํจํฐ ๋น์ โ VisioForge ๋ด์ฅ ๊ฐ์ง๊ธฐ(์ผ๊ตด, ๋ณดํ์, ๊ฐ์ฒด, ์ฐจ๋ ์นด์ดํ ) ์ฌ์ฉ ๋๋ ๋ ๋ฆฝํ ์ฌ์ฉ์ ์ํด OpenCvSharp4 ์ค์น
- ๋จธ์ ๋ฌ๋ โ ML.NET ๋๋ ONNX Runtime NuGet ํจํค์ง ์ค์น
- ๋น๋์ค ์์ค ํด๋์ค ๊ต์ฒด โ ์์ ๋งคํ ํ ์ด๋ธ ์ฐธ์กฐ
- ๋น์ ์๊ณ ๋ฆฌ์ฆ ๊ต์ฒด โ VisioForge MediaBlocks ์ฌ์ฉ ๋๋ OpenCvSharp ๋๋ฑ๋ฌผ๋ก ํฌํ
- ML ๋ชจ๋ธ ๊ต์ฒด โ ML.NET์ผ๋ก ์ฌํ์ต ๋๋ ONNX๋ก ๋ด๋ณด๋ด๊ธฐ
- Accord NuGet ํจํค์ง ์ ๊ฑฐ โ ์ข ์์ฑ ์ ๋ฆฌ
- ์ต์ .NET ๋์ โ .NET 6-10
- ํฌ๋ก์ค ํ๋ซํผ ํ ์คํธ โ VisioForge์ OpenCvSharp ๋ชจ๋ Windows, macOS, Linux ์ง์
๋ง์ด๊ทธ๋ ์ด์ ํ ์ป๋ ๊ฒ
| ํญ๋ชฉ | Accord.NET | ๋ง์ด๊ทธ๋ ์ด์ ํ |
|---|---|---|
| ์ํ | ์์นด์ด๋ธ๋จ | ํ๋ฐํ ๊ฐ๋ฐ (๋ชจ๋ ๋์ฒดํ) |
| ํ๋ ์์ํฌ | .NET Framework | .NET 6-10 |
| ๋น๋์ค ์บก์ฒ | ๊ธฐ๋ณธ AForge ๋ด๋ถ ์ฝ๋ | ์ดํํธ, ์คํธ๋ฆฌ๋ฐ, ๋ นํ ๊ธฐ๋ฅ์ ์ ๋ฌธ SDK |
| ์ปดํจํฐ ๋น์ | ๊ตฌ์ ์๊ณ ๋ฆฌ์ฆ | VisioForge ๋ด์ฅ ๊ฐ์ง๊ธฐ + ์ ์ฒด OpenCV 4.11 (2500+ ์๊ณ ๋ฆฌ์ฆ) |
| ๋จธ์ ๋ฌ๋ | ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ | ML.NET + ONNX (ํ๋ก๋์ ๊ธ) |
| ์ผ๊ตด ๊ฐ์ง | ๊ธฐ๋ณธ Haar๋ง | Haar + DNN (Caffe SSD) + DLib HOG, ๋ธ๋ฌ/ํฝ์ ํ ํฌํจ |
| ๊ฐ์ฒด ๊ฐ์ง | ๊ธฐ๋ณธ ๋ธ๋กญ ์นด์ดํฐ | MOG2 ๋ฐฐ๊ฒฝ ์ฐจ๋ถ + ID ํฌํจ ์ถ์ |
| ๋ณดํ์ ๊ฐ์ง | ์๋ HOG+SVM | ๋ด์ฅ ํ ์ค ๋ณดํ์ ๊ฐ์ง๊ธฐ |
| ๋ฅ ๋ฌ๋ | ์์ | ONNX Runtime, TensorFlow.NET |
| ํ๋ซํผ | Windows๋ง | Windows, macOS, Linux, iOS, Android |
| ์ค๋์ค ์ดํํธ | ์์ | 40+ (EQ, ๋ฆฌ๋ฒ๋ธ, ์ฝ๋ฌ์ค, 3D) |
| GPU ๊ฐ์ | ์์ | CUDA (OpenCvSharp), GPU ์ดํํธ (VisioForge) |
