Ngôn ngữ tốt cho thị giác máy tính?


28

Tôi đang cố gắng thực hiện một hệ thống truy xuất hình ảnh dựa trên nội dung nhưng trước khi làm như vậy tôi muốn có một cái nhìn tổng quan về một số ngôn ngữ lập trình phù hợp với nhiệm vụ này (có libs tốt và như vậy).

Có ai biết một số ngôn ngữ tốt và libs cho loại nhiệm vụ đó? Còn Python hay Java thì sao?

Tốt


Phạm vi là một dự án học thuật ;-) xin lỗi vì đã không nói điều đó!
jstr

1
Tôi đã làm việc ~ 3 năm trong một nhóm thị giác máy tính cho một phần mềm khởi nghiệp. Chúng tôi đã sử dụng python + scipy / numpy cho công cụ tạo mẫu nhanh và C ++ cho mã sản xuất. boost :: trình bao bọc python cho C ++ nặng đã giúp chuyển. BLAS và LAPACK được sử dụng cho các công cụ số nặng.
Wim

2
@wim - bình luận của bạn sẽ có một câu trả lời tuyệt vời, với một chi tiết nhỏ hơn về lý do tại sao bạn sử dụng các ngôn ngữ đó cho các giai đoạn phát triển khác nhau.
Đánh dấu gian hàng

1
Bạn có thể sử dụng Matlab hoặc Octave để tạo mẫu nhanh, sau đó chuyển đổi thành C ++ với sự trợ giúp của các bộ công cụ như Armadillo (cho đại số tuyến tính) và MLPACK (để học máy & nhận dạng mẫu). Armadillo sử dụng BLAS và LAPACK trong nội bộ (giống như Matlab). Bạn cũng có thể trộn mã Matlab / Octave với mã C ++ thông qua giao diện mex của Armadillo.
mtall

Câu trả lời:


35

Có lẽ bạn có thể cụ thể hơn về phạm vi và quy mô công việc của bạn (dự án học thuật? Sản phẩm thương mại trên máy tính để bàn hoặc di động? Dự án thương mại dựa trên web?).

Một số khuyến nghị và ý kiến:

  • Matlab là phổ biến trong thế giới học thuật, và khá tốt để phác thảo / xác nhận ý tưởng. Bạn sẽ có quyền truy cập vào một khối lượng lớn mã từ các nhà nghiên cứu khác (trong CV và học máy); tạo mẫu và gỡ lỗi sẽ rất nhanh và dễ dàng, nhưng bất cứ điều gì bạn đã phát triển trong môi trường này sẽ khó đưa vào sản xuất. Tùy thuộc vào mã của bạn đang làm gì, bạn có thể gặp vấn đề về bộ nhớ / hiệu năng (có những tình huống bạn không thể mô tả những gì bạn muốn làm theo nguyên tắc của Matlab và phải bắt đầu lặp lại trên pixel và Matlab không phải là ngôn ngữ được dịch giúp đỡ trong bối cảnh này). Tương tác với cơ sở dữ liệu, máy chủ web, v.v ... không dễ dàng, đôi khi không thể (bạn sẽ không có chương trình Matlab để trở thành máy chủ Thrift được gọi bởi một giao diện web). Chi phí $$$.

  • C ++ là những gì được sử dụng cho nhiều hệ thống CV cấp sản xuất (nghĩ về thứ gì đó ở quy mô tìm kiếm hình ảnh của Google hoặc Streetview hoặc nhiều ứng dụng robot thương mại). Các thư viện tốt như OpenCV, hiệu suất tuyệt vời, dễ dàng đưa vào môi trường sản xuất. Nếu bạn cần học máy, có rất nhiều thư viện ngoài kia (LibSVM / SVMlight, Torch). Nếu bạn phải dùng đến mã "lặp trên tất cả các pixel" thì nó sẽ hoạt động tốt. Dễ dàng sử dụng để mã hóa các hệ thống / lớp lưu trữ cần thiết trong hệ thống truy xuất quy mô lớn (ví dụ: bản đồ băm trên đĩa rất lớn để lưu trữ một tính năng ánh xạ chỉ mục đảo ngược băm vào hình ảnh). Những thứ như Thrift / Message Pack có thể biến chương trình truy xuất của bạn thành máy chủ RPC có thể được gọi bởi một giao diện web. Tuy nhiên: không nhanh nhẹn cho việc tạo mẫu, khá khủng khiếp khi thử những ý tưởng mới, thời gian phát triển chậm hơn; và đặt vào tay các lập trình viên thiếu kinh nghiệm có thể khó theo dõi các màn trình diễn và / hoặc các vấn đề không ổn định.

  • Python bằng cách nào đó là một trung gian giữa cả hai. Bạn có thể sử dụng nó cho điện toán số kiểu Matlab (với numpy và scipy) + có các ràng buộc với các thư viện như OpenCV. Bạn có thể thực hiện các công cụ cấu trúc hệ thống / dữ liệu với nó và có được hiệu suất chấp nhận được. Có khá nhiều gói học máy ngoài kia mặc dù ít hơn trong Matlab hoặc C ++. Trừ khi bạn phải dùng đến mã "lặp trên tất cả các pixel", bạn sẽ có thể mã hóa khá nhiều thứ bạn có thể làm với C ++ với tỷ lệ hiệu suất 1: 1,5 đến 1: 3 và tỷ lệ 2: 1 đến 10: 1 kích thước mã nguồn (gây tranh cãi). Nhưng tùy thuộc vào sự thành công của dự án của bạn, sẽ có một điểm mà hiệu suất sẽ là một vấn đề và khi viết lại thành C ++ sẽ không phải là một lựa chọn.


4
Ngoài ra, Matlab rất mạnh về tài liệu, không giống như Python.
Andrey Rubshtein

1
Còn C thì sao? Đó là ngôn ngữ của tôi khi nghi ngờ.
Zetta Suro

10

Đặc biệt vì dự án của bạn mang tính học thuật, Mathematica là một hệ thống phần mềm rất tốt và phù hợp. Mathematica 8 đi kèm với một bộ tính năng toàn diện để xử lý hình ảnh, đại số tuyến tính, số, GPU, v.v ... Nó cũng là một hệ thống biểu tượng để nhiều lần tôi có thể rút ra các giải pháp dạng đóng cho phương trình --- khá tiện dụng cho các tác vụ thị giác máy tính. Mathicala cũng có thể giao tiếp với Python, C, C ++, Java, .NET, ..., code.


5

Nếu đây là một dự án học thuật, thì bạn chắc chắn nên sử dụng Matlab, và cụ thể hơn là Hộp công cụ xử lý hình ảnh và Hộp công cụ hệ thống thị giác máy tính. Nó sẽ đưa bạn các đơn đặt hàng có độ lớn ít thời gian hơn để tạo nguyên mẫu và đánh giá các thuật toán trong Matlab so với C ++.

Ngay cả với giao diện Python, OpenCV khó sử dụng hơn Matlab rất nhiều và nếu bạn thực sự phải làm, bạn có thể gọi mã C hoặc C ++ từ Matlab thông qua mex.


4

Đối với một hệ thống truy xuất hình ảnh. Bạn sẽ có phía máy khách và mã phía máy chủ. Phía máy chủ có thể bằng Python hoặc C / C ++. OpenCV là sự lựa chọn tốt nhất của bạn ở đây. Nó có cả giao diện python & C ++. Về phía khách hàng, tôi nghĩ bạn nên sử dụng java.


3

Ngôn ngữ tốt nhất cho thị giác máy tính là C ++. Mặc dù nhược điểm lớn của nó là khó khăn hơn để đạt được những gì bạn muốn. OpenCV là thư viện tốt nhất cho tầm nhìn máy tính ngoài kia nhưng bạn có thể làm những điều tương tự bằng matlab hoặc python.

Hãy nhìn vào đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.