Как сделать работающий блок обнаружения с искусственным интеллектомC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как сделать работающий блок обнаружения с искусственным интеллектом

Сообщение Anonymous »

Здравствуйте, я попытался создать блок обнаружения ИИ с помощью Onnx, где я хочу это сделать, поэтому, если я нахожусь в vs2022, и создаю приложение, которое я хочу сделать, поэтому, если я установлю флажок, он активирует ИИ и будет захватывать мой экран в режиме реального времени, и это работает, но проблема, с которой я столкнулся, заключается в том, что поля AI всегда отображаются в левой части моего экрана, и я действительно не знаю, почему это может быть, потому что я использую 640 x 640, но как я вижу, что это должно быть посередине, а не вверху слева, я не знаю, это сложно объяснить, но если кому-то нужно больше объяснений, я могу это сделать, вот часть кода, который у меня есть для этих вещей:

Код: Выделить всё

private void DetectItems(Bitmap screen)
{
var inputTensor = PreprocessImage(screen, 640, 640);
var input = new List { NamedOnnxValue.CreateFromTensor("images", inputTensor) };

List detectedItems;

using (var results = session.Run(input))
{
detectedItems = ParseYoloOutput(results);
}

// Draw bounding boxes directly on the screen (overlay)
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero)) // Drawing on the screen
{
foreach (var item in detectedItems)
{
g.DrawRectangle(Pens.Red, item.Box);
string detectedClassName = GetClassNameFromId(item.ClassId);
g.DrawString($"{detectedClassName} ({item.Confidence:P0})", new Font("Arial", 16), Brushes.Red, item.Box.X, item.Box.Y);
}
}
}

private List ParseYoloOutput(IDisposableReadOnlyCollection results)
{
var output = results.First().AsEnumerable().ToArray();
List detectedItems = new List();

for (int i = 0; i < output.Length; i += 6)
{
float x = output[i] * Screen.PrimaryScreen.Bounds.Width;
float y = output[i + 1] * Screen.PrimaryScreen.Bounds.Height;
float width = output[i + 2] * Screen.PrimaryScreen.Bounds.Width;
float height = output[i + 3] * Screen.PrimaryScreen.Bounds.Height;
float confidence = output[i + 4];
int classId = (int)output[i + 5];

if (confidence > 0.1f)
{
DetectedItem item = new DetectedItem
{
Box = new Rectangle((int)x, (int)y, (int)width, (int)height),
ClassId = classId,
Confidence = confidence
};

detectedItems.Add(item);
}
}

return detectedItems;
}

private Tensor PreprocessImage(Bitmap bitmap, int width, int height)
{
Bitmap resized = new Bitmap(bitmap, new Size(width, height));
var input = new DenseTensor(new[] { 1, 2, height, width });

for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
Color pixel = resized.GetPixel(x, y);
input[0, 0, y, x] = pixel.R / 255f;
input[0, 1, y, x] = pixel.G / 255f;
input[0, 2, y, x] = pixel.B / 255f;
}
}

return input;
}

private void checkBoxEnableAI_CheckedChanged(object sender, EventArgs e)
{
if (checkBoxEnableAI.Checked)
{
if (detectionTimer == null)
{
detectionTimer = new Timer();
detectionTimer.Interval = 1000; // Detect every second
detectionTimer.Tick += (s, ev) =>
{
Bitmap screenshot = CaptureScreen();
DetectItems(screenshot);   // Run detection and draw bounding boxes
};
}
detectionTimer.Start();
}
else
{
detectionTimer?.Stop();
}
}

Я попробовал рискнуть, поэтому в центре экрана у меня было поле зрения размером примерно 640 x 640, и оно всегда было видно с самого начала запуска меню и в fov - это то место, где ИИ будет активен, все за пределами поля зрения заставит ИИ не обнаруживать объект, например банан или что-то в этом роде, но я не мог сделать так, чтобы поле зрения было в середине экрана, в то время как ИИ нацеливался только на все внутри него. потому что я не лучший в C#, мне помог чатгпт, но он не работает, поэтому мне нужны несколько советов

Подробнее здесь: https://stackoverflow.com/questions/790 ... that-works
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»