콘텐츠 기반 이미지 검색 시스템을 구현하려고하지만 그렇게하기 전에이 작업에 적합한 일부 프로그래밍 언어 (좋은 라이브러리 등)에 대한 개요를 얻고 싶습니다.
그런 종류의 작업에 좋은 언어와 라이브러리를 아는 사람이 있습니까? 파이썬이나 자바는 어떻습니까?
베스트
콘텐츠 기반 이미지 검색 시스템을 구현하려고하지만 그렇게하기 전에이 작업에 적합한 일부 프로그래밍 언어 (좋은 라이브러리 등)에 대한 개요를 얻고 싶습니다.
그런 종류의 작업에 좋은 언어와 라이브러리를 아는 사람이 있습니까? 파이썬이나 자바는 어떻습니까?
베스트
답변:
작품의 범위와 규모 (학업 프로젝트, 데스크탑 또는 모바일 상용 제품, 웹 기반 상용 프로젝트)에 대해 더 구체적 일 수 있습니다.
몇 가지 권장 사항 및 의견 :
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 ++로 다시 쓰는 것이 선택 사항이 아닌 시점이 있습니다.