Thị giác máy tính liên quan đến việc mô hình hóa và tái tạo tầm nhìn của con người bằng cách sử dụng phần mềm và phần cứng máy tính. Trong chương này, bạn sẽ tìm hiểu chi tiết về điều này.
Tầm nhìn máy tính
Mục lục
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 một cảnh 3D từ các hình ảnh 2D của nó, xét về các đặc tính của cấu trúc hiện diện trong cảnh đó.
Cấu trúc phân cấp thị giác máy tính
Thị giác máy tính được chia thành ba loại cơ bản như sau:
Tầm nhìn cấp thấp – Nó bao gồm hình ảnh quá trình để trích xuất tính năng.
Tầm nhìn cấp độ trung bình – Nó bao gồm nhận dạng đối tượng và giải thích cảnh 3D
Tầm nhìn cấp cao – Nó bao gồm mô tả khái niệm về một cảnh như hoạt động, ý định và hành vi.
Xử lý hình ảnh Computer Vision Vs
Xử lý hình ảnh nghiên cứu sự chuyển đổi hình ảnh sang hình ả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 mô tả rõ ràng, có ý nghĩa về các đố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à mô tả hoặc diễn giải cấu trúc trong cảnh 3D.
Các ứng dụng
Thị giác máy tính tìm thấy các ứng dụng trong các lĩnh vực sau:
Người máy
Bản địa hóa-xác định vị trí rô-bốt tự động
dẫn đường
Tránh chướng ngại vật
Lắp ráp (chốt trong lỗ, hàn, sơn)
Thao tác (ví dụ: người điều khiển robot PUMA)
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
Dược phẩm
Phân loại và phát hiện (ví dụ như phân loại tổn thương hoặc 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 hoặc siêu âm)
Phẫu thuật robot có hướng dẫn thị giác
Bảo vệ
- Sinh trắc học (mống mắt, vân tay, nhận dạng khuôn mặt)
- Giám sát – phát hiện một số hoạt động hoặc hành vi đáng ngờ nhất định
Vận chuyển
- Xe tự hành
- An toàn, ví dụ, giám sát 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)
- Cuộc họp
- Đọc mã vạch và nhãn gói
- Phân loại đối tượng
- Hiểu biết về tài liệu (ví dụ OCR)
Cài đặt các gói hữu ích
Đối với Thị giác máy tính với Python, bạn có thể sử dụng một thư viện phổ biến có tên OpenCV (Thị giác máy tính nguồn mở). Nó là một thư viện các chức năng lập trình chủ yếu nhắm vào thị giác máy tính 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 có thể cài đặt gói này với sự trợ giúp của lệnh sau:
pip install opencv_python-X.X-cp36-cp36m-winX.whl
Ở đây X đại diện cho phiên bản Python được cài đặt trên máy của bạn cũng như win32 hoặc 64 bit mà bạn đang có.
Nếu bạn đang sử dụng anaconda môi trường, sau đó sử dụng lệnh sau để cài đặt OpenCV –
conda install -c conda-forge opencv
Đọc, Viết và Hiển thị Hình ảnh
Hầu hết các ứ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 tệp hình ảnh với sự trợ giúp của các chức năng được cung cấp bởi OpenCV.
Các chức năng OpenCV để đọc, hiển thị, ghi tệp hình ảnh
OpenCV cung cấp các chức năng sau cho mục đích này:
hàm imread () – Đây là chức năng đọc ảnh. OpenCV imread () hỗ trợ nhiều định dạng hình ảnh khác nhau như PNG, JPEG, JPG, TIFF, v.v.
hàm imshow () – Đây là chức năng hiển thị hình ảnh trong cửa sổ. Cửa sổ tự động phù hợp với kích thước hình ảnh. OpenCV imshow () hỗ trợ nhiều định dạng hình ảnh khác nhau như PNG, JPEG, JPG, TIFF, v.v.
hàm imwrite () – Đây là chức năng viết ảnh. OpenCV imwrite () hỗ trợ nhiều định dạng hình ảnh khác nhau như PNG, JPEG, JPG, TIFF, v.v.
Thí dụ
Ví dụ này cho thấy mã Python để đọc một hình ảnh ở một định dạng – hiển thị nó trong một cửa sổ và viết cùng một hình ảnh ở định dạng khác. Hãy xem xét các bước được hiển thị bên dưới –
Nhập gói OpenCV như được hiển thị –
import cv2
Bây giờ, để đọc một hình ảnh cụ thể, hãy sử dụng hàm imread () –
image = cv2.imread('image_flower.jpg')
Để hiển thị hình ảnh, hãy sử dụng imshow () hàm số. Tên của cửa sổ mà bạn có thể thấy hình ảnh sẽ là image_flower.
cv2.imshow('image_flower',image) cv2.destroyAllwindows()
Bây giờ, chúng ta có thể viết cùng một hình ảnh sang định dạng khác, chẳng hạn .png bằng cách sử dụng hàm imwrite () –
cv2.imwrite('image_flower.png',image)
Đầu ra True có nghĩa là hình ảnh đã được ghi thành công dưới dạng tệp .png cũng trong cùng một thư mục.
True
Lưu ý – Hàm DestallWindows () chỉ đơn giản là hủy tất cả các cửa sổ mà chúng ta đã tạo.
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 thông thường, mà 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 hình ảnh là BGR. Các cvtColor () chức năng chuyển đổi màu sắc để chuyển đổi hình ảnh từ mã màu này sang mã màu khác.
Thí dụ
Hãy xem xét ví dụ này để chuyển đổi hình ảnh từ BGR sang thang độ xám.
Nhập OpenCV gói như hình –
import cv2
Bây giờ, để đọc một hình ảnh cụ thể, hãy sử dụng hàm imread () –
image = cv2.imread('image_flower.jpg')
Bây giờ, nếu chúng ta thấy hình ảnh này bằng cách sử dụng imshow () thì chúng ta có thể thấy rằng hình ảnh này nằm trong BGR.
cv2.imshow('BGR_Penguins',image)
Bây giờ, sử dụng cvtColor () chức năng chuyển đổi hình ảnh này sang thang độ xám.
image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) cv2.imshow('gray_penguins',image)
Phát hiện cạnh
Con người, sau khi xem một bản phác thảo thô sơ, có thể dễ dàng nhận ra nhiều loại vật thể và tư thế của chúng. Đó là lý do tại sao các cạnh đóng một vai trò quan trọng trong cuộc sống của con người cũng như trong các ứng dụng của thị giác máy tính. OpenCV cung cấp chức năng rất đơn giản và hữu ích được gọi là Khôn ngoan()để phát hiện các cạnh.
Thí dụ
Ví dụ sau đây cho thấy sự xác định rõ ràng của các cạnh.
Nhập gói OpenCV như được hiển thị –
import cv2 import numpy as np
Bây giờ, để đọc một hình ảnh cụ thể, hãy sử dụng imread () hàm số.
image = cv2.imread('Penguins.jpg')
Bây giờ, hãy sử dụng Canny () chức năng phát hiện các cạnh của hình ảnh đã được đọc.
cv2.imwrite(‘edges_Penguins.jpg’,cv2.Canny(image,200,300))
Bây giờ, để hiển thị hình ảnh với các cạnh, hãy sử dụng hàm imshow ().
cv2.imshow(‘edges’, cv2.imread(‘‘edges_Penguins.jpg’))
Chương trình Python này sẽ tạo một hình ảnh có tên edge_penguins.jpg với tính năng phát hiện cạnh.
Phát hiện khuôn mặt
Nhận diện khuôn mặt là một trong những ứng dụng hấp dẫn của thị giác máy tính, nó làm cho nó trở nên thực tế hơn cũng như tương lai. OpenCV có một cơ sở tích hợp để thực hiện nhận diện khuôn mặt. Chúng tôi sẽ sử dụng Haar phân loại thác để nhận diện khuôn mặt.
Dữ liệu tầng Haar
Chúng tôi cần dữ liệu để sử dụng bộ phân loại tầng Haar. Bạn có thể tìm thấy dữ liệu này trong gói OpenCV của chúng tôi. Sau khi cài đặt OpenCv, bạn có thể thấy tên thư mục haarcascades. Sẽ có các tệp .xml cho các ứng dụng khác nhau. Bây giờ, sao chép tất cả chúng để sử dụng khác nhau và sau đó dán vào một thư mục mới trong dự án hiện tại.
Thí dụ
Sau đây là mã Python sử dụng Haar Cascade để phát hiện khuôn mặt của Amitabh Bachan được hiển thị trong hình ảnh sau:
Nhập OpenCV gói như hình –
import cv2 import numpy as np
Bây giờ, hãy sử dụng HaarCascadeClassifier để phát hiện khuôn mặt –
face_detection= cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/ haarcascade_frontalface_default.xml')
Bây giờ, để đọc một hình ảnh cụ thể, hãy sử dụng imread () chức năng –
img = cv2.imread('AB.jpg')
Bây giờ, hãy chuyển nó thành thang độ xám vì nó sẽ chấp nhận hình ảnh màu xám –
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Bây giờ, sử dụng face_detection.detectMultiScalethực hiện nhận diện khuôn mặt thực tế
faces = face_detection.detectMultiScale(gray, 1.3, 5)
Bây giờ, vẽ một hình chữ nhật xung quanh toàn bộ khuôn 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)
Chương trình Python này sẽ tạo một hình ảnh có tên Face_AB.jpg với tính năng nhận diện khuôn mặt như hình minh họa
Phát hiện mắt
Phát hiện mắt là một ứng dụng hấp dẫn khác của thị giác máy tính, nó làm cho nó trở nên thực tế hơn cũng như tương lai. OpenCV có một cơ sở tích hợp để thực hiện phát hiện mắt. Chúng tôi sẽ sử dụng Thác Haar bộ phân loại để phát hiện bằng mắt.
Thí dụ
Ví dụ sau cung cấp mã Python bằng cách sử dụng Haar Cascade để phát hiện khuôn mặt của Amitabh Bachan được đưa ra trong hình ảnh sau:
Nhập gói OpenCV như được hiển thị –
import cv2 import numpy as np
Bây giờ, hãy sử dụng HaarCascadeClassifier để phát hiện khuôn mặt –
eye_cascade = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_eye.xml')
Bây giờ, để đọc một hình ảnh cụ thể, hãy sử dụng imread () hàm số
img = cv2.imread('AB_Eye.jpg')
Bây giờ, hãy chuyển nó thành thang độ xám vì nó sẽ chấp nhận hình ảnh màu xám –
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Bây giờ với sự giúp đỡ của eye_cascade.detectMultiScalethực hiện nhận diện khuôn mặt thực tế
eyes = eye_cascade.detectMultiScale(gray, 1.03, 5)
Bây giờ, vẽ một hình chữ nhật xung quanh toàn bộ khuôn 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)
Chương trình Python này sẽ tạo một hình ảnh có tên Eye_AB.jpg với khả năng phát hiện bằng mắt như hình –