Здравствуйте, я попытался создать блок обнаружения ИИ с помощью 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#, мне помог чатгпт, но он не работает, поэтому мне нужны несколько советов
Здравствуйте, я попытался создать блок обнаружения ИИ с помощью Onnx, где я хочу это сделать, поэтому, если я нахожусь в vs2022, и создаю приложение, которое я хочу сделать, поэтому, если я установлю флажок, он активирует ИИ и будет захватывать мой экран в режиме реального времени, и это работает, но проблема, с которой я столкнулся, заключается в том, что поля AI всегда отображаются в левой части моего экрана, и я действительно не знаю, почему это может быть, потому что я использую 640 x 640, но как я вижу, что это должно быть посередине, а не вверху слева, я не знаю, это сложно объяснить, но если кому-то нужно больше объяснений, я могу это сделать, вот часть кода, который у меня есть для этих вещей: [code]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(); } }
[/code] Я попробовал рискнуть, поэтому в центре экрана у меня было поле зрения размером примерно 640 x 640, и оно всегда было видно с самого начала запуска меню и в fov - это то место, где ИИ будет активен, все за пределами поля зрения заставит ИИ не обнаруживать объект, например банан или что-то в этом роде, но я не мог сделать так, чтобы поле зрения было в середине экрана, в то время как ИИ нацеливался только на все внутри него. потому что я не лучший в C#, мне помог чатгпт, но он не работает, поэтому мне нужны несколько советов
Здравствуйте, я попытался создать блок обнаружения ИИ с помощью Onnx, где я хочу это сделать, поэтому, если я нахожусь в vs2022, и создаю приложение, которое я хочу сделать, поэтому, если я установлю флажок, он активирует ИИ и будет захватывать мой...
Мне нужен чат-бот с искусственным интеллектом, способный вести достаточно умные разговоры, я хочу, чтобы он был сопоставим с чатом 3 с точки зрения способности к общению. Мне также нужно, чтобы программа работала в автономном режиме, что делает это...
Я использую генеративный искусственный интеллект Google в среде отдыха Django. Я отправляю запрос в свою серверную часть с помощью adrf (пакет асинхронных представлений), я могу обработать свой ответ с помощью Gemini pro, но когда я отправляю другой...
Я пишу чат-бота с искусственным интеллектом для друга и пытаюсь записать данные в файл рассола. В основном использую Python с кучей дополнений, таких как numpy, sklearn, ntlk, Pickle, Pandas и еще несколько. Пока что я могу записать файл, но он...
Это мой первый пост о stackoverflow, поэтому, пожалуйста, наберитесь терпения.
У меня есть опыт программирования на Python и Langchain. Я разработал несколько чат-ботов RAG, используя Chainlit/Streamlit в качестве внешнего интерфейса. Изучая текущие...