AI với Python - Thị giác máy tính

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 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

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 thuộ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 thành ba loại cơ bản như sau:

  • Low-level vision - Nó bao gồm hình ảnh quá trình để trích xuất tính năng.

  • Intermediate-level vision - Nó bao gồm nhận dạng đối tượng và giải thích cảnh 3D

  • High-level vision - 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ý ả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 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ác 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:

Robotics

  • Bản địa hóa-xác định vị trí rô bốt tự động

  • Navigation

  • 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

Medicine

  • 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

Security

  • 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ờ

Transportation

  • Xe tự hành
  • An toàn, ví dụ, giám sát cảnh giác của người lái xe

Industrial Automation Application

  • 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
  • Hiểu 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 do OpenCV cung cấp.

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:

  • imread() function- Đâ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.

  • imshow() function- Đâ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.

  • imwrite() function- Đâ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()chức năng. 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)

Kết quả 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ổ 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 ảnh là BGR. CáccvtColor() chức năng chuyển đổi màu để 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àCanny()để 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ư hình -

import cv2
import numpy as np

Bây giờ, để đọc một hình ảnh cụ thể, hãy sử dụng imread() chức năng.

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 edges_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 khiến 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ụngHaar bộ 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ụchaarcascades. 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.

Example

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.detectMultiScale, thự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 nhận diện khuôn mặt như hình

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ó 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ụngHaar cascade 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ư 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 -

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() chức năng

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.detectMultiScale, thự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 mắt như hình -