kruglm / Predprofil

Case №3. Object Analyzing
0 stars 0 forks source link

Ситуация на первый день последних выходных перед проектом #13

Open kruglm opened 4 years ago

kruglm commented 4 years ago

Что есть: Приложение выводящее картинку с камеры и отправляющее по нажатию кнопки кадр который анализирует Alturos.Yolo Что осталось сделать: -Озвучку -Адекватную систему по взятию кадра -Адекватную систему какой объект из массива брать( в массиве с анализом не один объект, какой именно объект нужно озвучивать)

По поводу последних двух пунктов лучше написать ниже

ioannnikulin commented 4 years ago

@kruglm можно делать несколько кадров с заданным промежутком и выводить тот объект, для которого сумма вероятностей будет наибольшей по итогам всех кадров (то есть он чаще всего был в кадре и наиболее точно распознался). В массиве они ведь с вероятностями?

ioannnikulin commented 4 years ago

И в этот репозиторий можно загружать код. Как раз ссылку на него и можно сдать в документации. Могу подкинуть краткое руководство по git

kruglm commented 4 years ago

С удовольствием почитал бы

ioannnikulin commented 4 years ago

@kruglm https://webdelphi.ru/2010/07/dvcs-git-i-tortoisegit-v-kartinkax-posobie-dlya-nachinayushhix-chajnikov/ , плюс я создал курс на Изформатике, зачислил туда тебя и скинул туда подробный разбор использования git из заданий для 10Р, посмотри.

kruglm commented 4 years ago

Спасибо

kruglm commented 4 years ago

На второй день есть вроде полностью работающее приложение: image image image image image Осталось: -Документация

Код: Код формы один ` 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)
    {

    }
}

} `