So sánh Python và C++ trong việc lập trình ứng dụng Computer Vision

Có nhiều ngôn ngữ lập trình có thể lập trình được ứng dụng nhận diện hình ảnh, tuy nhiên Python và C++ luôn là 2 ngôn ngữ phổ biến nhất. Bài viết này so sánh 2 ngôn ngữ với nhau để người mới có thể chọn lựa 1 trong 2 nếu như thời gian không có nhiều.

  • Python để hiểu nhanh & test giải thuật
  • C++ để tạo ứng dụng hoàn chỉnh, đóng gói & chuyển giao cho người dùng

Best choice là học cả 2 ngôn ngữ nếu yêu thích và muốn theo ngành lâu dài, nếu phải chọn thì đọc tiếp:

So sánh Python và C++

Tốc độ

Hầu hết trường hợp thì C++ nhanh hơn Python, các phép đo đạc đều cho thấy C++ nhanh hơn. Tuy nhiên vẫn phụ thuộc vào cách setup/config project thì C++ mới có thể nhanh hơn Python.

Ảnh bên dưới là config mode Release của dự án viết bằng Visual C++, có nhiều tùy chọn khác nhau về speed. Nếu chọn Disabled thì bạn có thể debug, chọn tốc độ thì không, đó là lý do có mode Debug & Release để dễ dàng chuyển qua lại.

Dễ học – dễ sử dụng

Python dễ sử dụng hơn C++ nhiều lần, trong giới lập trình thì C++ là 1 ngôn ngữ khó, chỉ sử dụng với các dự án lớn, tính toán nhiều.

  • Python phân block code theo line & indent, còn C++ thì theo {}. Việc phân chia này không có gì khó.
  • C++ có kiểu của biến rõ ràng (int, char*,…), các bạn phải tuân thủ đúng. Còn Python thì biến kiểu gì cũng được, ép kiểu cũng rất dễ dàng.
  • C++ có nhiều khái niệm phức tạp: con trỏ, lambda,…
  • Python và C++ đều có macro, thuận tiện cho việc lập trình chuyên sâu
  • Cấu trúc file source code: C++ dễ dàng hơn Python trong việc include source code, kể cả khi file code không nằm trong folder của dự án.
Thư viện bổ trợ

Python có nhiều thư viện viết sẵn cho các nhu cầu phổ thông, gọi ra là sử dụng, còn C++ thì đến đọc ghi file text cũng phải viết dài dòng.

Nếu bạn cần các function C++ thì thư viện TGMTcpp viết sẵn khá nhiều function cho bạn sử dụng. VD đọc ghi file text, tìm file, đọc ghi config, nối chuỗi (string),…

Cộng đồng hỗ trợ

Do Python có nhiều người dùng nên các vấn đề với Python bạn dễ tìm được người hướng dẫn hơn. Hầu hết tutorial đều viết bằng Python.

Lập trình giao diện người dùng (GUI)

Cả 2 ngôn ngữ đều yếu trong việc lập trình giao diện. Tuy nhiên có 1 giải pháp là dùng C# tạo UI, sau đó gọi function C++ để xử lý ảnh, đây là cách mà nhiều người/công ty sử dụng, trong đó có VisCom Solution

Python thì vẫn có cách tạo giao diện, tuy nhiên giao diện cơ bản, có vài cái nút, textbox,… thì được. KHÔNG làm được GUI phức tạp và đẹp như C# được, ngoài ra hệ thống event của C# cover hết tất cả action của người dùng. Bên dưới là VD về customized controls của C#

Đây là lý do chính vì sao các ứng dụng đóng gói hoàn chỉnh được ưu tiên viết bằng C++: dễ đóng gói & tạo giao diện bằng C#.

Đóng gói

Cả 2 ngôn ngữ đều có thể giấu source code và chuyển giao file binary cho khách hàng:

  • Python: gửi file binary *.pyc cho khách hàng, lưu ý cài cùng phiên bản Python như 3.6, 3.7,… Các file này nằm trong folder __pycache__.
  • C++: có thể gửi dynamic lib (*.dll) hoặc static lib (*.lib) cho khách hàng
Code mẫu

Hầu hết code về Computer Vision, Machine Learning/Deep Learning hiện nay đều viết bằng Python. Cho dù nhu cầu của bạn là đọc biển số, OCR, nhận diện khuôn mặt,… đều có example viết bằng Python.

Phần cứng

Python và C++ đều có thể giao tiếp tốt với phần cứng, đây là 1 lĩnh vực mà cả 2 ngang tài ngang sức:

  • Giao tiếp qua cổng COM/Serial
  • Webcam/ Camera IP
Triển khai

Python dễ dàng chạy trên máy khác, chỉ cần gửi file *.py là được. Còn C++ thì phải setup đúng và kỳ công mới có thể chạy tốt trên máy khác.

Các chức năng khác
  • Cả 2 đều chạy đa luồng tốt
  • Python và C++ đều dễ dàng giao tiếp với các ngôn ngữ khác thông qua TCP/IP, HTTP server,…

Tổng kết

Nếu bạn là sinh viên làm đồ án, luận văn trong 1 thời gian ngắn thì nên học Python: dễ dàng tìm tài liệu hướng dẫn, tìm source code và triển khai nhanh.

Nếu bạn muốn viết ứng dụng hoàn chỉnh, đầy đủ chức năng thì nên học C++. Thực tế là học được C++ thì học Python rất dễ dàng.

Còn bạn muốn theo chuyên ngành Computer Vision thì bạn phải học đầy đủ Python, C++, C# và nhiều ngôn ngữ lập trình khác nữa. VD:

  • Nếu bạn muốn viết ứng dụng chạy trên browser thì phải học thêm Javascript vì hiện tại nhiều thư viện đã hỗ trợ như OpenCV JS, Tensorflow JS,…
  • Nếu bạn muốn viết cho Android thì học thêm Java (build bằng C++ vẫn được)
  • Còn viết cho iOS thì học Swift (build bằng C++ vẫn được)