Wątek przeniesiony 2018-10-21 16:17 z Python przez hauleth.

Rozpoznanie obrazu

0

Witam. Piszę program, który w czasie rzeczywistym wyszukuje dany obrazek / zestaw pikseli. Problem w tym, że ten obrazek cały czas się zmienia. Jest bardzo podobny ale odcień pikseli się zmienia. Kilka zdjęć w załączniku, dla przykładu. Chciałbym, żeby ten program rozpoznawał dany obrazek mimo, że jest troszkę inny. Do napisania tego wykorzystuję język AutoIT i biblioteki

IMGSearch(https://www.youtube.com/watch?v=nmexGsEm0Gs&t=287s) lub 
PixelSearch(https://www.youtube.com/watch?v=J2aEJQyFf_4).
0

"wyszukuje" czy "rozpoznaje". Czy Python ma coś wspólnego z autoit?

0
GoToSleep napisał(a):

Witam. Piszę program, który w czasie rzeczywistym wyszukuje dany obrazek / zestaw pikseli. Problem w tym, że ten obrazek cały czas się zmienia. Jest bardzo podobny ale odcień pikseli się zmienia. Kilka zdjęć w załączniku, dla przykładu. Chciałbym, żeby ten program rozpoznawał dany obrazek mimo, że jest troszkę inny. Do napisania tego wykorzystuję język AutoIT i biblioteki

IMGSearch(https://www.youtube.com/watch?v=nmexGsEm0Gs&t=287s) lub 
PixelSearch(https://www.youtube.com/watch?v=J2aEJQyFf_4).

Może jednak wrzuć te obrazki jako załączniki do posta, jakoś nie uśmiecha mi się otwieranie RARa w którym może być wszystko ;)

Co do wyszukiwania, nie wiem czy istnieje jakiś binding OpenCV do AutoIT, żeby wykorzystać jakieś gotowce które powinny tam być ale tak na dobrą sprawę mógłbyś zrobić to

  • metodą dość prymitywną, czyli obliczyć średnie odchylenie kwadratowe składowych każdego piksela od wzorcowego, znormalizować względem przestrzeni kolorów (błąd nie będzie większy niż 255^2 na jednej składowej) i rozmiaru obrazu i przyjąć dopuszczalną progową różnicę - np. 1e-3, 1e-4 itd.
  • metodą "z armatą na wróble", czyli nauczyć sieć neuronową rozpoznawać dany obrazek na lekko zmodyfikowanych kopiach docelowego obrazu, np. zmieniony odcień, kontrast, dodany jakiś maźg z pikseli itd - tracisz kontrolę nad algorytmem na rzecz widzimisię sieci, ale możesz dostać coś ciekawego :)

Dla lepszego efektu rozważ konwersję obrazu z RGB do YCbCr - badanie różnic w luminancji i chrominancji obrazu jest nieco bardziej "naturalne", niż w składowych RGB ;)

0

Nie możesz w odcieniach szarości zrobić?

Też możesz obniżyć prób funkcji akceptacji, lub regularization rate zmienić jeśli dużo szumu się dostaje.

0

Napiszę dokładniej o co chodzi. Gram w grę League Of Legends. W tej grze w prawym dolnym rogu jest minimapa jak na obrazku:
https://i.imgur.com/y4uB1bl.png
Pokazana jest sytuacja w, której posiadam wizję po stronie przeciwnika, jest ona dlatego, że jest tam postawiony mój "ward". Chciałbym, żeby mój program analizował tą minimapę i w momencie gdy wykryje na obszarze na którym mam wizję miniaturkę przeciwnika to powiadomi mnie o tym głosowo. Ten program nie musi być w AutoIT. Lepiej znam Pythona, lecz tam znalazłem funkcje, które myślałem, że mi pomogą. Znalazłem coś takiego, lecz nie znam za bardzo angielskiego. Prosiłbym o nakierowanie.

https://medium.com/@farzatv/deepleague-leveraging-computer-vision-and-deep-learning-on-the-league-of-legends-mini-map-giving-d275fd17c4e0
https://github.com/farzaa/DeepLeague

0
GoToSleep napisał(a):

Pokazana jest sytuacja w, której posiadam wizję po stronie przeciwnika, jest ona dlatego, że jest tam postawiony mój "ward". Chciałbym, żeby mój program analizował tą minimapę i w momencie gdy wykryje na obszarze na którym mam wizję miniaturkę przeciwnika to powiadomi mnie o tym głosowo. Ten program nie musi być w AutoIT. Lepiej znam Pythona, lecz tam znalazłem funkcje, które myślałem, że mi pomogą. Znalazłem coś takiego, lecz nie znam za bardzo angielskiego. Prosiłbym o nakierowanie.

To chyba najłatwiej byłoby Ci wykorzystać w tym celu OpenCV niż pisać coś swojego od zera, są w nim gotowe narzędzia do rozpoznawania np. twarzy więc rozpoznanie kolorowej kropki / jakiegoś tam symbolu przeciwnika chyba nie powinno być problemem.

https://www.learnopencv.com/image-recognition-and-object-detection-part1/
https://docs.opencv.org/3.4/d4/dc6/tutorial_py_template_matching.html

0

Rozumiem, że najpierw muszę zrobić plik "haarcascade" dla każdej miniaturki. Ile potrzebuję takich obrazów, żeby prawidłowo wykrywał obiekt?

0

Mówi się, że dobry trening kaskad Haara to około 1000 pozytywnych i 10000 negatywnych. Dobre efekty miałem już przy ~700 pozytywnych i ~9000 negatywnych. Nie wiem czy dla twojego problemu akurat to rozwiązanie będzie najlepsze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1