Last updated: 2026๋ 1์
AForge.NET ๋์: VisioForge .Net SDK ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์ด๋
๊ฐ๋ฐ์ด ์ค๋จ๋ AForge.NET์ ํ๋์ ์ธ ํฌ๋ก์ค ํ๋ซํผ .NET SDK๋ก ๊ต์ฒด
AForge.NET(AForge.Video, AForge.Vision, AForge.Imaging)์์ ํ๋์ ์ธ .NET 6-10 ๋์์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ C# ๊ฐ๋ฐ์
์ AForge.NET์ ๊ต์ฒดํด์ผ ํ๋์?
AForge.NET์ 2013๋ 7์ ์ดํ ๋ฐฉ์น๋์์ต๋๋ค โ 12๋ ์ด์ ์ ๋ฐ์ดํธ, ๋ณด์ ํจ์น ๋๋ ๋ฒ๊ทธ ์์ ์ด ์์ต๋๋ค. .NET Framework 2.0์ ๋์์ผ๋ก ํ๋ฉฐ ํ์ง์ด ๋ค์ํ ์ปค๋ฎค๋ํฐ ํฌํฌ ์์ด๋ ํ๋์ ์ธ .NET 6-10์์ ์คํํ ์ ์์ต๋๋ค.
| ์ํ | ์ํฅ |
|---|---|
| ๋ณด์ ํจ์น ์์ | ๋น๋์ค/์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ์ทจ์ฝ์ ์ด ํจ์น๋์ง ์์ ์ํ๋ก ์ ์ง |
| .NET 6+ ์ง์ ์์ | ํ๋์ ์ธ .NET ๊ธฐ๋ฅ, AOT ๋๋ ํฌ๋ก์ค ํ๋ซํผ ๋ฐฐํฌ ์ฌ์ฉ ๋ถ๊ฐ |
| ์๋ก์ด ์ฝ๋ฑ ์ง์ ์์ | H.265, AV1, VP9 ๋๋ ํ๋์ ์ธ ์ปจํ ์ด๋ ํ์ ๋ฏธ์ง์ |
| ์ปค๋ฎค๋ํฐ ์์ | ํฌ๋ผ์ 2012๋ 4์์ ํ์, ํ์ฑ ์ ์ง๋ณด์์ ์์ |
| DirectShow ์์กด์ฑ | Microsoft์ ์ํด Media Foundation์ผ๋ก ๋์ฒด๋์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ |
| Windows ์ ์ฉ | macOS, Linux, iOS, Android๋ฅผ ๋์์ผ๋ก ํ ์ ์์ |
AForge.Video โ VisioForge Video Capture SDK .Net
ํด๋์ค ๋งคํ
| AForge.Video ์ปดํฌ๋ํธ | VisioForge ๋์ฒด |
|---|---|
| VideoCaptureDevice | VideoCaptureCoreX + VideoCaptureDeviceSourceSettings |
| MJPEGStream | VideoCaptureCoreX + RTSPSourceSettings or UniversalSourceBlock |
| JPEGStream | VideoCaptureCoreX + IPCameraSourceSettings |
| ScreenCaptureStream | VideoCaptureCoreX + ScreenCaptureSourceSettings |
| FileVideoSource | MediaPlayerCoreX(์ฌ์) ๋๋ VideoEditCoreX(์ฒ๋ฆฌ) |
| AsyncVideoSource | ๋ด์ฅ โ ๋ชจ๋ VisioForge ์์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋๊ธฐ |
| NewFrameEventArgs | OnVideoFrameBuffer ์ด๋ฒคํธ |
C# ์น์บ ์บก์ฒ
AForge.NET โ ์น์บ ์บก์ฒ (์ด์ )
C#// AForge: Manual device enumeration, callback-based, no recording
var videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
var videoSource = new VideoCaptureDevice(videoDevices[0].MonikerString);
videoSource.NewFrame += (sender, eventArgs) =>
{
Bitmap frame = (Bitmap)eventArgs.Frame.Clone();
pictureBox.Image = frame;
// Manual recording requires separate code
};
videoSource.Start();
// Cleanup
videoSource.SignalToStop();
videoSource.WaitForStop();VisioForge โ C# ์น์บ ์บก์ฒ (์ดํ)
C#// VisioForge: Typed API, async, preview + recording built-in
var capture = new VideoCaptureCoreX(videoView); // Preview automatic
var devices = await DeviceEnumerator.Shared.VideoSourcesAsync();
capture.Video_Source = new VideoCaptureDeviceSourceSettings(devices[0]);
capture.Outputs_Add(new MP4Output("recording.mp4"), true);
await capture.StartAsync();
// Stop
await capture.StopAsync();C# IP ์นด๋ฉ๋ผ RTSP / MJPEG ์คํธ๋ฆฌ๋ฐ
AForge.NET โ MJPEG ์คํธ๋ฆผ (์ด์ )
C#// AForge: MJPEG only, no RTSP, no reconnection
var stream = new MJPEGStream("http://camera-ip/mjpg/video.mjpg");
stream.NewFrame += (sender, eventArgs) =>
{
pictureBox.Image = (Bitmap)eventArgs.Frame.Clone();
};
stream.Start();VisioForge โ C# RTSP IP ์นด๋ฉ๋ผ ์บก์ฒ (์ดํ)
C#// VisioForge: RTSP, RTMP, HLS, MJPEG โ with auto-reconnection
var capture = new VideoCaptureCoreX(videoView);
// RTSPSourceSettings uses a static factory (private constructor)
capture.Video_Source = await RTSPSourceSettings.CreateAsync(
new Uri("rtsp://camera-ip/stream"), "admin", "pass", audioEnabled: true);
capture.Outputs_Add(new MP4Output("recording.mp4"), true);
await capture.StartAsync();C# ํ๋ฉด ์บก์ฒ ๋ฐ ๋ นํ
AForge.NET โ ํ๋ฉด ์บก์ฒ (์ด์ )
C#// AForge: Basic, CPU-intensive, no recording
var screenStream = new ScreenCaptureStream(Screen.PrimaryScreen.Bounds);
screenStream.NewFrame += (sender, eventArgs) =>
{
pictureBox.Image = (Bitmap)eventArgs.Frame.Clone();
// Must manually encode and write frames to create a recording
};
screenStream.Start();VisioForge โ C# ํ๋ฉด ๋ นํ๊ธฐ (์ดํ)
C#// VisioForge: Region selection, cursor capture, hardware encoding
var capture = new VideoCaptureCoreX(videoView);
capture.Video_Source = new ScreenCaptureSourceSettings();
capture.Outputs_Add(new MP4Output("screen.mp4", new H264EncoderSettings()), true);
await capture.StartAsync();AForge.Vision โ VisioForge ์ปดํจํฐ ๋น์ ๋ธ๋ก
ํด๋์ค ๋งคํ
| AForge.Vision ์ปดํฌ๋ํธ | VisioForge ๋์ฒด |
|---|---|
| MotionDetector | CVMotionCellsBlock โ MOG2 ๋ฐฐ๊ฒฝ ์ฐจ๋ถ์ผ๋ก ๊ฐ์ฒด ์ถ์ ๋ฐ ID ํ ๋น |
| TwoFramesDifferenceDetector | CVMotionCellsBlock โ MOG2 (history: 500 frames, variance threshold: 40) |
| SimpleBackgroundModelingDetector | CVMotionCellsBlock โ ์ค๊ณฝ ๊ธฐ๋ฐ ๊ฐ์ง๋ฅผ ํตํ ์๋ ๋ฐฐ๊ฒฝ ๋ชจ๋ธ |
| CustomFrameDifferenceDetector | ๊ตฌ์ฑ ๊ฐ๋ฅํ CVMotionCellsSettings |
| MotionAreaHighlighting | CVMotionCellsBlock(DrawEnabled = true) โ ๊ฐ์ฒด ID๊ฐ ํฌํจ๋ ๋ฐ์ด๋ฉ ๋ฐ์ค ๊ทธ๋ฆฌ๊ธฐ |
| GridMotionAreaProcessing | Video Capture SDK ์ด๋ฒคํธ๋ฅผ ํตํ ์์ญ ๊ธฐ๋ฐ ๋ชจ์ ๊ฐ์ง |
| BlobCounter | CVMotionCellsBlock โ ๋ธ๋กญ ์ถ์ , ์ค๊ณฝ ๊ฐ์ง, ์ถ์ ๋ผ์ธ์ ํตํ ์ฐจ๋ ์นด์ดํ |
C# ๋ชจ์ ๋ฐ ๊ฐ์ฒด ๊ฐ์ง
AForge.NET โ ๋ชจ์ ๊ฐ์ง (์ด์ )
C#// AForge: Manual frame processing, no recording integration
var detector = new MotionDetector(
new TwoFramesDifferenceDetector(),
new MotionAreaHighlighting());
videoSource.NewFrame += (sender, eventArgs) =>
{
float motionLevel = detector.ProcessFrame((Bitmap)eventArgs.Frame.Clone());
if (motionLevel > 0.02f)
Console.WriteLine($"Motion: {motionLevel * 100:F1}%");
};VisioForge โ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ชจ์ ๊ฐ์ง (Video Capture SDK)
C#// Integrated detection during capture + recording
var capture = new VideoCaptureCoreX(videoView);
capture.Video_Source = new VideoCaptureDeviceSourceSettings(devices[0]);
capture.Outputs_Add(new MP4Output("recording.mp4"), true);
capture.OnMotionDetection += (s, e) =>
{
if (e.Level > 30)
Console.WriteLine($"Motion: {e.Level}%");
};
await capture.StartAsync();VisioForge โ CVMotionCellsBlock (MediaBlocks ํ์ดํ๋ผ์ธ)
C#// MOG2 background subtraction with automatic object tracking and IDs
var settings = new CVMotionCellsSettings
{
DrawEnabled = true
};
var detector = new CVMotionCellsBlock(settings);
// Tracks objects with unique IDs using Euclidean distance matchingC# ์ผ๊ตด ๊ฐ์ง ๋ฐ ๋ณดํ์ ๊ฐ์ง (AForge์์๋ ์ฌ์ฉ ๋ถ๊ฐ)
ํด๋์ค ๋งคํ
| ๊ธฐ๋ฅ | VisioForge ๋ธ๋ก |
|---|---|
| Haar ์บ์ค์ผ์ด๋ ์ผ๊ตด ๊ฐ์ง | CVFaceDetectBlock โ ์ ๋ฉด/์ธก๋ฉด ์ผ๊ตด, ๋, ์ฝ, ์ ๊ฐ์ง |
| DNN ์ผ๊ตด ๊ฐ์ง | CVFaceDetectBlock โ Caffe SSD ๋ชจ๋ธ, ์ ๋ขฐ๋ ํํฐ๋ง, GPU ๊ฐ์ |
| DLib ์ผ๊ตด ๊ฐ์ง | CVFaceDetectBlock (CVD) โ DLib HOG+SVM ์ ๋ฉด ์ผ๊ตด ๊ฐ์ง๊ธฐ |
| ๋ณดํ์ ๊ฐ์ง | CVFaceDetectBlock โ ๋ด์ฅ HOG+SVM ์ฌ๋ ๊ฐ์ง๊ธฐ |
| ๋ ์ฆ ์ฐจ๋จ ๊ฐ์ง | CameraCoveredDetectorBlock โ Canny ์์ง ๊ฐ์ง |
C# ์ผ๊ตด ๊ฐ์ง
AForge.NET (์ด์ )
C#// AForge had no built-in face detection โ required manual Haar cascade code
// or using Accord.NET's HaarObjectDetector on top of AForge framesVisioForge โ Haar ์บ์ค์ผ์ด๋ ์ผ๊ตด ๊ฐ์ง
C#var settings = new CVFaceDetectSettings
{
DetectFrontalFace = true,
DetectProfileFace = true,
DetectEyes = true,
DetectNose = true,
DetectMouth = true,
MinFaceSize = new Size(30, 30),
ScaleFactor = 1.1,
DrawEnabled = true,
BlurFaces = false, // set true for privacy blur
PixelateFaces = false // set true for privacy pixelation
};
var detector = new CVFaceDetectBlock(settings);VisioForge โ 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);C# ๋ณดํ์ ๊ฐ์ง
AForge.NET (์ด์ )
C#// AForge had no pedestrian detection โ required manual HOG+SVM implementationVisioForge โ ๋ณดํ์ ๊ฐ์ง (์ดํ)
C#var settings = new CVFaceDetectSettings
{
DrawEnabled = true,
VideoScale = 1.0,
FramesToSkip = 2
};
var detector = new CVFaceDetectBlock(settings);
// Built-in HOG descriptors + SVM classifier, multi-scale detectionAForge.Imaging โ VisioForge CV + OpenCvSharp
ํด๋์ค ๋งคํ
| AForge.Imaging ๊ธฐ๋ฅ | VisioForge ๋ด์ฅ | ๋ ๋ฆฝํ OpenCvSharp |
|---|---|---|
| GaussianBlur | CVProcess.BlurRegion() (kernel 23x23) | Cv2.GaussianBlur() |
| Pixellate | CVProcess.PixelateRegion() | ์ปค์คํ ๋ค์ด์ค์ผ์ผ/์ ์ค์ผ์ผ |
| CannyEdgeDetector | CameraCoveredDetector (thresholds 100/200) | Cv2.Canny() |
| Erosion / Dilation | CVMotionCellsBlock์์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ (5x5 ๊ตฌ์กฐ ์์) | Cv2.Erode() / Cv2.Dilate() |
| BlobCounter | CVMotionCellsBlock โ ์ค๊ณฝ ๊ฐ์ง, ๋ฉด์ /์ข ํก๋น ํํฐ๋ง, ๋ณผ๋ก ๊ป์ง | Cv2.FindContours() |
| Grayscale | ๋ชจ๋ ๊ฐ์ง๊ธฐ์ ๋ด์ฅ๋ BGRโGray ๋ณํ | Cv2.CvtColor() |
| Threshold | ๋ชจ์ ํ์ดํ๋ผ์ธ์ ๋ด์ฅ๋ ์ด์ง ์๊ณ๊ฐ ์ฒ๋ฆฌ | Cv2.Threshold() |
| ResizeBilinear | ๋ชจ๋ ๊ฐ์ง๊ธฐ ์ค์ ์ ๋ด์ฅ๋ ๋น๋์ค ์ค์ผ์ผ๋ง | Cv2.Resize() |
| HistogramEqualization | CVFaceDetect์์ ๊ฐ์ง ํฅ์์ ์ฌ์ฉ | Cv2.EqualizeHist() |
| HSLFiltering / ์์ ํํฐ | โ | Cv2.InRange() / Cv2.CvtColor() |
| HoughLineTransformation | โ | Cv2.HoughLinesP() |
| SobelEdgeDetector | โ | Cv2.Sobel() |
| ํ ํ๋ฆฟ ๋งค์นญ | โ | Cv2.MatchTemplate() |
๋ง์ด๊ทธ๋ ์ด์ ์ฒดํฌ๋ฆฌ์คํธ
- AForge ์ฐธ์กฐ ์ธ๋ฒคํ ๋ฆฌ โ ํ๋ก์ ํธ์ ๋ชจ๋ `using AForge.*` ์ฐพ๊ธฐ
- VisioForge NuGet ํจํค์ง ์ค์น
- ๋น๋์ค ์์ค ํด๋์ค ๊ต์ฒด
- ๋ชจ์ ๊ฐ์ง ๊ต์ฒด
- ์ผ๊ตด ๊ฐ์ง ๊ต์ฒด
- ๋ธ๋กญ/๊ฐ์ฒด ๊ฐ์ง ๊ต์ฒด
- ์๋ ํ๋ ์ ๋ฃจํ ์ ๊ฑฐ
- ๋ นํ/์คํธ๋ฆฌ๋ฐ ์ถ๊ฐ
- ์ต์ .NET ๋์ โ .NET 6-10
- ํฌ๋ก์ค ํ๋ซํผ ํ ์คํธ
- ์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ๊ฒฝ์ฐ โ VisioForge CV๋ ๋ธ๋ฌ, ํฝ์ ํ, Canny, ๋ชจํด๋ก์ง๋ฅผ ์ง์; ์ถ๊ฐ ํํฐ์๋ OpenCvSharp ์ฌ์ฉ
๋ง์ด๊ทธ๋ ์ด์ ํ ์ป๋ ๊ฒ
| ๊ธฐ๋ฅ | AForge.NET | ๋ง์ด๊ทธ๋ ์ด์ ํ |
|---|---|---|
| ํ๋ ์์ํฌ | .NET Framework 2.0 | .NET 6-10 |
| ํ๋ซํผ | Windows ์ ์ฉ | Windows, macOS, Linux, iOS, Android |
| ๋น๋์ค ์บก์ฒ | ๊ธฐ๋ณธ DirectShow | ๋น๋๊ธฐ API๋ฅผ ๊ฐ์ถ ์ ๋ฌธ SDK |
| ๋ นํ | ์๋ ๊ตฌํ | ๋ด์ฅ (MP4, MKV, AVI, WebM) |
| ํ๋์จ์ด ์ธ์ฝ๋ฉ | ์์ | NVENC, QSV, AMF, VideoToolbox |
| ์คํธ๋ฆฌ๋ฐ | ์์ | RTMP, HLS, SRT, NDI |
| ์ค๋์ค ํจ๊ณผ | ์์ | 40๊ฐ ์ด์ (EQ, ๋ฆฌ๋ฒ๋ธ, ์ฝ๋ฌ์ค, 3D) |
| ๋น๋์ค ํจ๊ณผ | ์์ | GPU + CPU ํ์ดํ๋ผ์ธ |
| ์ผ๊ตด ๊ฐ์ง | ์์ | Haar + DNN (Caffe SSD) + DLib HOG, ๋ธ๋ฌ/ํฝ์ ํ ํฌํจ |
| ๋ชจ์ ๊ฐ์ง | ๊ธฐ๋ณธ ํ๋ ์ ์ฐจ๋ถ | MOG2 ๋ฐฐ๊ฒฝ ์ฐจ๋ถ + ID๋ฅผ ํตํ ๊ฐ์ฒด ์ถ์ |
| ๋ณดํ์ ๊ฐ์ง | ์์ | ๋ด์ฅ HOG+SVM ์ฌ๋ ๊ฐ์ง๊ธฐ |
| IP ์นด๋ฉ๋ผ | MJPEG๋ง | RTSP, RTMP, HLS, ONVIF |
| ๊ฐ์ ์นด๋ฉ๋ผ | ์์ | Zoom/Teams/OBS๋ก ์ถ๋ ฅ |
| ์ ์ง๋ณด์ | ๋ฐฉ์น (2013) | ํ๋ฐํ ๊ฐ๋ฐ |
| ๋ณด์ | ํจ์น๋์ง ์์ | ์ ๊ธฐ์ ์ธ ์ ๋ฐ์ดํธ |
Frequently Asked Questions
AForge.NET์ ์์ง ์ ์ง๋ณด์๋๊ณ ์๋์?
์๋์. AForge.NET์ 2013๋
7์ ์ดํ ์
๋ฐ์ดํธ, ๋ณด์ ํจ์น ๋๋ .NET 6+ ์ง์ ์์ด ๋ฐฉ์น๋์์ต๋๋ค. ์ปค๋ฎค๋ํฐ ํฌํฌ๊ฐ ์กด์ฌํ์ง๋ง ํ์ง๊ณผ ์ ์ง๋ณด์๊ฐ ๋ค์ํฉ๋๋ค. ํ๋์ ์ธ AForge.NET ๋์์ผ๋ก VisioForge .Net SDK๋ฅผ ์ฌ์ฉํ์ธ์.
C# ๋น๋์ค ์บก์ฒ๋ฅผ ์ํ ์ต๊ณ ์ AForge.NET ๋์์ ๋ฌด์์ธ๊ฐ์?
VisioForge Video Capture SDK .Net์ ์น์บ , IP ์นด๋ฉ๋ผ(RTSP/ONVIF), ํ๋ฉด ์บก์ฒ ๋ฐ MP4, WebM ๋ฑ์ ํ์์ผ๋ก ์ถ๋ ฅ์ ์ง์ํ๋ ํ๋์ ์ธ ๋น๋๊ธฐ API๋ก AForge.Video๋ฅผ ๋์ฒดํฉ๋๋ค(.NET 6-10 ์ง์).
VisioForge๋ AForge.Imaging ํํฐ๋ฅผ ๋์ฒดํ๋์?
๋ถ๋ถ์ ์ผ๋ก. VisioForge CV์๋ ๋ธ๋ฌ, ํฝ์
ํ, Canny ์์ง ๊ฐ์ง, ๋ชจํด๋ก์ง ์ฐ์ฐ, ๊ทธ๋ ์ด์ค์ผ์ผ ๋ณํ ๋ฐ ํ์คํ ๊ทธ๋จ ๊ท ๋ฑํ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ ์ฒด ์ด๋ฏธ์ง ํํฐ ๋ฒ์(Sobel, Hough, ์์ ํํฐ๋ง, ํ
ํ๋ฆฟ ๋งค์นญ)์๋ VisioForge์ ํจ๊ป OpenCvSharp๋ฅผ ์ฌ์ฉํ์ธ์.
AForge ์์ด VisioForge๋ฅผ C# ์ผ๊ตด ๊ฐ์ง์ ์ฌ์ฉํ ์ ์๋์?
๋ค. VisioForge .Net SDK์๋ ์ธ ๊ฐ์ง ๋ด์ฅ ์ผ๊ตด ๊ฐ์ง ์์ง โ Haar ์บ์ค์ผ์ด๋, DNN ๊ธฐ๋ฐ, DLib ๊ธฐ๋ฐ โ ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ๋ด์ฅ ํ๋ผ์ด๋ฒ์ ๋ธ๋ฌ ๋ฐ ํฝ์
ํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. AForge ๋๋ Accord.NET ์ข
์์ฑ์ด ํ์ํ์ง ์์ต๋๋ค.
VisioForge๋ .NET 6, .NET 8, .NET 9, .NET 10์ ์ง์ํ๋์?
๋ค. ๋ชจ๋ VisioForge .Net SDK ํจํค์ง๋ Windows, macOS, Linux, iOS, Android์์์ ํฌ๋ก์ค ํ๋ซํผ ๋ฐฐํฌ๋ฅผ ํฌํจํ์ฌ .NET 6๋ถํฐ .NET 10๊น์ง ์ง์ํฉ๋๋ค.
AForge.NET์์ ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์๋์?
๋ค. VisioForge SDK๋ ๋ง์ด๊ทธ๋ ์ด์
์ค์ AForge.NET ํจํค์ง์ ๊ณต์กดํ ์ ์์ต๋๋ค. ํ ๋ฒ์ ํ๋์ ์ปดํฌ๋ํธ๋ฅผ ๊ต์ฒดํ์ธ์ โ ๋น๋์ค ์บก์ฒ๋ถํฐ ์์ํ๊ณ , ๊ทธ ๋ค์ ๊ฐ์ง, ๊ทธ ๋ค์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ โ ๊ฐ ๋จ๊ณ๊ฐ ์๋ฃ๋๋ฉด AForge NuGet ํจํค์ง๋ฅผ ์ ๊ฑฐํ์ธ์.
