CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
2.5 Xử lý ảnh với Python
2.5.1 Giới thiệu ngôn ngữ lập trình Python:
Python là một ngôn ngữ lập trình thông dịch hướng đối tượng và là một ngôn ngữ bậc cao, ngữ nghĩa động. Python hỗ trợ các module và gói, khuyến khích chương trình module hóa và tái sử dụng mã. Trình thông dịch Python và thư viện chuẩn mở rộng có sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễn phí cho tất cả các nền tảng chính và có thể được phân phối tự do.
Một vài đặc điểm về ngôn ngữ Python:
- Ngữ pháp đơn giản, dễ đọc.
- Vừa hướng thủ tục, vừa hướng đối tượng.
- Hỗ trợ module và hỗ trợ gói.
- Xử lý lỗi bằng ngoại lệ.
- Kiểu dữ liệu động ở mức cao.
- Có các bộ thư viện chuẩn và các module ngoài, đáp ứng tất cả các nhu cầu lập trình.
- Có khả năng tương tác với các module khác viết trên C/C++ hoặc Java cho Jython, hoặc .Net cho IronPython.
- Có thể nhúng vào ứng dụng như một giao tiếp kịch bản.
Một số ưu điểm của ngôn ngữ Python:
- Python dễ dàng kết nối với các thành phần khác: Python có thể kết nối với các đối tượng COM, .NET (IronPython, Python for .net), và CORBA, Java… Python cũng được hỗ trợ bởi Internet Communications Engine (ICE) và nhiều công nghệ kết nối khác. Có thể viết các thư viện trên C/C++ để nhúng vào Python và ngược lại.
- Python là ngôn ngữ có khả năng chạy trên nhiều nền tảng: Python có cho mọi
hệ điều hành: Windows, Linux/Unix, OS/2, Mac, Amiga, và những hệ điều hành khác. Thậm chí có cả những phiên bản chạy trên .NET, máy ảo Java, và điện thoại di động (Nokia Series 60). Với cùng một mã nguồn sẽ chạy giống nhau trên mọi nền tảng.
- Python rất đơn giản và dễ học: Python có hệ thống thư viện chuẩn và các thư viện mã nguồn mở được chia sẻ bởi cộng đồng lớn trên mạng.
- Python là ngôn ngữ mã nguồn mở: Cài đặt Python dùng giấy phép nguồn mở nên được sử dụng và phân tối tự do, ngay cả trong việc thương mại. Giấy phép Python được quản lý bởi Python Software Foundation.
2.5.2 Các thư viện sử dụng trong Python
Trong đề tài sử dụng sử dụng bộ phân lớp Haar-Cascde của thư viện OpenCV, thư viện Keras với backend của Tensorflow, ngoài ra còn có một số thư viện cơ bản cho deep learning như Numpy và Imutils.
Thư viện Open CV [20].
Hình 2.18: Cấu trúc thư viện OpenCV
OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính, xử lý ảnh và máy học. Nó chứa hàng ngàn thuật toán tối ưu hoá, trong đó cung cấp một bộ công cụ phổ biến cho các ứng dụng về thị giác máy tính. OpenCV đang được sử dụng trong rất nhiều ứng dụng, từ khâu hình ảnh xem đường của Google tới việc chạy các chương trình nghệ thuật tương tác, nhận diện khuôn mặt, hay rô-bốt, xe hơi tự lái.
Trong đề tài này, OpenCV được sử dụng cho các thao tác đọc, xử lý ảnh cơ bản, phần cài đặt thuật toán có thể sử dụng thư viện Haar-Cascade trong việc phát hiện vị trí khuôn mặt để cải thiện tốc độ xử lý của bài toán. Tuy nhiên, với độ chính xác tương đối kém của
nó thì Haar-Cascade chỉ được áp dụng ở công đoạn đòi hỏi tốc độ xử lý cao mà không yêu cầu quá cao về độ chính xác.
Thư viện Keras
Keras là một thư viện được phỏt triển vào năm 2015 bởi Franỗois Chollet, là một kỹ
sư nghiên cứu lĩnh vực học sâu tại google. Nó là một thư viện mã nguồn mở hàng đầu cho mạng nơ-ron nhân tạo được viết bởi ngôn ngữ python. Keras là một API bậc cao có thể sử dụng chung với các thư viện học sâu nổi tiếng như tensorflow(được phát triển bởi google), Microsoft Cognitive Toolkit (được phát triển bởi microsoft), theano (người phát triển chính Yoshua Bengio). Keras có một số ưu điểm như :
Dễ sử dụng, xây dựng model nhanh.
Có thể run trên cả cpu và gpu.
Hỗ trợ xây dựng CNN , RNN và có thể kết hợp cả 2.
Cấu trúc của Keras có thể được chia ra thành 3 phần chính:
Hàm chức năng để dựng bộ xương cho model.
Hàm chức năng dùng để tiền dữ liệu.
Hàm chức năng ở trong bộ xương của model.
Thư viện Numpy
NumPy là một từ viết tắt của "Numeric Python" hoặc "Numerical Python". Nó là một mô-đun mở rộng mã nguồn mở cho Python, cung cấp các chức năng biên dịch nhanh cho các thao tác toán học và số. Hơn nữa, NumPy làm phong phú ngôn ngữ lập trình Python với các cấu trúc dữ liệu mạnh mẽ để tính toán hiệu quả các mảng và ma trận đa chiều. Việc thực hiện thậm chí là nhằm vào ma trận và mảng khổng lồ. Bên cạnh đó các mô-đun cung cấp một thư viện lớn các chức năng toán học cấp cao để hoạt động trên các ma trận và mảng.
NumPy dựa trên hai mô đun Python trước đó về xử lý các mảng. Một trong số đó là Numeric. Numeric cũng giống NumPy như một môđun Python cho hiệu suất cao, tính toán
số học, nhưng nó là lỗi thời ngày nay. Một bản tiền nhiệm khác của NumPy là Numarray,
là một bản viết lại hoàn chỉnh của Numeric nhưng cũng không được ủng hộ. NumPy là sự sáp nhập của cả hai, nghĩa là nó được xây dựng trên mã của Numeric và các tính năng của Numarray.
Ưu điểm của việc sử dụng Numpy với Python:
Tính toán theo mảng
Triển khai hiệu quả các mảng đa chiều
Được thiết kế để tính toán khoa học