Phần 23: Computer Vision – Lập trình AI bằng Python

Thị giác máy tính liên quan tới việc mô hình hóa và tái tạo tầm nhìn của con người bằng phần mềm và phần cứng máy tính. Trong chương này, bạn sẽ xem chi tiết về điều đó.
Table of Contents
1. Thị giác máy tính :
Thị giác máy tính là ngành học nghiên cứu cách tái tạo, ngắt và hiểu 1 cảnh 3D từ những hình ảnh 2D của nó, xét về các đặc tính của cấu trúc có trong cảnh đó.
Hệ thống phân cấp thị giác máy tính
Thị giác máy tính được chia làm ba loại căn bản như dưới đây
- Low-level imaginative and prescient : Nó gồm hình ảnh quy trình để trích xuất tính năng.
- Intermediate-level imaginative and prescient : Nó gồm nhận dạng đối tượng và giải thích cảnh 3D
- High-level imaginative and prescient : Nó gồm giới thiệu khái niệm về 1 cảnh như hoạt động, ý định và hành vi.
2. Thị giác máy tính và xử lý ảnh :
Xử lý ảnh nghiên cứu sự chuyển đổi ảnh sang ảnh. Đầu vào và đầu ra của quá trình xử lý hình ảnh đều là hình ảnh.
Thị giác máy tính là việc xây dựng các giới thiệu rõ ràng, có ý nghĩa về những đối tượng vật lý từ hình ảnh của chúng. Đầu ra của thị giác máy tính là giới thiệu hay diễn giải các cấu trúc trong cảnh 3D.
Applications :
Những ứng dụng chính của thị giác máy tính :
Robotics :
- Localization-determine robotic location routinely
- Dẫn đường
- Tránh chướng ngại vật
- Lắp ráp (peg-in-gap, welding, portray)
- Manipulation (e.g. PUMA robotic manipulator)
- Tương tác với người máy (HRI): Robot thông minh để tương tác và phục vụ con người
Y tế :
- Classification và detection (vd : phân loại tổn thương hay tế bào và phát hiện khối u)
- Phân đoạn 2D / 3D
- Tái tạo nội tạng người 3D (MRI hay siêu âm)
- Phẫu thuật robotic có hướng dẫn thị giác
Bảo mật :
- Sinh trắc học (mống mắt, vân tay, nhận dạng gương mặt)
- Giám sát – phát hiện những hoạt động hay hành vi đáng nghi ngờ
Vận chuyển
- Xe tự hành
- An toàn(ví dụ, theo dõi cảnh giác của người lái xe)
Ứng dụng tự động hóa công nghiệp
- Kiểm tra công nghiệp (phát hiện khuyết tật)
- Assembly
- Đọc mã vạch và nhãn gói
- Phân loại đối tượng
- Document understanding (e.g. OCR)
3. Cài đặt thư viện hỗ trợ :
Đối với Thị giác máy tính với Python, bạn sẽ có thể sử dụng 1 thư viện thông dụng có tên là OpenCV (Thị giác máy tính nguồn mở). Nó là 1 thư viện những chức năng lập trình chủ yếu ngắm vào thị giác máy tính toán thời gian thực. Nó được viết bằng C ++ và giao diện chính của nó là C ++. Bạn sẽ có thể cài đặt gói này với sự giúp đỡ của lệnh sau:
pip set up opencv_python-X.X-cp36-cp36m-winX.whl
Tại đây X đại diện cho bản Python được cài đặt trên máy của các bạn cũng như là win32 hay 64-bit mà các bạn đang có.
Nếu như bạn đang dùng môi trường anaconda, hãy sử dụng lệnh sau để cài đặt OpenCV :
conda set up -c conda-forge opencv
4. Đọc, Viết và Hiển thị Hình ảnh
Phần lớn những ứng dụng CV cần lấy hình ảnh làm đầu vào và sản xuất hình ảnh làm đầu ra. Trong phần này, bạn sẽ học cách đọc và ghi file hình ảnh với sự giúp đỡ của những chức năng do OpenCV cung cấp.
Những chức năng OpenCV
- Hàm imread () – Đây chính là hàm để đọc 1 hình ảnh. OpenCV imread () hỗ trợ khá nhiều định dạng hình ảnh khác như PNG, JPEG, JPG, TIFF, v.v.
- Hàm imshow () – Đây chính là hàm để hiển thị hình ảnh trong cửa sổ. Cửa sổ tự động phù hợp đối với kích thước hình ảnh. OpenCV imshow () hỗ trợ khá nhiều định dạng hình ảnh khác như PNG, JPEG, JPG, TIFF, v.v.
- Hàm imwrite () – Đây chính là hàm để viết 1 hình ảnh. OpenCV imwrite () hỗ trợ khá nhiều định dạng hình ảnh khác như PNG, JPEG, JPG, TIFF, v.v.
Ví dụ :
Ví dụ này sử dụng đoạn mã python để đọc 1 hình ảnh ở 1 định dạng – hiển thị nó trong 1 cửa sổ và viết cùng 1 hình ảnh ở định dạng khác như dưới đây :
import cv2
Đọc 1 hình ảnh chi tiết, sử dụng hàm imread ()
picture = cv2.imread('image_flower.jpg')
Để hiển thị hình ảnh, hãy sử dụng hàm imshow (). Tên của cửa sổ mà các bạn có thể nhận thấy hình ảnh sẽ là image_flower.
Ta có thể viết cùng 1 hình ảnh sang định dạng khác, ví dụ .png bằng cách sử dụng hàm imwrite () –
cv2.imwrite('image_flower.png',picture)
Kết quả True nghĩa là hình ảnh được ghi thành công dưới dạng file .png cũng trong cùng 1 folder.
True
Chú ý – Hàm DestallWindows () chỉ đơn giản là hủy toàn bộ những cửa sổ ta đã tạo.
5. Chuyển đổi không gian màu :
Trong OpenCV, hình ảnh không được lưu trữ bằng cách sử dụng màu RGB bình thường, thay vì vậy chúng được lưu trữ theo thứ tự ngược lại, tức là theo thứ tự BGR. Do đó, mã màu mặc định trong khi đọc ảnh là BGR. Chức năng chuyển đổi màu cvtColor () để chuyển hình ảnh từ mã màu này sang mã màu khác
Ví dụ :
Hãy xem xét ví dụ này để chuyển hình ảnh từ BGR sang thang độ xám.
import cv2
Để đọc 1 hình ảnh chi tiết, hãy sử dụng hàm imread () –
picture = cv2.imread('image_flower.jpg')
nếu như ta thấy hình ảnh này bằng cách sử dụng hàm imshow (), thì ta có thể nhận thấy rằng hình ảnh này nằm trong BGR.
cv2.imshow('BGR_Penguins',picture)
Sử dụng hàm cvtColor () để chuyển hình ảnh này sang thang độ xám.
picture = cv2.cvtColor(picture,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_penguins',picture)
6. Edge Detection
Con người, sau khi xem 1 bản phác thảo thô, dễ dàng nhận thấy nhiều loại vật thể và tư thế của chúng. Đó là nguyên nhân vì sao các cạnh đóng 1 vai trò quan trọng trong cuộc sống của con người cũng như ở trong những ứng dụng của thị giác máy tính. OpenCV cung cấp hàm cực kỳ đơn giản và có ích gọi là Canny () nhằm phát hiện các cạnh.
Ví dụ :
Ví dụ dưới đây cho ta thấy sự xác định rõ ràng của các cạnh.
import cv2
import numpy as np
Để đọc 1 hình ảnh chi tiết, hãy sử dụng hàm imread ().
picture = cv2.imread('Penguins.jpg')
Sử dụng hàm Canny () nhằm phát hiện các cạnh của hình ảnh được đọc.
cv2.imwrite(‘edges_Penguins.jpg’,cv2.Canny(picture,200,300))
Hiển thị hình ảnh có các cạnh, hãy sử dụng hàm imshow ().
cv2.imshow(‘edges’, cv2.imread(‘‘edges_Penguins.jpg’))
Kết quả như dưới đây :
7. Face Detection
Nhận diện gương mặt là 1 trong các ứng dụng hấp dẫn của thị giác máy tính, nó làm nó trở nên thực tế hơn cũng như là tương lai. OpenCV có 1 cơ sở tích hợp để thực hiện nhận diện gương mặt. Chúng tôi sẽ sử dụng bộ phân loại tầng Haar để nhận diện gương mặt.
Dữ liệu tầng Haar
Ta cần dữ liệu để sử dụng bộ phân loại tầng Haar. Bạn sẽ có thể tìm thấy dữ liệu này trong gói OpenCV . Sau khi bạn cài đặt OpenCv, bạn có thể nhận thấy tên folder haarcascades. Sẽ có các file .xml cho những ứng dụng khác nhau. Hiện tại, copy toàn bộ chúng để sử dụng khác nhau và dán vào 1 folder mới trong venture hiện giờ.
Ví dụ :
Sau đây chính là mã Python sử dụng Haar Cascade nhằm phát hiện gương mặt của Amitabh Bachan được hiển thị trong hình ảnh sau
import cv2
import numpy as np
Sử dụng HaarCascadeClassifier để nhận diện gương mặt
face_detection=
cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/
haarcascade_frontalface_default.xml')
Đọc 1 hình ảnh chi tiết, hãy sử dụng hàm imread ()
img = cv2.imread('AB.jpg')
chuyển nó thành thang độ xám vì nó sẽ chấp nhận hình ảnh màu xám :
grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Sử dụng face_detection.detectMultiScale , thực hiện nhận diện gương mặt thực tế
faces = face_detection.detectMultiScale(grey, 1.3, 5)
vẽ 1 hình chữ nhật xung quanh tất cả gương mặt –
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w, y+h),(255,0,0),3)
cv2.imwrite('Face_AB.jpg',img)
8. Eye Detection :
Phát hiện mắt là 1 ứng dụng hấp dẫn khác của thị giác máy tính giúp nó trở nên thực tế hơn cũng như là tương lai. OpenCV có 1 cơ sở tích hợp để thực hiện phát hiện mắt. Chúng tôi sẽ sử dụng bộ phân loại tầng Haar nhằm phát hiện mắt.
Ví dụ :
Đoạn mã sau sử dụng Haar Cascade nhằm phát hiện gương mặt của Amitabh Bachan :
import cv2
import numpy as np
Sử dụng HaarCascadeClassifier
eye_cascade = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_eye.xml')
Để đọc 1 hình ảnh chi tiết, hãy sử dụng hàm imread ()
img = cv2.imread('AB_Eye.jpg')
chuyển nó thành thang độ xám
grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Giờ đây với sự giúp đỡ của eye_cascade.detectMultiScale, ta tiến hàng nhận diện gương mặt thực tế
eyes = eye_cascade.detectMultiScale(grey, 1.03, 5)
vẽ 1 hình chữ nhật xung quanh tất cả gương mặt
for (ex,ey,ew,eh) in eyes:
img = cv2.rectangle(img,(ex,ey),(ex+ew, ey+eh),(0,255,0),2)
cv2.imwrite('Eye_AB.jpg',img)