Dawid Anioł Blog

Budowanie blender – OSX

Budowanie Blender-a zazwyczaj nastręcza sporo problemów, na szczęście od wersji 2.8 jest dużo łatwiejsze i pociesza fakt że po pierwszym zbudowaniu, kolejne przechodzą już całkiem prosto.

1 ) Wymagania wstępne. Czyli narzędzia jakimi będziemy się posługiwać podczas kompilacji. XCode czyli pakiet zawierający kompilatory C/C++, bibliotekę standardową oraz niezbędne pliku nagłówkowe. Czyli baza dla środowiska języka C/C++ na platformę OS X. Cmake to narzędzie do budowania projektów C/C++.

  • xcode – można zainstalować z apple store
  • cmake – https://cmake.org/download/

Dobrze sobie zrobić specjalny katalog w którym będziemy trzymać wszystkie pliki źródłowe, pliki pomocnicze, pliki bibliotek oraz wszystko to, co będzie potrzebna podczas kompilacji.

  • mkdir blelnder-build

2) Źródła. W tej sekcji pobierzemy źródła samego Blendera i sub-moduły.  W samych źródłach Blendera znajduje się sporo różnych skryptów, plików konfiguracyjnych, są tam pliki pomagające przy budowaniu jak również tworzeniu pakietów pod różne platformy, ale nas w tym momencie to nie będzie interesować. Nas interesuje teraz żeby pobrać te źródła

  • git clone git://git.blender.org/blender.git

mając źródła potrzebujemy jeszcze sub-modułów. Są to źródła, które z jakiegoś względu zostały umieszczone w osobnym repozytorium, a które moją wpływ na dodatkowe funkcje. Żeby można było pobrać sub-moduły należy wejść do katalogu sklonowanego repozytorium

  • cd blender

teraz już można pobierać sub-moduły

  • git submodule update –init –recursive
  • git submodule foreach git checkout master

  • git submodule foreach git pull –rebase origin master

mamy już sub-moduły w następny kroku pobierzemy zależne biblioteki. Są to skompilowane pliki statyczne i dynamiczne wraz z plikami nagłówkowymi. Te biblioteki możemy sobie sami skompilować lub pobrać z repozytorium SVN.

  • svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/darwin lib
    • u mnie pojawił się problem zrywania połączenia podczas pobierania niektórych plików. Można powrócić do kontynuowania pobierania jednak wcześniej trzeba wyczyścić repozytorium
    • cd lib
    • svn cleanup
    • cd ..
    • svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/darwin lib

pobieranie może zająć trochę czasu.

3) Kompilacja. Kompilacja odbywa się ze pomocą komendy ‚make’ możemy jednak mieć kilka jej odmian

  • make full – tworzy wersję ze wszystkimi możliwymi opcjami i zależności
  • make lite – tworzy wersją z minimalną liczbą zależności
  • make headless – tworzy wersji bez interfejsu
  • make deps – tworzy biblioteki zależności

I to już koniec, po kompilacji mamy do dyspozycji działającą wersje Blendera.

Zastosowanie cv2.compare do usuwania tła.

Usuwanie tła to jeden z problemów przetwarzania obrazów, który wydaje się być łatwy, a sprawia spore problemy.  W bibliotece OpenCV jest sekcja usuwania tła  w kontekście wideo. Pojawiają się tam funkcje typu: BackgroundSubtractorMOG , BackgroundSubtractorMOG2 czy BackgroundSubtractorGMG. Usuwają one tło z poszczególnych klatek tworząc maskę, którą można użyć do podświetlania interesujących nas obiektów. Z jednej strony te funkcje nie są idealne, z drugiej strony często posiadamy tylko dwie klatki, w których na jednej jest samo tło, a na drugiej mamy to samo tło z interesującym nas obiektem.  I chociaż możemy skorzystać z powyższych funkcji, to kusi skorzystanie z czegoś prostszego (może bardziej precyzyjnego).

 

Jeśli nasze klatki zawierają „laboratoryjnie” przygotowany obraz, czyli tło jest bez przesunięcia, a każdy piksel tła na jednym obrazie odpowiada pikselowi na drugim obrazie, również wartości tych pikseli są identyczne, sprawę można ograć funkcją compare. Oto jak można to zrobić:

Tworzenie maski zaczynamy od wrzucenia obrazu do cvtColor tworząc obraz jednowarstwowy, później obraz przechodzi przez węzeł compare z ustawionym code na CMP_NE.  Oprócz poszukiwanego śladu, mogą pojawić się artefakty w losowych miejscach, spowodowane one są kompresją. Niewielkie różnice w wartościach pikseli mogą zależeć od rodzaju kompresji oraz jej parametrów. Artefakty usuwamy funkcją erode. Tak przygotowaną maskę możemy wrzucić do bitwise i w efekcie można uzyskać obiekt bez tła.  Takie podejście jest autonomiczne i nie wymaga zmian parametrów dla innych przypadków.

 

Do usuwania tła jest też inna ciekawa metoda, oparta na funkcji watershed. Jest ona bardzo dokładna, jednak wymaga podania kluczowych regionów obiektu, który chcemy odseparować od tła.  Opiszę ją już następnym razem.

„Kompilacja” kodu Python-a

Czasami trzeba udostępnić komuś aplikacje chcąc jednoczenie zachować pewne fragmenty kodu jako ukryte. Dzieje się tak w przypadku aplikacji stacjonarnych, gdzie użytkownik ściąga sobie cały program, by później móc go uruchamiać na swoim komputerze bez potrzeby łączenia się gdziekolwiek. W Pythonie jest z tym mały problem, ponieważ  jest to język interpretowany. Szczerze  mówiąc jest to duży problem, gdyż na dzień dzisiejszy 2018 r. nie ma możliwości, by w 100%-tach zabezpieczyć kod pythona przed podglądnięciem.

Bez wchodzenia w szczegóły, przy pomocy samego Python-a można „skompilować” kod do postaci nie czytelnej dla człowieka. Dekompilacja takiego kodu nie jest trywialna nawet dla zaawansowanych użytkowników.  W większości przypadków jest to wystarczająca forma.

Kompilowanie wszystkich plików py w bieżącym katalogu:

python -m compileall .

Bibliografia:

  • http://effbot.org/zone/python-compile.htm
  • https://docs.python.org/3/library/compileall.html#module-compileall

O, o … ImportError: DLL load failed: The specified procedure could not be found.

Problem z plikami DLL pod Windows-em gdy używa się bibliotek takich jak numpy czy OpenCV , może przysporzyć sporo problemów. Często problem stanowi brak standardowych bibliotek VisualStudio, w których była kompilowana dana biblioteka, wtedy wystarczy  Visual C++ redistributable 2015  w odpowiedniej wersji lub Universal C Runtime. Choć czasem to nie wystarcza i pojawia się problem jakiej biblioteki nam brakuje i w jakiej powinna być wersji.

Z pomocą przychodzą nam dwa narzędzia.  Dependencywalker – sprawdzanie zależności w Windows.  Jest to bardzo stare narzędzie i nie zawsze umie sobie rozwiązać dobrze wszystkie zależności. I jest też procmon, tutaj można się dowiedzieć jakich i gdzie nasz Python szuka bibliotek i dlaczego to mu się nie udaje.

 

Copyright © 2020 Dawid Anioł Blog

Theme by Anders NorenUp ↑