На каком языке лучше работать с OpenCV? Нейросетями? OpenGL?
Преподаватель информатики дал на лето поиграться с OpenCV, нейросетями и OpenGL.
Используя OpenCV python, я написал два скрипта для распознавания чёрных и цветных цифр на белом фоне. Когда я его спросил про numpy (может сначала с ним поиграться, так как без него в питоне с OpenCV как без рук), он сказал, что его на нормальные задачи уже не хватит, тогда надо на с++ переезжать. Но при этом он сказал, что с отладкой я замучаюсь на пюсах.
Порыскав в интернете, я собрал информацию по этому поводу и составил преимущества и недостатки обоих языков в разработке.
Я сделал вывод о том, что питон проще как язык, на нём быстрее идёт отладка и разработка, много вспомогательных библиотек, практически не чувствуется работа на низком уровне. Но при этом numpy негоден для серьёзных задач, в том числе для задач в реальном времени(камеры и прочее), а мне это потребуется для моих проектов.
На С++ код работает быстрее, OpenCV изначально для плюсов сделан, соответсвенно возможностей и полезных функций там будет больше, с камерами удобнее работать, работа на низком уровне позволяет лучше понять внутренности библиотеки и принципы её работы, и информация с документацией шире и качественнее. Но при этом разработка дольше идёт, сложнее отлаживать и сам по себе язык сложнее.
И мне было бы хорошо услышать мнение других людей по этому поводу.
Вы как считаете?
Про нейросети и OpenGL я ещё не изучал, поэтому тут сначала хотел бы ваше мнение услышать. Какой язык вы считаете лучшим для использования для OpenCV и этих тем? Почему?
Numpy написан на C и очень резв. Его может не хватать только в системах реального времени с критичностью к миллисекундам, типа автомобильных автопилотов.
Из личного опыта: если много вызовов функций из питончика, то накладные расходы на преобразование в PyObject и обратно занимают очень много времени, проблема решается перетаскиванием части кода в С++ и провязкой через Cython.
Ваши суждения правильные.
Возможен вариант реализации наиболее узких мест на С/С++ как модулей питона.
Когда используете numpy не забывайте всегда работать с numpy массивами, иначе теряется производительность numpy. Используйте для работы с ними функции numpy, а не питоновские. Numpy array - похожи на Си массивы, поэтому передавать их в модуль на Си эти массивы достаточно просто (обратное то же верно). Старайтесь сводить к минимуму вычисления непосредственно на питоне - используйте возможности numpy, scipy, opencv.
PS: У меня был опыт написания модуля для отображения информации на питоне. Весь основной код был реализован на Си - много вычислений с большими объемами данных (не opencv).