Worked on a KMeans Clustering approach to find dominant color in an image. The module here uses a few external libraries that need some TLC to work correctly - so make sure your Python house is in order. Bonus feature, it runs the analysis process in another thread so the image analysis doesnât block touch
A little hard to setup, for me, but very useful! Thank you!
Nice, thank you for posting this, Matthew! A side goal of mine is to port this logic to a gpu based library so that we can start to do this real time
i have trouble making the thing work, are you guys still able to use it with last versions of python, td and dependencies ? sklearn is installed properly as said by the test results after install, still td returns me with strange issue about it being badly installed
what sort of issues do you see returned?
I generally test in three tiers:
In TD itâs important to do a sys.path.insert(0,path/to/my/site-packages) then import your modules (NOTE: this has to be done before any other import statements are executed in your TOE file, so you need to manage this carefully if you have lots of executeDATâs firing code that uses libraries at start.)
I think when you add your external python path to the preferences field, it actually appends it to the sys.path, if you print the paths youâll see it at the end in my experience.
This usually makes the most sense because you want to default to what comes with TD and fall back to other libraries as you need them⌠but Iâve personally had tons of issues with more advanced libraries that need some special version of numpy (+MKL) for example.
seems like my sys path is correct, as it includes sklearn and my site package folder, i used the text DAT method provided by raganmd and printed sys.path to check, its correct !
and the errors returned are those :
python >>>
Traceback (most recent call last):
File â</base1/base_dominant_color/domColorEXT:op(â/base1/base_dominant_color/domColorEXTâ).run()>â, line 1
td.Error: File âC:/Program Files/Python37/Lib/site-packages\sklearn_check_build_init.pyâ, line 44
from ._check_build import check_build # noqa
r = previousimport(*args, **kw)
ImportError: No module named âsklearn.__check_build._check_buildâ
During handling of the above exception, another exception occurred:
File â/base1/base_dominant_color/domColorEXTâ, line 12
r = previousimport(*args, **kw)
r = previousimport(*args, **kw)
File âC:/Program Files/Python37/Lib/site-packages\sklearn_init_.pyâ, line 63
from . import __check_build
r = previousimport(*args, **kw)
r = previousimport(*args, **kw)
File âC:/Program Files/Python37/Lib/site-packages\sklearn_check_build_init.pyâ, line 46
raise_build_error(e)
File âC:/Program Files/Python37/Lib/site-packages\sklearn_check_build_init.pyâ, line 41, in raise_build_error
%s"ââ % (e, local_dir, ââ.join(dir_content).strip(), msg))
ImportError: No module named âsklearn.__check_build._check_buildâ
Contents of C:/Program Files/Python37/Lib/site-packages\sklearn_check_build:
setup.py check_build.cp37-win_amd64.pyd__init.py
pycache
It seems that scikit-learn has not been built correctly.
If you have installed scikit-learn from source, please do not forget
to build the package before using it: run python setup.py install
or
make
in the source directory.
If you have used an installer, please check that it is suited for your
Python version, your operating system and your platform.
Results of run operation resulted in exception. <type:textDAT path:/base1/base_dominant_color/domColorEXT> <class âtd.textDATâ>
python >>>
Error retrieving extension for /base1/base_dominant_color: (Extension 1) AttributeError: module â/base1/base_dominant_color/domColorEXTâ has no attribute âDomColorâ
python >>>
it seems like my build of scikit-learn isnt correct, despite iâve checket it correctly with the built in test that commes with the librairy
i surely am missing something easy ⌠anyway thanks for the help !
hey olivercouche - this is a some grumbly python silliness.
Iâd guess that itâs a numpy version issue. You can check this by using
import numpy
print(numpy.__version__)
Ideally you should see version 1.15.4.
If you donât see this, than itâs likely that the distributed version of numpy with Touch is different.
To work around this, check the repo for the latest update. There there is now a new folder called dep. Inside youâll see a script to do some python clean-up and organizing. You should right click and run as admin - it will pull the required libraries into a new folder called python in the dep directory.
In the TOE file thereâs now an addition to the start-up script that will add your newly created local dep directory to the sys.path. This will add the new directory to the top of your list. Quit and restart touch, and see if you still get the error. Fingers crossed that all of that hoopla will get you up and running.
hey !
thanks a lot for your response !
my version is 1.15.4
gonna try the rest !
it seems that for some reason touchdesigner is not able to import cv2, numpy and sklearn and i cannot figure out why, every folder is appended in the sys path correctly
Hey there sir - so you shouldnât need to add each folder individually, though that shouldnât break anything. If you print out the contents of sys.path, what folders to you see, in what order?
i see :
E:/vjing/iterative works/appli vjing/exemples/touchdesigner-dominant-color-masterv2/dep/python/
C:\Program Files\Derivative\TouchDesigner099\bin
C:\Program Files\Derivative\TouchDesigner099\bin\python35.zip
C:\Program Files\Derivative\TouchDesigner099\bin\DLLs
C:\Program Files\Derivative\TouchDesigner099\bin\lib
C:\Program Files\Derivative\TouchDesigner099\bin
C:\Program Files\Derivative\TouchDesigner099\bin\lib\site-packages
C:/Program Files/Derivative/TouchDesigner099/Config/Cmd
Oh bother.
Okay, some questions then.
Do you have python installed for windows - which version?
Iâm guessing youâve confirmed that all of the libraries are downloaded into dep/python?
yep, python is the latest build, 3.7.1
executing your .cmd installed all the libraries into dep/python
i just tried the last version from the repo on another computer on wich i fresh installed python and touchdesigner, and it returns me the same error :
python >>>
Traceback (most recent call last):
File â</base1/base_dominant_color/domColorEXT:op(â/base1/base_dominant_color/domColorEXTâ).run()>â, line 1
td.Error: ImportError: numpy.core.multiarray failed to import
File â/base1/base_dominant_color/domColorEXTâ, line 7
r = previousimport(*args, **kw)
File âC:\Program Files\Derivative\TouchDesigner099\bin\lib\site-packages\cv2_init_.pyâ, line 7
from . import cv2
r = previousimport(*args, **kw)
r = previousimport(*args, **kw)
ImportError: numpy.core.multiarray failed to import
Results of run operation resulted in exception. <type:textDAT path:/base1/base_dominant_color/domColorEXT> <class âtd.textDATâ>
python >>>
Error retrieving extension for /base1/base_dominant_color: (Extension 1) AttributeError: module â/base1/base_dominant_color/domColorEXTâ has no attribute âDomColorâ
python >>>
despite dep/python is in the sys.path, importing cv2, numpy, scipy, and sklearn returns errors
seems like touchdesigner is not able to use dep/python to import libraries !
importing those libraries in python trough command prompt is working
okay - Iâd start downgrading your python install on Windows to 3.5+ - Iâd guess that the 3.7 version that got pulled for your local python installation isnât compatible with the 3.5+ version that touch uses.
Then delete that python directory and re-run that cmd script.
Working with outside libraries is be pretty painful at first - so I totally feel your frustration here.
i just installed python 3.5.4, deleted 3.7, re-runned the cmd script wich worked well, but still td isnât able to import libraries, is there something to do td side to use python and libraries properlly ?
sorry for all those questions, and thanks a lot for your help !
hrm - well thatâs some rough business.
The other option isnât one that Iâd recommend, but is another option.
You can install python packages to a specific target path inside of your touch installation. Thereâs a post on the process here:
derivative.ca/Forum/viewtop ⌠545ae50a0e
The approach here would be to take that cmd script and edit itâs target to be your lib\site-packages directory. That should look something like this:
pip install --target="C:\\Program Files\\Derivative\\TouchDesigner099\\bin\\lib\\site-packages" numpy --upgrade
pip install --target="C:\\Program Files\\Derivative\\TouchDesigner099\\bin\\lib\\site-packages" scipy
pip install --target="C:\\Program Files\\Derivative\\TouchDesigner099\\bin\\lib\\site-packages" cv2
pip install --target="C:\\Program Files\\Derivative\\TouchDesigner099\\bin\\lib\\site-packages" sklearn
The caution that I have to offer you is that there are some things in Touch that currently rely on the distributed versions of numpy, so if youâre using camschnapper (for example) this will likely break that bit. You can always delete the packages to recover. Or a clean installation of Touch will do the job.
Having been bitten by this approach, I canât say that Iâd recommend it - though I do know that it works⌠just a little more brute force than I typically like.
hello! this base is beautiful and exactly what i need to implement in a machine learning algorithm for VJ show file management. I am rather struggling with getting the Tox running without compilation errors.
I am seeing this:
wondering if you all have any idea
it seemed as though much of the python library management was intended to be automated with the base version 1.1.1? on first load after uninstalling python libraries for troubleshooting purposes the base seemed to open its own command prompt and attempted to pip install the libraries which seemed brilliant, but between trying various 3.5 and 3.8 python releases, i cant get past this bug. whenever i mess with that line of code (186) to make the error go away, a larger list of errors matching the issues above pops up