Monstera – domácí „monstrum“, vše o ní – Blog

Monstera je skutečným šampiónem, pokud jde o množství mýtů a legend, které si lidé o této rostlině vytvořili. Upír, muzhegon, obsahuje nebezpečný jed, absorbuje spoustu kyslíku – bez ohledu na obavy, které obklopují velkolepou domácí květinu. Ezoterici věří, že monstera doma je klíčem k vitalitě, vynikající výkonnosti a silné imunitě. Velkolepá exotická rostlina, která ozdobí váš interiér – monstera, co je to za rostlinu?
Trocha historie
Když se účastníci západoindické kampaně poprvé ocitli na ostrovech v Karibiku, jejich hrůza neznala mezí: obrovské děsivé stromy s bizarními listy jako by visely přímo ve vzduchu, děsivě, nepochopitelně se držely svých kořenů.
“Příšerky, příšery,” ozvalo se ze všech stran.
Dobyvatelé viděli „monstrum“, rostlinu zvanou „monstrum“.

Nikdy předtím nic takového neviděli, obrovské liány s „roztrhanými“ listy, kořeny, které z nějakého důvodu opustily zem – pro Evropana příliš šokující pohled, stejně jako nevěřit v upíří rostlinu, která vysává život. Jejich obavy lze pochopit, stačí vidět fotografii monstery v přírodních podmínkách. Představte si stálezelenou liánu, dosahující několika desítek metrů s obrovskými listy o průměru až metr! V přírodě je známo až 30 druhů monster. Ve sklenících může dorůst až 20 metrů samozřejmě, vnitřní monstera je mnohem skromnější.
Mýty a legendy
Jak houževnaté jsou předsudky, mnozí se stále obludy bojí, a to jim brání pořídit si luxusní květinu. „Monstrum“ však zůstává jedním z nejmódnějších mezi pokojovými rostlinami, protože péče o monsteru nezpůsobuje mnoho problémů a rostlina se harmonicky vejde do jakéhokoli interiéru.
Mýtus 1. Monstera je energetický upír. Zpočátku lidé věřili, že monstera není vůbec energetické monstrum, ale velmi přirozený upír, pijící lidskou krev, ale nechává stranou vzdálené časy a divokou morálku, moderní vampirismus se specializuje na „energii“, iluzorní substanci, kterou nelze měřit. S největší pravděpodobností mýtus vznikl kvůli úžasné síle rostliny, která může prorůst i kmenem stromu! Mimochodem, visící kořeny, které nejsou odstraněny včas, mohou růst ke stěně domu.
Mýtus 2. Předpokládá se, že monstera nemůže vystát muže; je obdařena schopností „vyhnat“ zástupce silnějšího pohlaví. Je těžké si představit absurdnější předsudek, stačí si vzpomenout na počet mužů pracujících v kancelářích, kde se tato květina nachází.
Mýtus 3 . Rostlina je schopna v noci aktivně absorbovat kyslík. Je známo, že pod vlivem světla procházejí zelené části každé rostliny procesem fotosyntézy, v důsledku čehož vzniká kyslík, ale v noci jej rostlina absorbuje, monstera není výjimkou, pokud v noci nedýchá velký rostlina vyžaduje trochu více kyslíku, ale fotosyntéza je také docela aktivní. Pokud máte pochybnosti, je lepší umístit květinu do obývacího pokoje nebo jiné místnosti, kde lidé nespí.
Mýtus 4 , což není zrovna mýtus. Rostlina je jedovatá. Monstera je skutečně jedovatá, takže stojí za zvážení pro ty, kteří mají děti a domácí mazlíčky. Při dodržení základních bezpečnostních pravidel vám Australané nehrozí ani plody monstery poté, co je nejprve uvaříte.
Co to vlastně je?

Velké listy nejenže uvolňují během fotosyntézy hodně kyslíku, ale v místnosti, kde „monstrum“ roste, zůstává vzduch vlhký. Monstera pohlcuje formaldehydové výpary a elektromagnetické vlny a také podporuje ionizaci vzduchu. To vše má samozřejmě blahodárný vliv na zdraví lidí. Ezoterici tvrdí, že rostlina pomáhá posilovat imunitní systém, pomáhá zvládat nejtěžší úkoly a snadno se vedle ní pracuje. Pokud se přesto rozhodnete mít doma okouzlující „monstrum“, měli byste se seznámit s nejoblíbenějšími typy vnitřních monster.
Oblíbené druhy monster

Delikatesa nebo lahůdka, Monstera deliciosa . V přírodních podmínkách dorůstá do gigantických velikostí. V místnosti může dosáhnout výšky 2-3 metrů. Odrůda je známá svým velkolepým kvetením, ale není snadné dosáhnout.
Monstera Borziga – elegantní vzhled s listy o velikosti až 25 cm, listy s bělavým povlakem, díky kterému je mezi ostatními nápadnými. Péče o něj vyžaduje určité dovednosti.
Půlměsíc, expilata nebo šikmá monstera. Jedná se o nejoblíbenější druh v domácím květinářství. Poměrně malá rostlina s listy do průměru 20 cm.
Proražené monstrum tak pojmenovaný kvůli protáhlým listům „do díry“. Má poměrně velké listy až 90 cm dlouhé a 25 cm široké.
Adanson – velký druh, dorůstající až 3 metrů.
Péče o monsteru
Nejlepší péči o pokojovou rostlinu lze zajistit přiblížením podmínek k přirozeným. Monstera roste v polostínu vlhkých tropů, je důležité pamatovat na to, že se jedná o lián, který potřebuje podporu.
osvětlení
Umístěte monsteru mimo přímé sluneční světlo, je lepší, když je květináč umístěn ve vzdálenosti od okna, ale květina bude mít dostatek rozptýleného světla. Rostlina může být nazývána tolerantní vůči stínu, ale i ve stínu může zemřít.
Podvazky
Upozorňujeme, že Monstera roste poměrně rychle a potřebuje prostor a podporu. Některé kořeny jsou umístěny venku, není třeba je zastřihávat, dostávají vlhkost a živiny ze vzduchu nebo z přídavného květináče.
Teplotní podmínky
V létě se Monstera cítí dobře při teplotách 25-30 stupňů. V zimě je lepší snížit teplotu na 18 stupňů, pokud to není možné, rostlina v zimě pokračuje v růstu. Při teplotách pod 12 stupňů může květina zemřít.
Zalévání a vlhkost
Tropická monstera miluje vlhkost, ale příliš mnoho vody ji může poškodit. Pravidelně ji zalévejte, ale sledujte, zda se na listech neobjevují kapky vody, protože to signalizuje přemokření. Miluje stříkání a koupání, procedury by měly být prováděny vodou při pokojové teplotě. Listy je potřeba otřít a vyleštit, nezapomínejte na jejich jedovatost!
Vrchní oblékání a přesazování
Hnojení se provádí hotovým složením minerálních hnojiv jednou za 2 týdny na jaře a v létě.
Formace keře. Rostlina potřebuje podporu a řez. Růst je regulován sevřením vrcholu. Náhodné kořeny se neodstraňují, sbírají se a vysazují do dalšího květináče.
První dva roky se monstera přesazuje každoročně od 3 let, transplantace se provádí každý druhý rok od pěti let, tento postup se provádí po třech letech, ale vyplatí se pravidelně přidávat čerstvou půdu hrnec. Květináč lze ozdobit, pokud si koupíte květináč. Dospělou rostlinu není třeba přesazovat, ale lze změnit pouze horní vrstvu půdy. Pro opětovnou výsadbu si vezměte hotovou kompozici nebo ji připravte sami ze 3 dílů trávníku a po jednom z rašeliny, listnaté půdy, písku, rašeliny a humusu.
Reprodukce
Monstera je liána, nejlépe se množí řízkováním. Odřízněte vršek nebo řízky s vzdušným kořenem, který zakoření v květináči. Tato metoda je poměrně jednoduchá a nevyžaduje speciální dovednosti. Může se také množit semeny, které se vysévají do vlhké půdy. Klíčky se objeví po 2-4 týdnech, rostliny se vyberou a zasadí.
Nemoci
Monstera je poměrně silná rostlina, nejčastěji onemocní kvůli nesprávné péči.
Žloutnutí listů – nadměrné sluneční světlo, tmavé skvrny – příliš mnoho vlhkosti. Hnědé listy mohou naznačovat nedostatek zalévání a malou nádobu. Malé listy bez řezů – nedostatek světla.
U škůdců, jako jsou šupiny, mšice a svilušky, postačí ošetření insekticidy.
Monstera je silná rostlina, připravená sdílet svou sílu se svým majitelem, krásné „monstrum“ se může stát skutečnou ozdobou vašeho domova. Více o pokojových rostlinách na našem blogu! Nedávno jsme publikovali článek o filodendronu. Doporučujeme jak začínajícím pěstitelům květin, tak profesionálům v této oblasti, aby si ji přečetli.

Jak se můžete bavit během novoročních svátků? Hrát počítačové hry? Ne! Je lepší napsat bota, který to udělá za vás, a pak si jít sami postavit sněhuláka a pít svařené víno.
Kdysi dávno, ve školních letech, mě fascinovala jedna z populárních MMORPG her — Lineage 2. Ve hře se můžete sdružovat do klanů, skupin, navazovat přátelství a bojovat se soupeři, ale obecně je hra plná monotónních akcí: plnění úkolů a farmaření (shromažďování zdrojů, získávání zkušeností).
Nakonec jsem se rozhodl, že bot by měl řešit jeden problém: farmaření. Pro ovládání budou použity emulované kliky myši a stisky klávesnice a pro prostorovou orientaci počítačové vidění, programovacím jazykem je Python.
Obecně není tvorba bota pro L2 žádnou novinkou a existuje poměrně dost hotových. Dělí se do 2 hlavních skupin: ty, které jsou implementovány do práce klienta, a klikery.
První jsou tvrdý cheat, z herního hlediska je jejich používání příliš nesportovní. Druhá možnost je zajímavější, vzhledem k tomu, že ji lze s určitými úpravami použít v jakékoli jiné hře a implementace bude zajímavější. Ty klikery, které jsem našel, z různých důvodů nefungovaly, nebo fungovaly nestabilně.
Varování: Veškeré zde uvedené informace slouží pouze pro vzdělávací účely. Zejména pro vývojáře her, aby jim pomohly lépe bojovat s boty.
Práce s oknem
Všechno je zde jednoduché. Budeme pracovat se snímky obrazovky z herního okna.
Za tímto účelem definujeme souřadnice okna. S oknem pracujeme pomocí modulu win32gui. Požadované okno definujeme jeho názvem — „Lineage 2“.
Kód metod pro získání pozice okna
def get_window_info(): # set window info window_info = <> win32gui.EnumWindows(set_window_coordinates, window_info) return window_info # EnumWindows handler # sets L2 window coordinates def set_window_coordinates(hwnd, window_info): if win32gui.IsWindowVisible(hwnd): if WINDOW_SUBSTRING in win32gui.GetWindowText(hwnd): rect = win32gui.GetWindowRect(hwnd) x = rect[0] y = rect[1] w = rect[2] - x h = rect[3] - y window_info['x'] = x window_info['y'] = y window_info['width'] = w window_info['height'] = h window_info['name'] = win32gui.GetWindowText(hwnd) win32gui.SetForegroundWindow(hwnd) Obrázek požadovaného okna získáme pomocí ImageGrab:
def get_screen(x1, y1, x2, y2): box = (x1 + 8, y1 + 30, x2 - 8, y2) screen = ImageGrab.grab(box) img = array(screen.getdata(), dtype=uint8).reshape((screen.size[1], screen.size[0], 3)) return img Nyní budeme pracovat s obsahem.
Hledání monstra
Nejzajímavější na tom je, že implementace, které jsem našel, mi nevyhovovaly. Například v jedné z populárních a dokonce i placených se to dělá pomocí herního makra. A „hráč“ musí do makra pro každý typ monstra napsat něco jako „/target Název monstra Bla Bla“.
V našem případě se budeme řídit touto logikou: nejdříve najdeme všechny bílé texty na obrazovce. Bílý text může být nejen jméno monstra, ale i jméno samotné postavy, jméno NPC nebo dalších hráčů. Proto je třeba najet kurzorem na objekt a pokud se objeví zvýraznění s požadovaným vzorem, pak můžete na cíl zaútočit.
Zde je původní obrázek, se kterým budeme pracovat:

Natřeme si název černou barvou, aby nepřekážel, a obrázek převeďme do černobílého režimu. Původní obrázek v RGB – každý pixel je pole tří hodnot od 0 do 255, kde černobílý režim je jedna hodnota. Tím se výrazně sníží množství dat:
img[210:230, 350:440] = (0, 0, 0) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
Najdeme všechny bílé předměty (toto je bílý text se jmény monster)
ret, threshold1 = cv2.threshold(gray, 252, 255, cv2.THRESH_BINARY) 
- Budeme filtrovat podle obdélníku o rozměrech 50×5. Tento obdélník nejlépe vyhovoval.
- Odstraňujeme šum uvnitř obdélníků s textem (v podstatě vše mezi písmeny vybarvíme bílou barvou)
- Opět odstraňujeme šum rozmazáním a roztažením pomocí filtru.
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (50, 5)) closed = cv2.morphologyEx(threshold1, cv2.MORPH_CLOSE, kernel) closed = cv2.erode(closed, kernel, iterations=1) closed = cv2.dilate(closed, kernel, iterations=1) 
Najdeme středy výsledných skvrn
(_, centers, hierarchy) = cv2.findContours(closed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) Funguje to, ale dá se to udělat zábavnější (například pro monstra, jejichž jména nejsou viditelná, protože jsou daleko) – pomocí TensorFlow Object Detection, jako tady, ale někdy v příštím životě.
Nyní ukážeme kurzorem na nalezené monstrum a pomocí metody cv2.matchTemplate se podíváme, zda se objevilo zvýraznění. Zbývá už jen stisknout LMB a tlačítko pro útok.
Plakat
Vyřešili jsme hledání monstra, bot už umí najít cíle na obrazovce a ukázat na ně myší. Pro útok na cíl je potřeba kliknout levým tlačítkem myši a stisknout „útok“ (útok lze svázat s tlačítkem „1“). Kliknutím pravým tlačítkem myši otočíte kameru.
Na serveru, kde jsem bota testoval, jsem zavolal proklikový AutoIt, ale z nějakého důvodu to nefungovalo.
Jak se ukázalo, hry se chrání před automatickými kliky různými způsoby:
- hledat procesy, které emulují kliknutí
- Zaznamenávání kliknutí a určování barvy objektu, na který bot klikne
- identifikace vzorců kliknutí
- Detekce bota podle frekvence kliknutí
A některé aplikace, jako například klient tohoto serveru, dokážou určit zdroj kliknutí na úrovni operačního systému. (Bylo by skvělé, kdyby mi někdo mohl říct, jak přesně).
Zkoušel jsem nějaké frameworky, které umí klikat (včetně pyautogui, robot frameworku a něčeho dalšího), ale žádná z možností nefungovala. Napadlo mě postavit zařízení, které by stisklo tlačítko (někdo to dokonce udělal). Zdá se, že potřebuji kliknutí, které je co nejvíce podobné hardwarovému. Proto jsem se začal zabývat napsáním vlastního ovladače.

Řešení problému bylo nalezeno na internetu: USB zařízení, které lze naprogramovat tak, aby odesílalo požadovaný signál – Digispark.
Nechtělo se mi čekat několik týdnů na Aliexpress, takže hledání pokračovalo.
Knihovna mi v Pythonu 3.6 nefungovala – objevila se chyba narušení přístupu nebo něco podobného. Takže jsem musel přejít na Python 2.7, kde všechno fungovalo perfektně.
Pohyb kurzoru
Knihovna může odesílat libovolné příkazy, včetně toho, kam se má myš pohybovat. Vypadá to ale jako teleportace kurzoru. Potřebujeme, aby byl pohyb kurzoru plynulý, abychom nebyli zablokováni.
V podstatě se úkol redukuje na přesun kurzoru z bodu A do bodu B pomocí wrapperu AutoHotPy. Opravdu si musím pamatovat matematiku?
Po krátkém přemýšlení jsem se rozhodl to vygooglit. Ukázalo se, že jsem nemusel nic vymýšlet – problém řeší Bresenhamův algoritmus, jeden z nejstarších algoritmů v počítačové grafice:
Implementaci si můžete přečíst přímo z Wikipedie
Operační logika
Všechny nástroje jsou k dispozici, zbývá to nejjednodušší – napsat skript.
- Pokud je monstrum naživu, pokračujte v útoku.
- Pokud není cíl, najděte si cíl a začněte útočit.
- Pokud jsme cíl nenašli, trochu se otočíme.
- Pokud pětkrát nikoho nenajdete, jdeme na stranu a začneme znovu.
Z těch více či méně zajímavých popíšu, jak jsem získal zdravotní stav oběti. Obecně: pomocí OpenCV najdeme ovládací prvek zobrazující zdravotní stav cíle podle vzoru, vezmeme proužek vysoký jeden pixel a v procentech spočítáme, kolik je vybarveno červeně.
Kód metody pro získání úrovně zdraví oběti
def get_targeted_hp(self): """ return victim's hp or -1 if there is no target """ hp_color = [214, 24, 65] target_widget_coordinates = <> filled_red_pixels = 1 img = get_screen( self.window_info["x"], self.window_info["y"], self.window_info["x"] + self.window_info["width"], self.window_info["y"] + self.window_info["height"] - 190 ) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) template = cv2.imread('img/target_bar.png', 0) # w, h = template.shape[::-1] res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED) threshold = 0.8 loc = np.where(res >= threshold) if count_nonzero(loc) == 2: for pt in zip(*loc[::-1]): target_widget_coordinates = # cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (255, 255, 255), 2) if not target_widget_coordinates: return -1 pil_image_hp = get_screen( self.window_info["x"] + target_widget_coordinates['x'] + 15, self.window_info["y"] + target_widget_coordinates['y'] + 31, self.window_info["x"] + target_widget_coordinates['x'] + 164, self.window_info["y"] + target_widget_coordinates['y'] + 62 ) pixels = pil_image_hp[0].tolist() for pixel in pixels: if pixel == hp_color: filled_red_pixels += 1 percent = 100 * filled_red_pixels / 150 return percent Bot nyní chápe, kolik HP má oběť a zda je stále naživu.
Základní logika je připravena, takto to nyní vypadá v praxi:
Pro zaneprázdněné lidi jsem to zrychlil o 1.30:XNUMX.
Přestaňte pracovat
Veškerá práce s kurzorem a klávesnicí se provádí prostřednictvím objektu autohotpy, jehož činnost lze kdykoli zastavit stisknutím tlačítka ESC.
Problém je v tom, že bot je neustále zaneprázdněn prováděním smyčky, která je zodpovědná za logiku akcí postavy, a obslužné rutiny událostí objektu a autohotpy nezačnou naslouchat událostem, dokud smyčka není dokončena. Program nelze zastavit ani myší, protože jej ovládá bot a pohybuje kurzorem tam, kam potřebuje.
Tohle nám nefunguje, takže jsme museli bota rozdělit do dvou vlákn: naslouchání událostem a provádění logiky akcí postavy.
Vytvořme 2 vlákna
# init bot stop event self.bot_thread_stop_event = threading.Event() # init threads self.auto_py_thread = threading.Thread(target=self.start_auto_py, args=(auto_py,)) self.bot_thread = threading.Thread(target=self.start_bot, args=(auto_py, self.bot_thread_stop_event, character_class)) # start threads self.auto_py_thread.start() self.bot_thread.start() a nyní zavěsíme obslužnou rutinu na ESC:
auto_py.registerExit(auto_py.ESC, self.stop_bot_event_handler) při stisknutí klávesy ESC nastavíme událost
self.bot_thread_stop_event.set() a v logické smyčce znaků kontrolujeme, zda je událost nastavena:
while not stop_event.is_set(): Nyní můžeme bota klidně zastavit stisknutím tlačítka ESC.
Závěr
Zdálo by se, proč ztrácet čas produktem, který nepřináší žádný praktický užitek?
Ve skutečnosti je počítačová hra z pohledu počítačového vidění téměř totéž co realita natočená na kameru a nabízí obrovské možnosti využití. Vynikající příklad je popsán v článku o podvodních robotech, kteří střílejí lasery na lososy. Článek může také pomoci vývojářům her v boji proti botům.
No, seznámil jsem se s Pythonem, dotkl se počítačového vidění, napsal svou první slabomyslnou umělou inteligenci a užil si spoustu zábavy.
Doufám, že to bylo také zajímavé.