Open kruglm opened 4 years ago
@kruglm можно делать несколько кадров с заданным промежутком и выводить тот объект, для которого сумма вероятностей будет наибольшей по итогам всех кадров (то есть он чаще всего был в кадре и наиболее точно распознался). В массиве они ведь с вероятностями?
И в этот репозиторий можно загружать код. Как раз ссылку на него и можно сдать в документации. Могу подкинуть краткое руководство по git
С удовольствием почитал бы
@kruglm https://webdelphi.ru/2010/07/dvcs-git-i-tortoisegit-v-kartinkax-posobie-dlya-nachinayushhix-chajnikov/ , плюс я создал курс на Изформатике, зачислил туда тебя и скинул туда подробный разбор использования git из заданий для 10Р, посмотри.
Спасибо
На второй день есть вроде полностью работающее приложение: Осталось: -Документация
Код: Код формы один ` using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using AForge.Video; using AForge.Video.DirectShow;
namespace ProjectWork { public partial class Form1 : Form { FilterInfoCollection filterinfocollection; VideoCaptureDevice videoCaptureDevice; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { filterinfocollection = new FilterInfoCollection(FilterCategory.VideoInputDevice); foreach (FilterInfo filterinfo in filterinfocollection) camerabox.Items.Add(filterinfo.Name); camerabox.SelectedIndex = 0; videoCaptureDevice = new VideoCaptureDevice(); camerabox.SelectedIndexChanged += camerabox_SelectedIndexChanged; if (camerabox.Items.Count > 0) camerabox.SelectedIndex = 0; camerabox_SelectedIndexChanged(null, null); rebox.SelectedIndexChanged += rebox_SelectedIndexChanged; if (rebox.Items.Count > 0) rebox.SelectedIndex = 0;
}
void camerabox_SelectedIndexChanged(object sender, EventArgs e)
{
videoCaptureDevice = new VideoCaptureDevice(filterinfocollection[camerabox.SelectedIndex].MonikerString);
rebox.Items.Clear();
for (int i = 0; i < videoCaptureDevice.VideoCapabilities.Length; i++)
{
string resolution_size = videoCaptureDevice.VideoCapabilities[i].FrameSize.ToString();
rebox.Items.Add(resolution_size);
}
}
void rebox_SelectedIndexChanged(object sender, EventArgs e)
{
videoCaptureDevice.VideoResolution = videoCaptureDevice.VideoCapabilities[rebox.SelectedIndex];
}
private void button1_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2(videoCaptureDevice, this);
newForm.Show();
this.Hide();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void label2_Click(object sender, EventArgs e)
{
}
}
}
Код Формы 2:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;
using Alturos.Yolo;
using System.Speech.Synthesis;
using System.Timers;
namespace ProjectWork { public partial class Form2 : Form { YoloWrapper yoloWrapper; Form1 temp; private static System.Timers.Timer aTimer; SpeechSynthesizer synth = new SpeechSynthesizer(); VideoCaptureDevice camera;
public Form2(VideoCaptureDevice cameraIn, Form1 f)
{
yoloWrapper = new YoloWrapper(@".\YoloFiles\yolov3-tiny.cfg", @".\YoloFiles\yolov3-tiny.weights", @".\YoloFiles\coco.names");
InitializeComponent();
synth.SetOutputToDefaultAudioDevice();
camera = cameraIn;
camera.NewFrame += camera_NewFrame;
camera.Start();
this.Size = camera.VideoResolution.FrameSize;
pic.Size = camera.VideoResolution.FrameSize;
temp = f;
aTimer = new System.Timers.Timer();
aTimer.Interval = 4000;
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private void camera_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
pic.Image = (Bitmap)eventArgs.Frame.Clone();
}
private void OnTimedEvent(Object sender, System.Timers.ElapsedEventArgs e)
{
byte[] bytesImage = null;
if (pic.InvokeRequired)
pic.Invoke(new Action(() =>
{
bytesImage = ImageToByte(pic.Image);
}));
else
bytesImage = ImageToByte(pic.Image);
var items = yoloWrapper.Detect(bytesImage);
foreach (var p in items)
{
synth.Speak(p.Type);
}
}
public byte[] ImageToByte(Image img)
{
ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(img, typeof(byte[]));
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
aTimer.Stop();
aTimer.Dispose();
camera.Stop();
//temp.Close();
Application.Exit();
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
} `
Что есть: Приложение выводящее картинку с камеры и отправляющее по нажатию кнопки кадр который анализирует Alturos.Yolo Что осталось сделать: -Озвучку -Адекватную систему по взятию кадра -Адекватную систему какой объект из массива брать( в массиве с анализом не один объект, какой именно объект нужно озвучивать)
По поводу последних двух пунктов лучше написать ниже