tôi đã nghiên cứu trí tuệ nhân tạo và Computer Vision, vì vậy tôi biết khá tốt các loại công cụ được sử dụng trong lĩnh vực này.
Về cơ bản: bạn có thể sử dụng bất kỳ thứ gì bạn muốn miễn là bạn biết cách hoạt động của cảnh đó.
Bây giờ tùy thuộc vào những gì bạn muốn đạt được, bạn có thể sử dụng:
- ngôn ngữ C, nhưng bạn sẽ mất rất nhiều thời gian trong lỗi kiểm tra và quản lý bộ nhớ khi thực hiện các thuật toán của bạn. Về mặt lý thuyết, đây là ngôn ngữ nhanh nhất để thực hiện loại công việc đó, nhưng nếu thuật toán của bạn không hiệu quả về mặt tính toán (về độ phức tạp) hoặc nếu bạn mất quá nhiều thời gian để kiểm tra lỗi thì điều này rõ ràng là không đáng. Vì vậy, tôi khuyên bạn nên triển khai ứng dụng của mình trước tiên bằng một ngôn ngữ khác, và sau đó bạn luôn có thể tối ưu hóa các phần nhỏ của mã của bạn với các ràng buộc C.
- Octave/MatLab: ngôn ngữ rất hiệu quả, gần bằng C, và bạn có thể thực hiện các thuật toán rất thanh lịch và súc tích. Nếu bạn đang vào các hoạt động vector, ma trận và tuyến tính, bạn nên đi với điều đó. Tuy nhiên, bạn sẽ không thể phát triển toàn bộ ứng dụng bằng ngôn ngữ này, nó tập trung nhiều hơn vào thuật toán, nhưng sau đó bạn luôn có thể phát triển giao diện bằng ngôn ngữ khác sau này.
- Python: tất cả-trong-một ngôn ngữ thanh lịch và dễ tiếp cận, được sử dụng trong các ứng dụng quy mô lớn như Google và Facebook. Bạn có thể làm khá nhiều thứ bạn muốn với Python, bất kỳ loại ứng dụng nào. Nó sẽ được điều chỉnh hoàn toàn nếu bạn muốn tạo một ứng dụng đầy đủ (với sự tương tác của khách hàng và tất cả, không chỉ các thuật toán), hoặc nếu bạn muốn nhanh chóng phác thảo một mẫu thử bằng cách sử dụng các thư viện hiện có vì Python có rất nhiều thư viện chất lượng cao, như OpenCV. Tuy nhiên, nếu bạn chỉ muốn tạo các thuật toán, bạn nên sử dụng Octave/MatLab tốt hơn.
Câu trả lời được chọn là giải pháp được gắn nhãn, và bạn nên cẩn thận về loại nhận xét cổ xưa này.
Ngày nay, phần cứng rẻ hơn wetware (con người), và do đó, bạn nên sử dụng ngôn ngữ nơi bạn có thể tạo kết quả nhanh hơn, ngay cả khi chi phí của một vài chu kỳ CPU hoặc dung lượng bộ nhớ.
Ngoài ra, rất nhiều người có xu hướng nghĩ rằng miễn là bạn triển khai phần mềm của mình trong C/C++, bạn đang làm cho Graal of Gravity of speedness: điều này không đúng.Thứ nhất, vì thuật toán phức tạp hơn rất nhiều so với ngôn ngữ bạn sử dụng (thuật toán xấu sẽ không bao giờ đánh bại thuật toán tốt hơn, ngay cả khi được thực hiện bằng ngôn ngữ chậm nhất trong vũ trụ) và thứ hai là vì ngôn ngữ cấp cao hiện đang làm rất nhiều của bộ nhớ đệm và tối ưu hóa tốc độ cho bạn, và điều này có thể làm cho chương trình của bạn chạy nhanh hơn trong C/C++.
Tất nhiên, bạn luôn có thể làm mọi thứ ở trên trong C/C++, nhưng bạn sẵn sàng lãng phí bao nhiêu thời gian để tái tạo lại bánh xe?