컴퓨터 비전을위한 좋은 언어?


28

콘텐츠 기반 이미지 검색 시스템을 구현하려고하지만 그렇게하기 전에이 작업에 적합한 일부 프로그래밍 언어 (좋은 라이브러리 등)에 대한 개요를 얻고 싶습니다.

그런 종류의 작업에 좋은 언어와 라이브러리를 아는 사람이 있습니까? 파이썬이나 자바는 어떻습니까?

베스트


범위는 학술 프로젝트입니다 ;-) 말하지 않아서 미안합니다!
jstr

1
소프트웨어 비전을 위해 컴퓨터 비전 그룹에서 약 3 년간 일했습니다. 우리는 빠른 프로토 타입 제작을 위해 python + scipy / numpy를, 프로덕션 코드에는 C ++를 사용했습니다. 무거운 C ++ 용 boost :: python 래퍼가 이식에 도움이되었습니다. BLAS와 LAPACK은 무거운 숫자의 물건에 사용됩니다.
wim

2
@wim-귀하의 의견은 다른 언어 개발 단계에 왜 이러한 언어를 사용했는지에 대해 좀 더 자세하게 답변했을 것입니다.
마크 부스

1
신속한 프로토 타입 제작을 위해 Matlab 또는 Octave 를 사용한 다음 Armadillo (선형 대수) 및 MLPACK (기계 학습 및 패턴 인식) 과 같은 툴킷을 사용하여 C ++로 변환 할 수 있습니다 . Armadillo는 내부적으로 BLAS와 LAPACK을 사용합니다 (Matlab과 동일). Armadillo의 mex 인터페이스를 통해 Matlab / Octave 코드를 C ++ 코드와 혼합 할 수도 있습니다.
mtall

답변:


35

작품의 범위와 규모 (학업 프로젝트, 데스크탑 또는 모바일 상용 제품, 웹 기반 상용 프로젝트)에 대해 더 구체적 일 수 있습니다.

몇 가지 권장 사항 및 의견 :

  • Matlab은 학계에서 일반적이며 아이디어 스케치 / 검증에 매우 적합합니다. 다른 연구원들 (CV 및 머신 러닝)의 많은 코드에 액세스 할 수 있습니다. 프로토 타이핑 및 디버깅은 매우 빠르고 쉽습니다. 그러나이 환경에서 개발 한 것은 생산에 투입하기가 어렵습니다. 코드가 수행하는 작업에 따라 메모리 / 성능 문제가있을 수 있습니다 (Matlab의 프리미티브 측면에서 수행하려는 작업을 설명 할 수없고 픽셀에 대해 루핑을 시작해야하는 상황이 있으며 Matlab의 해석 언어가 아닙니다) 이 맥락에서 돕는 것). 데이터베이스, 웹 서버 등과의 상호 작용은 쉽지 않고 때로는 불가능합니다 (웹 프론트 엔드에서 호출하는 Thrift 서버가되는 Matlab 프로그램은 없습니다). $$$ 비용.

  • C ++는 많은 프로덕션 급 CV 시스템에 사용되는 것입니다 (Google의 이미지 검색 또는 Streetview 또는 많은 상용 로봇 응용 프로그램의 규모로 생각하십시오). OpenCV와 같은 우수한 라이브러리, 뛰어난 성능, 프로덕션 환경에 쉽게 배치 할 수 있습니다. 머신 러닝을 수행해야하는 경우 많은 라이브러리가 있습니다 (LibSVM / SVMlight, Torch). "모든 픽셀에서 루프"코드를 사용해야하는 경우 성능이 우수합니다. 대규모 검색 시스템에 필요한 시스템 / 스토리지 계층을 코딩하는 데 사용하기 쉽습니다 (예 : 이미지에 대한 역 인덱스 매핑 기능 해시를 저장하기위한 매우 큰 온 디스크 해시 맵). Thrift / Message Pack과 같은 것들은 검색 프로그램을 웹 프론트 엔드가 호출 할 수있는 RPC 서버로 바꿀 수 있습니다. 그러나 프로토 타이핑에 대해 민첩하지 않고 새로운 아이디어를 시도하는 데 끔찍한 느린 개발 시간; 경험이없는 코더의 손에 들어가면 성능 및 / 또는 불안정성 문제를 추적하기 어려울 수 있습니다.

  • 파이썬은 어떻게 든 둘 사이의 중간 근거입니다. Matlab 스타일의 숫자 컴퓨팅 (numpy 및 scipy 포함) + OpenCV와 같은 라이브러리에 바인딩하는 데 사용할 수 있습니다. 그것으로 시스템 / 데이터 구조 작업을 수행하고 수용 가능한 성능을 얻을 수 있습니다. Matlab 또는 C ++보다 적은 수의 머신 러닝 패키지가 있습니다. "모든 픽셀에 루프"코드를 사용하지 않으면 C ++로 수행 할 수있는 모든 것을 1 : 1.5 : 1 : 3 비율의 비율과 2 : 1-10 : 1 비율로 코딩 할 수 있습니다. 소스 코드 크기 (설명 가능) 그러나 프로젝트의 성공 여부에 따라 성능이 문제가되고 C ++로 다시 쓰는 것이 선택 사항이 아닌 시점이 있습니다.


4
또한 Matlab은 Python과 달리 설명서가 매우 강력합니다.
Andrey Rubshtein

1
C는 어때? 의심 스러울 때는 저의 언어입니다.
Zetta Suro

10

특히 귀하의 프로젝트가 학업이기 때문에 Mathematica 는 매우 훌륭하고 적절한 소프트웨어 시스템입니다. Mathematica 8은 이미지 처리, 선형 대수, 숫자, GPU 등을위한 포괄적 인 기능 세트를 제공합니다. 또한 상징적 시스템이기 때문에 방정식에 대한 폐쇄 형 솔루션을 도출 할 수 있습니다. 컴퓨터 비전 작업에 매우 편리합니다. 매스 매 티카는 파이썬, C, C ++, 자바, .NET, ..., 코드와 통신 할 수 있습니다.


5

이것이 학술적인 프로젝트라면 반드시 Matlab, 특히 Image Processing Toolbox와 Computer Vision System Toolbox를 사용해야합니다. C ++보다 Matlab에서 알고리즘을 프로토 타입하고 평가하는 데 시간이 덜 걸립니다.

Python 인터페이스를 사용하더라도 OpenCV는 Matlab보다 사용하기가 훨씬 어렵습니다. 실제로 필요한 경우 Matlab에서 mex를 통해 C 또는 C ++ 코드를 호출 할 수 있습니다.


4

이미지 검색 시스템. 클라이언트 측 및 서버 측 코드가 있습니다. 서버 측은 Python 또는 C / C ++ 일 수 있습니다. 여기서 OpenCV가 최선의 선택입니다. 파이썬 및 C ++ 인터페이스가 모두 있습니다. 클라이언트 측에서는 java를 사용하는 것이 좋습니다.


3

컴퓨터 비전에 가장 적합한 언어는 C ++입니다. 주요 단점은 원하는 것을 달성하기가 더 어렵다는 것입니다. OpenCV는 컴퓨터 비전을위한 최고의 라이브러리이지만 matlab 또는 python을 사용하여 동일한 작업을 수행 할 수 있습니다.

여기 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.