Algoritma untuk pelacakan beberapa objek sederhana secara real-time

Saya mencoba menulis program untuk melacak posisi relatif objek tertentu saat saya memainkan game populer, League of Legends. Secara khusus, saya ingin melacak koordinat layar x,y dari "minion" mana pun yang saat ini ada di layar ("Minion" adalah orang-orang kecil di tengah gambar dengan bilah kecil berwarna merah dan hijau di atas kepala mereka).

Saat ini saya menggunakan kelas Robot Java untuk mengirim tangkapan layar ke program saya saat saya bermain, dan saya mencoba mencari algoritma terbaik untuk menemukan minion dan melacaknya selama mereka tetap berada di layar.

Pemikiran saya saat ini adalah menggunakan jaringan saraf konvolusional untuk mengidentifikasi dan menemukan lokasi minion berdasarkan bilah berwarna di sana. Namun, saya harus mengidentifikasi ulang dan menemukan minion di setiap frame baru, dan sepertinya ini akan memakan biaya komputasi yang mahal jika saya ingin melakukan ini secara real time (~10-60 fps).

Algoritme visi komputer semacam ini sebenarnya bukan spesialisasi saya, tetapi tampaknya masuk akal jika ada algoritma yang mengeksploitasi fakta bahwa objek dalam video bergerak secara terus menerus (yaitu tidak melompat-lompat dari bingkai ke bingkai).

Jadi, apakah ada algoritma yang mudah diimplementasikan untuk menyelesaikan tugas ini?

masukkan deskripsi gambar di sini


person zergylord    schedule 01.03.2012    source sumber


Jawaban (2)


Karena ini adalah permainan komputer, menurut saya warna batangnya harus konstan. Hal ini mungkin tidak benar hanya jika pencahayaan dinamis memengaruhi bilah kesehatan, dan hal ini sangat kecil kemungkinannya.

Jadi, temukan saja semua piksel dengan warna spesifik ini. Kemudian Anda melakukan beberapa operasi morfologi dan mengelompokkan gambar menjadi gumpalan. Dengan memilih hanya blob yang sesuai dengan kriteria tertentu, Anda dapat menemukan lokasi unit.

Saya tahu bahwa jawaban saya tidak melibatkan video, namun pengoperasiannya harus sangat sederhana, sehingga harus sangat cepat.

Untuk pelacakannya, temukan saja per setiap titik yang paling dekat di bingkai berikutnya.

Karena lokasi HUD bersifat konstan, seharusnya tidak ada masalah dalam menghapusnya. Gambar tanpa HUD

Inilah implementasi saya yang cepat dan tidak terlalu kuat di Matlab yang memiliki beberapa keterbatasan:

  1. Unit harus cukup sehat (Lebar minimal 40 piksel)
  2. Palangnya tidak tumpang tindih.

 function FindUnits()
    x = double(imread('c:\1.jpg'));
    green = cat(3,149,194,151); 

    diff = abs(x - repmat(green,[size(x,1) size(x,2)]));
    diff =  mean(diff,3);
    diff = logical(diff < 30);
    diff = imopen(diff,strel('square',1));

    rp = regionprops(diff,'Centroid','MajorAxisLength','MinorAxisLength','Orientation');
    long = [rp.MajorAxisLength]./[rp.MinorAxisLength];
    rp( long < 20) = [];

    xy = [rp.Centroid];
    x = xy(1:2:end);
    y = xy(2:2:end);
    figure;imshow('c:\1.jpg');hold on ;scatter(x,y,'g');
end

Dan hasilnya:

masukkan deskripsi gambar di sini

person Andrey Rubshtein    schedule 02.03.2012
comment
Tambahkan filter kalman sederhana untuk membantu melacak unit dari bingkai ke bingkai dan Anda sudah siap. - person jilles de wit; 02.03.2012

Anda harus menggunakan model yang menyertakan struktur dinamis di dalamnya. Untuk tujuan pelacakan objek Anda Hidden Markov Models (HMMs) (atau secara umum Dynamic Bayesian Networks) sangat cocok. Anda dapat menemukan banyak sumber daya di HMM online. Namun masalah yang akan Anda hadapi, bergantung pada model sistem Anda. Jika dinamika sistem Anda dapat dengan mudah direpresentasikan sebagai model Gauss-Markov linier, maka Kalman Filter sederhana akan lakukan dengan baik. Namun, dalam kasus dinamika non-gaussian nonlinier Anda harus menggunakan Pemfilteran Partikel yang merupakan Sequential Monte Metode Carlo. Filter Kalman dan Filter Partikel merupakan metode berurutan sehingga Anda akan menggunakan hasil yang Anda miliki pada langkah saat ini untuk mendapatkan hasil pada langkah berikutnya. Saya menyarankan Anda untuk memeriksa beberapa tutorial dan makalah online tentang Pelacakan Banyak Objek melalui Filter Partikel. Sejauh yang saya ketahui, kesulitan utama yang akan Anda hadapi adalah, jumlah objek yang ingin Anda lacak karena Anda tidak akan mengetahui jumlah objek yang ingin Anda lacak dan juga objek yang Anda lacak bisa hilang begitu saja. baiklah (Anda dapat membunuh orang-orang kecil itu atau mereka mungkin meninggalkan layar begitu saja) atau orang lain dapat masuk ke layar. Semoga ini membantu.

person jkt    schedule 02.03.2012