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

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

hình ảnh hoa

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)

chim cánh cụt

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)

chim cánh cụt xám

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.

chim cánh cụt 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:

mặt ab

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

Mặt AB

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:

Mặt Haar AB

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 –

Mắt AB