Hướng dẫn OpenCV: Khai mở sức mạnh xử lý dữ liệu hình ảnh
Bài viết này cung cấp hướng dẫn toàn diện về cách sử dụng thư viện OpenCV để xử lý ảnh và video trong môi trường Python. Chúng tôi đi sâu vào phạm vi rộng các chức năng xử lý ảnh mà OpenCV cung cấp, từ kỹ thuật cơ bản đến ứng dụng nâng cao.
OpenCV, viết tắt của Open Source Computer Vision Library, là một thư viện mã nguồn mở mạnh mẽ được ứng dụng rộng rãi trong các dự án thị giác máy tính. OpenCV được thiết kế để cung cấp một khung làm việc tích hợp cho thị giác máy tính theo thời gian thực và đóng vai trò là nền tảng hỗ trợ nhiều ứng dụng phân tích ảnh và video.
Thư viện OpenCV giữ vai trò then chốt giúp các nhà phát triển và nhà nghiên cứu khai thác lợi thế của xử lý dữ liệu thị giác. Khả năng của nó bao trùm nhiều ứng dụng, từ xử lý ảnh cơ bản đến các tác vụ phức tạp như nhận diện đối tượng và nhận diện khuôn mặt. Bằng cách cung cấp một tập hợp phong phú các thuật toán, phương pháp và thao tác xử lý dữ liệu hình ảnh, OpenCV giúp phát triển các hệ thống thông minh có thể nhận biết và phân loại nội dung thị giác.
Một ứng dụng nổi bật của OpenCV là nhận dạng đối tượng, nơi các thuật toán của nó hỗ trợ nhận diện và định vị đối tượng trong ảnh hoặc luồng video. Khả năng này cũng mở rộng sang các tác vụ thị giác máy tính khác, như nhận diện khuôn mặt, theo dõi chuyển động và hỗ trợ công nghệ thực tế tăng cường.
Trong bài viết này, chúng ta sẽ khám phá:
Các chức năng xử lý ảnh do thư viện OpenCV cung cấp
Cách cài đặt thư viện OpenCV trong môi trường Python
Tổng quan về các kỹ thuật xử lý ảnh và cách triển khai chúng trong OpenCV
Các kỹ thuật xử lý video với OpenCV
Cài đặt OpenCV
Yêu cầu tiên quyết
Để theo dõi hướng dẫn OpenCV này, bạn cần có kiến thức Python ở mức trung cấp và hiểu biết cơ bản về thị giác máy tính. Việc quen thuộc với các nguyên lý xử lý ảnh cũng sẽ cải thiện trải nghiệm học tập trong suốt hướng dẫn, mặc dù các khái niệm chính sẽ được định nghĩa khi đề cập.
Các bước cài đặt
Cài đặt Python: Đảm bảo bạn đã cài đặt Python trên hệ thống. Bạn có thể tải phiên bản mới nhất từ trang web chính thức của Python.
Môi trường và Trình quản lý gói (tùy chọn): Bạn có thể dùng các trình quản lý gói như Anaconda để dễ dàng quản lý thư viện. Tải và cài đặt Anaconda từ trang web chính thức của họ.
Cài đặt OpenCV: Mở cửa sổ dòng lệnh hoặc terminal và dùng lệnh sau để cài OpenCV bằng pip (trình cài đặt gói của Python):
Nếu cài đặt thành công, lệnh này sẽ in ra số phiên bản của thư viện OpenCV đã cài. Nếu số phiên bản không được in trên terminal hoặc console thì có nghĩa là quá trình cài đặt chưa thành công.
Lưu ý quan trọng khi dùng Google Colab: Để điều chỉnh mã hiển thị hình ảnh trong sổ tay Google Colab, cần thay đổi hàm cv2.imshow truyền thống thành cv2_imshow do thư viện riêng của Google Colab cung cấp. Điều chỉnh này đảm bảo tương thích với môi trường Colab, vốn không hỗ trợ cv2.imshow. Để áp dụng thay đổi, hãy import hàm cv2_imshow từ patches của Google Colab như sau:
from google.colab.patches import cv2_imshow
# Displaying an image in a window
cv2_imshow(image)
Được hỗ trợ bởi
Giới thiệu các tính năng của OpenCV
Tải và hiển thị ảnh trong OpenCV
Đoạn mã dưới đây giới thiệu điểm khởi đầu cơ bản để sử dụng thư viện OpenCV cho xử lý ảnh. Việc tải ảnh vào môi trường phát triển được thực hiện trong nhiều lĩnh vực, từ các dự án thị giác máy tính đơn giản đến các ứng dụng phát hiện đối tượng theo thời gian thực phức tạp trong sản xuất. Hiển thị ảnh cũng rất quan trọng để quan sát nội dung ảnh hoặc kết quả xử lý. Trong đoạn mã dưới đây, chúng ta đọc một tệp JPG và hiển thị nó bằng thư viện OpenCV.
Bạn có thể dùng đoạn mã sau để tải và hiển thị ảnh trong OpenCV:
import cv2
# Loading image from a file
image = cv2.imread('your/image/path.jpg')# Displaying an image in a window
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()Được hỗ trợ bởi
Nhân viên văn phòng xung quanh một máy tính xách tay. Nguồn: Canva
Trong đoạn mã này, ảnh được đọc từ tệp bằng ‘cv2.imread’ và sau đó hiển thị trong cửa sổ với ‘imshow’. Hàm 'cv2.waitKey(0)' đảm bảo cửa sổ vẫn mở cho đến khi người dùng nhấn phím để đóng.
Xử lý ảnh là thao tác dữ liệu điểm ảnh trong một bức ảnh theo cách làm thay đổi diện mạo thị giác của ảnh ban đầu, phục vụ trích xuất đặc trưng, phân tích ảnh hoặc các tác vụ liên quan đến thị giác máy tính khác. Ví dụ về kỹ thuật xử lý ảnh gồm xử lý màu, lọc, phân đoạn, phát hiện biên, v.v.
Đoạn mã dưới đây minh họa một kỹ thuật xử lý ảnh đơn giản trên ảnh đã tải ở đoạn mã trước. Kỹ thuật xử lý ảnh được trình bày ở đây là chuyển đổi màu đơn giản, cụ thể là chuyển sang thang độ xám. Chuyển sang thang độ xám là kỹ thuật cơ bản trong xử lý ảnh, giảm ảnh xuống một kênh giá trị cường độ duy nhất.
# Converting an image to grayscale form
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# Displaying the grayscale image
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()Được hỗ trợ bởi
Tại đây, cv2.cvtColor() chuyển đổi ảnh đã tải sang ảnh thang độ xám.
Nhân viên văn phòng xung quanh một máy tính xách tay (Độ xám). Nguồn: Canva
Phát hiện biên
Phát hiện biên là một kỹ thuật nền tảng trong xử lý ảnh và thị giác máy tính. Nó xác định các điểm trong ảnh nơi độ sáng thay đổi đột ngột hoặc có tính gián đoạn. Phát hiện biên rất cần thiết trong thị giác máy tính, đặc biệt khi phát hiện các đặc trưng trong dữ liệu ảnh. Kỹ thuật này thường hoạt động bằng cách phát hiện sự thay đổi mạnh của cường độ điểm ảnh. Bằng cách nối các điểm có thay đổi mạnh về độ sáng, các đường và biên phác thảo đối tượng trong ảnh được hình thành.
Với các thuật toán phát hiện biên, có thể phát hiện những đặc trưng kết cấu và cấu trúc rất nhỏ của vật thể trên ảnh.
Có nhiều thuật toán phát hiện biên, như Canny Edge Detector, Phương pháp Sobel, và Phương pháp Logic Mờ, được sử dụng trong nhận dạng đối tượng, phân đoạn ảnh và trích xuất đặc trưng. Đoạn mã sau minh họa phát hiện biên cơ bản bằng OpenCV:
# Applying Canny edge detection (a simple edge detection method)
edges = cv2.Canny(gray_image,50,150)# Displaying the edge-detected image
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()Được hỗ trợ bởi
Thuật toán phát hiện biên Canny được cung cấp sẵn trong thư viện OpenCV qua hàm 'cv2.Canny()' dùng để phát hiện biên của đối tượng trên ảnh thang độ xám.
Nhân viên văn phòng xung quanh một máy tính xách tay (Độ xám). Nguồn: Canva
Thay đổi kích thước và xoay ảnh
Thay đổi kích thước và xoay ảnh là các yêu cầu cơ bản trong xử lý ảnh vì chúng giúp thích ứng và biến đổi nội dung trực quan. Thay đổi kích thước ảnh là thay đổi kích thước theo chiều ngang dọc, có thể phóng to hoặc thu nhỏ, và chức năng này rất cần thiết cho việc co giãn và đặt ảnh vào môi trường cụ thể.
Xoay là thao tác điều chỉnh góc nhìn của ảnh theo một góc xoay xác định. Cả hai thao tác thường được áp dụng như các bước tiền xử lý trong nhiều mục đích, bao gồm thị giác máy tính, học máy và đồ họa. Ví dụ, trong huấn luyện mạng nơ-ron sâu, xoay và thay đổi kích thước ảnh là các kỹ thuật tăng cường dữ liệu nhằm tăng độ đa dạng của tập dữ liệu huấn luyện đưa vào mạng trong quá trình học. Mục tiêu của tăng cường dữ liệu là huấn luyện mạng trên một tập dữ liệu đủ biến thiên để mô hình sau huấn luyện có thể khái quát tốt trên dữ liệu chưa thấy.
Để thay đổi kích thước và xoay ảnh bằng OpenCV, bạn có thể dùng đoạn mã sau:
# Resizing the image
resized_image = cv2.resize(image,(width, height))# Rotating the image by 45 degrees
rotation_matrix = cv2.getRotationMatrix2D((width /2, height /2),45,1)
rotated_image = cv2.warpAffine(resized_image, rotation_matrix,(width, height))# Displaying the resized and rotated images
cv2.imshow('Resized Image', resized_image)
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()Được hỗ trợ bởi
Mặc dù 'cv2.resize' được dùng để thay đổi kích thước ảnh, thì 'cv2.getRotationMatrix2D' cùng với 'cv2.warpAffine' đều được dùng để xoay ảnh.
Nhân viên văn phòng xung quanh một máy tính xách tay (Đã xoay). Nguồn: Canva
Tải và xử lý video
Video là chuỗi các ảnh được trình bày nối tiếp nhau. Trong thị giác máy tính, khả năng xử lý video rất quan trọng để phát triển và xây dựng các ứng dụng xử lý dữ liệu thời gian thực và dữ liệu đã ghi. Trái với tính tĩnh của ảnh, xử lý video làm việc với chuỗi ảnh theo thời gian, cho phép phân tích chuyển động, thay đổi theo thời gian và trích xuất các mẫu theo thời gian.
Tính động của nội dung trong dữ liệu video đòi hỏi các kỹ thuật xử lý video phải hiệu quả, đặc biệt trong các hệ thống quan trọng, ví dụ như ứng dụng giám sát, lái xe tự động, nhận diện hoạt động, v.v., nơi việc hiểu chuyển động và thay đổi là thiết yếu.
Một lợi thế đáng kể khi dùng OpenCV cho các tác vụ xử lý video là bộ tính năng toàn diện được thiết kế để xử lý luồng video hiệu quả. OpenCV cung cấp công cụ thu nhận, xử lý và phân tích video tương tự như với ảnh.
Đoạn mã sau có thể dùng để tải và xử lý một video lưu cục bộ:
import cv2
# Open a video capture object
cap = cv2.VideoCapture("Your video's path.mp4")# To check if the video has opened successfully of notifnot cap.isOpened():print("Error: Couldnot open the video.")
exit()# Loop through the video frameswhileTrue:# Reading a frame from the video
ret, frame = cap.read()# Break the loop if the video has endedifnot ret:break# Display the original frame
cv2.imshow('Original Video', frame)
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('Black and White Video', gray_frame)# Perform edge detection on the video
edges_frame = cv2.Canny(gray_frame,50,150)
cv2.imshow('Edges Video', edges_frame)# Break the loop if 'q' key is pressedif cv2.waitKey(25)&0xFF==ord('q'):break# Release the video capture object and close all windows
cap.release()
cv2.destroyAllWindows()Được hỗ trợ bởi
Trong đoạn mã này, lớp ‘cv2.VideoCapture’ được dùng để truy cập tệp video và đọc các khung hình thông qua phương thức ‘cap.read'. Mã lần lượt hiển thị video gốc, sau đó chuyển sang đen trắng, và cuối cùng thực hiện phát hiện biên cho mỗi khung hình. Vòng lặp chạy cho đến khi video hết hoặc cho đến khi nhận phím từ bàn phím để thoát. Hàm ‘cv2.waitKey(25)’ cho phép một khoảng trễ ngắn giữa các khung hình để hiển thị, đảm bảo phát lại mượt mà.
Phát hiện người với OpenCV và Yolo
Phát hiện đối tượng và phát hiện người
Phát hiện đối tượng là một tác vụ nền tảng của thị giác máy tính, nhằm phát hiện và định vị các đối tượng trong ảnh hoặc video và cung cấp kết quả nhận dạng – danh sách nhãn lớp được phát hiện và các hộp giới hạn tương ứng. Phát hiện người, một biến thể của nhận dạng đối tượng, tập trung vào việc xác định và định vị con người trong thông tin thị giác.
Ứng dụng của phát hiện người
Các ứng dụng của phát hiện người bao gồm giám sát, quản lý đám đông, đếm người, theo dõi, tương tác người-máy tính và môi trường thông minh. Trong giám sát, công nghệ này hỗ trợ phát hiện hoạt động đáng ngờ, trong khi ở quản lý đám đông, nó hỗ trợ nhận diện cử chỉ và theo dõi. Phát hiện người đóng vai trò quan trọng trong tương tác người-máy tính và cũng được dùng trong môi trường thông minh để tối ưu tài nguyên và tăng cường bảo mật.
Mô hình phát hiện đối tượng YOLO
YOLO, viết tắt của "You Only Look Once", đã trở thành một hệ thống thường được sử dụng nhờ khả năng nhận dạng đối tượng theo thời gian thực hiệu quả. Trái với các phương pháp phát hiện truyền thống, YOLO chia ảnh thành một lưới ô và đồng thời dự đoán các hộp giới hạn cùng xác suất lớp cho mỗi ô.
Dưới đây là đoạn mã dùng OpenCV và Yolo để phát hiện người trong một ảnh:
import cv2
net = cv2.dnn.readNet('yolov3.weights','yolov3.cfg')
layer_names = net.getUnconnectedOutLayersNames()
image = cv2.imread('image path.jpg')
height, width = image.shape[:2]
blob = cv2.dnn.blobFromImage(image,1/255.0,(416,416), swapRB=True, crop=False)
net.setInput(blob)
outs = net.forward(layer_names)for out in outs:for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]if confidence >0.5and class_id ==0:# Class ID for person
box = detection[:4]* np.array([width, height, width, height])(x, y, w, h)= box.astype(int)
cv2.rectangle(image,(x, y),(x + w, y + h),(0,255,0),2)
cv2.imshow('Person Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()Được hỗ trợ bởi
Phát hiện người trong video
Tương tự, cấu trúc mã tuân theo các nguyên tắc tương tự cho phát hiện người trong video. Thay vì xử lý một ảnh tĩnh, đoạn mã hoặc ứng dụng sẽ xử lý liên tục các khung hình video.
Nguyên tắc nhận diện người trong cả ảnh và video đều giống nhau, điểm khác biệt chính là yếu tố thời gian. Với ảnh, nhiệm vụ là nhận diện và định vị người trong từng khung hình tĩnh đơn lẻ.
Ứng dụng này phù hợp nhất với ảnh chụp giám sát và các bức ảnh không chồng lấn khác. Ngược lại, với video, mục tiêu là nhận diện và theo dõi từng người khi họ di chuyển qua các khung hình tiếp theo. Điều này đôi khi được gọi là theo dõi đối tượng trong video. Khía cạnh thời gian rất quan trọng khi xem xét chuyển động và tương tác của con người theo thời gian, khiến phát hiện người dựa trên video trở thành công cụ thiết yếu cho các ứng dụng thời gian thực, bao gồm giám sát an ninh, theo dõi đám đông và phân tích hành vi.
Ứng dụng thực tế và cân nhắc đạo đức
Một số trường hợp sử dụng khác trong thực tế của phát hiện người bao gồm thành phố thông minh, phân tích bán lẻ và an toàn công cộng. Tuy nhiên, có các cân nhắc đạo đức liên quan đến quyền riêng tư, sự đồng thuận và việc lạm dụng công nghệ. Việc triển khai có trách nhiệm trên các lĩnh vực đạt được bằng cách cân bằng giữa lợi ích và các lo ngại đạo đức.
Kết luận
Hướng dẫn này đã trình bày các khía cạnh nền tảng khi làm việc với thư viện OpenCV cho nhiều tác vụ thị giác máy tính. Bắt đầu từ những điều cơ bản, bài viết cho thấy cách cài đặt OpenCV trong môi trường Python. Các thao tác OpenCV để tải và hiển thị ảnh đã được minh họa cùng với các kỹ thuật xử lý ảnh, như chuyển ảnh sang thang độ xám và áp dụng phát hiện biên. Nhìn chung, rõ ràng OpenCV có thể thực hiện các biến đổi và phân tích ảnh tinh vi, bao gồm áp dụng kỹ thuật xử lý ảnh cho các khung hình video.
Đáng chú ý, OpenCV đóng vai trò quan trọng trong thị giác máy tính ứng dụng khi cung cấp tính linh hoạt và năng lực mạnh mẽ, cho phép kỹ sư thị giác máy tính và người làm học máy giải quyết nhiều thách thức liên quan đến xử lý dữ liệu thị giác. Lợi thế then chốt khi sử dụng thư viện OpenCV là nó tinh giản quá trình áp dụng các thuật toán thị giác máy tính và chuyển đổi ý tưởng ứng dụng thành hiện thực một cách hiệu quả.
Nâng cao hiểu biết của bạn về các khái niệm được thảo luận trong bài viết này bằng cách tìm hiểu sâu hơn về xử lý ảnh trong Python thông qua một khóa học được biên soạn kỹ lưỡng. Khóa học này mở rộng bộ công cụ xử lý ảnh và thị giác máy tính của bạn với các thư viện bổ sung như Sci-kit Image và Numpy.
Người sáng tạo nội dung về Machine Learning với hơn 1 triệu lượt xem — Kỹ sư Thị giác máy tính. Quan tâm đến việc tiếp thu và chia sẻ kiến thức về Công nghệ và Tài chính
OpenCV, viết tắt của Open Source Computer Vision Library, là một thư viện mã nguồn mở mạnh mẽ được ứng dụng rộng rãi trong các dự án thị giác máy tính. OpenCV được thiết kế để cung cấp một khung làm việc tích hợp cho thị giác máy tính theo thời gian thực và đóng vai trò là nền tảng hỗ trợ nhiều ứng dụng phân tích ảnh và video.
Thư viện OpenCV giữ vai trò then chốt giúp các nhà phát triển và nhà nghiên cứu khai thác lợi thế của xử lý dữ liệu thị giác. Khả năng của nó bao trùm nhiều ứng dụng, từ xử lý ảnh cơ bản đến các tác vụ phức tạp như nhận diện đối tượng và nhận diện khuôn mặt. Bằng cách cung cấp một tập hợp phong phú các thuật toán, phương pháp và thao tác xử lý dữ liệu hình ảnh, OpenCV giúp phát triển các hệ thống thông minh có thể nhận biết và phân loại nội dung thị giác.
Một ứng dụng nổi bật của OpenCV là nhận dạng đối tượng, nơi các thuật toán của nó hỗ trợ nhận diện và định vị đối tượng trong ảnh hoặc luồng video. Khả năng này cũng mở rộng sang các tác vụ thị giác máy tính khác, như nhận diện khuôn mặt, theo dõi chuyển động và hỗ trợ công nghệ thực tế tăng cường.
Trong bài viết này, chúng ta sẽ khám phá:
Cài đặt OpenCV
Yêu cầu tiên quyết
Để theo dõi hướng dẫn OpenCV này, bạn cần có kiến thức Python ở mức trung cấp và hiểu biết cơ bản về thị giác máy tính. Việc quen thuộc với các nguyên lý xử lý ảnh cũng sẽ cải thiện trải nghiệm học tập trong suốt hướng dẫn, mặc dù các khái niệm chính sẽ được định nghĩa khi đề cập.
Các bước cài đặt
Nếu bạn dùng Anaconda, có thể sử dụng lệnh sau:
Xác minh
Để xác nhận cài đặt thành công, hãy chạy đoạn mã sau trên Python Interpreter hoặc Jupyter Notebook:
Nếu cài đặt thành công, lệnh này sẽ in ra số phiên bản của thư viện OpenCV đã cài. Nếu số phiên bản không được in trên terminal hoặc console thì có nghĩa là quá trình cài đặt chưa thành công.
Lưu ý quan trọng khi dùng Google Colab: Để điều chỉnh mã hiển thị hình ảnh trong sổ tay Google Colab, cần thay đổi hàm
cv2.imshowtruyền thống thànhcv2_imshowdo thư viện riêng của Google Colab cung cấp. Điều chỉnh này đảm bảo tương thích với môi trường Colab, vốn không hỗ trợ cv2.imshow. Để áp dụng thay đổi, hãy import hàm cv2_imshow từ patches của Google Colab như sau:Giới thiệu các tính năng của OpenCV
Tải và hiển thị ảnh trong OpenCV
Đoạn mã dưới đây giới thiệu điểm khởi đầu cơ bản để sử dụng thư viện OpenCV cho xử lý ảnh. Việc tải ảnh vào môi trường phát triển được thực hiện trong nhiều lĩnh vực, từ các dự án thị giác máy tính đơn giản đến các ứng dụng phát hiện đối tượng theo thời gian thực phức tạp trong sản xuất. Hiển thị ảnh cũng rất quan trọng để quan sát nội dung ảnh hoặc kết quả xử lý. Trong đoạn mã dưới đây, chúng ta đọc một tệp JPG và hiển thị nó bằng thư viện OpenCV.
Bạn có thể dùng đoạn mã sau để tải và hiển thị ảnh trong OpenCV:
Nhân viên văn phòng xung quanh một máy tính xách tay. Nguồn: Canva
Trong đoạn mã này, ảnh được đọc từ tệp bằng ‘
cv2.imread’ và sau đó hiển thị trong cửa sổ với ‘imshow’. Hàm 'cv2.waitKey(0)' đảm bảo cửa sổ vẫn mở cho đến khi người dùng nhấn phím để đóng.Xử lý ảnh là thao tác dữ liệu điểm ảnh trong một bức ảnh theo cách làm thay đổi diện mạo thị giác của ảnh ban đầu, phục vụ trích xuất đặc trưng, phân tích ảnh hoặc các tác vụ liên quan đến thị giác máy tính khác. Ví dụ về kỹ thuật xử lý ảnh gồm xử lý màu, lọc, phân đoạn, phát hiện biên, v.v.
Đoạn mã dưới đây minh họa một kỹ thuật xử lý ảnh đơn giản trên ảnh đã tải ở đoạn mã trước. Kỹ thuật xử lý ảnh được trình bày ở đây là chuyển đổi màu đơn giản, cụ thể là chuyển sang thang độ xám. Chuyển sang thang độ xám là kỹ thuật cơ bản trong xử lý ảnh, giảm ảnh xuống một kênh giá trị cường độ duy nhất.
Tại đây,
cv2.cvtColor() chuyển đổi ảnh đã tải sang ảnh thang độ xám.Nhân viên văn phòng xung quanh một máy tính xách tay (Độ xám). Nguồn: Canva
Phát hiện biên
Phát hiện biên là một kỹ thuật nền tảng trong xử lý ảnh và thị giác máy tính. Nó xác định các điểm trong ảnh nơi độ sáng thay đổi đột ngột hoặc có tính gián đoạn. Phát hiện biên rất cần thiết trong thị giác máy tính, đặc biệt khi phát hiện các đặc trưng trong dữ liệu ảnh. Kỹ thuật này thường hoạt động bằng cách phát hiện sự thay đổi mạnh của cường độ điểm ảnh. Bằng cách nối các điểm có thay đổi mạnh về độ sáng, các đường và biên phác thảo đối tượng trong ảnh được hình thành.
Với các thuật toán phát hiện biên, có thể phát hiện những đặc trưng kết cấu và cấu trúc rất nhỏ của vật thể trên ảnh.
Có nhiều thuật toán phát hiện biên, như Canny Edge Detector, Phương pháp Sobel, và Phương pháp Logic Mờ, được sử dụng trong nhận dạng đối tượng, phân đoạn ảnh và trích xuất đặc trưng. Đoạn mã sau minh họa phát hiện biên cơ bản bằng OpenCV:
Thuật toán phát hiện biên Canny được cung cấp sẵn trong thư viện OpenCV qua hàm 'cv2.Canny()' dùng để phát hiện biên của đối tượng trên ảnh thang độ xám.
Nhân viên văn phòng xung quanh một máy tính xách tay (Độ xám). Nguồn: Canva
Thay đổi kích thước và xoay ảnh
Thay đổi kích thước và xoay ảnh là các yêu cầu cơ bản trong xử lý ảnh vì chúng giúp thích ứng và biến đổi nội dung trực quan. Thay đổi kích thước ảnh là thay đổi kích thước theo chiều ngang dọc, có thể phóng to hoặc thu nhỏ, và chức năng này rất cần thiết cho việc co giãn và đặt ảnh vào môi trường cụ thể.
Xoay là thao tác điều chỉnh góc nhìn của ảnh theo một góc xoay xác định. Cả hai thao tác thường được áp dụng như các bước tiền xử lý trong nhiều mục đích, bao gồm thị giác máy tính, học máy và đồ họa. Ví dụ, trong huấn luyện mạng nơ-ron sâu, xoay và thay đổi kích thước ảnh là các kỹ thuật tăng cường dữ liệu nhằm tăng độ đa dạng của tập dữ liệu huấn luyện đưa vào mạng trong quá trình học. Mục tiêu của tăng cường dữ liệu là huấn luyện mạng trên một tập dữ liệu đủ biến thiên để mô hình sau huấn luyện có thể khái quát tốt trên dữ liệu chưa thấy.
Để thay đổi kích thước và xoay ảnh bằng OpenCV, bạn có thể dùng đoạn mã sau:
Mặc dù '
cv2.resize' được dùng để thay đổi kích thước ảnh, thì'cv2.getRotationMatrix2D' cùng với 'cv2.warpAffine' đều được dùng để xoay ảnh.Nhân viên văn phòng xung quanh một máy tính xách tay (Đã xoay). Nguồn: Canva
Tải và xử lý video
Video là chuỗi các ảnh được trình bày nối tiếp nhau. Trong thị giác máy tính, khả năng xử lý video rất quan trọng để phát triển và xây dựng các ứng dụng xử lý dữ liệu thời gian thực và dữ liệu đã ghi. Trái với tính tĩnh của ảnh, xử lý video làm việc với chuỗi ảnh theo thời gian, cho phép phân tích chuyển động, thay đổi theo thời gian và trích xuất các mẫu theo thời gian.
Tính động của nội dung trong dữ liệu video đòi hỏi các kỹ thuật xử lý video phải hiệu quả, đặc biệt trong các hệ thống quan trọng, ví dụ như ứng dụng giám sát, lái xe tự động, nhận diện hoạt động, v.v., nơi việc hiểu chuyển động và thay đổi là thiết yếu.
Một lợi thế đáng kể khi dùng OpenCV cho các tác vụ xử lý video là bộ tính năng toàn diện được thiết kế để xử lý luồng video hiệu quả. OpenCV cung cấp công cụ thu nhận, xử lý và phân tích video tương tự như với ảnh.
Đoạn mã sau có thể dùng để tải và xử lý một video lưu cục bộ:
Trong đoạn mã này, lớp ‘
cv2.VideoCapture’ được dùng để truy cập tệp video và đọc các khung hình thông qua phương thức ‘cap.read'. Mã lần lượt hiển thị video gốc, sau đó chuyển sang đen trắng, và cuối cùng thực hiện phát hiện biên cho mỗi khung hình. Vòng lặp chạy cho đến khi video hết hoặc cho đến khi nhận phím từ bàn phím để thoát. Hàm ‘cv2.waitKey(25)’ cho phép một khoảng trễ ngắn giữa các khung hình để hiển thị, đảm bảo phát lại mượt mà.Phát hiện người với OpenCV và Yolo
Phát hiện đối tượng và phát hiện người
Phát hiện đối tượng là một tác vụ nền tảng của thị giác máy tính, nhằm phát hiện và định vị các đối tượng trong ảnh hoặc video và cung cấp kết quả nhận dạng – danh sách nhãn lớp được phát hiện và các hộp giới hạn tương ứng. Phát hiện người, một biến thể của nhận dạng đối tượng, tập trung vào việc xác định và định vị con người trong thông tin thị giác.
Ứng dụng của phát hiện người
Các ứng dụng của phát hiện người bao gồm giám sát, quản lý đám đông, đếm người, theo dõi, tương tác người-máy tính và môi trường thông minh. Trong giám sát, công nghệ này hỗ trợ phát hiện hoạt động đáng ngờ, trong khi ở quản lý đám đông, nó hỗ trợ nhận diện cử chỉ và theo dõi. Phát hiện người đóng vai trò quan trọng trong tương tác người-máy tính và cũng được dùng trong môi trường thông minh để tối ưu tài nguyên và tăng cường bảo mật.
Mô hình phát hiện đối tượng YOLO
YOLO, viết tắt của "You Only Look Once", đã trở thành một hệ thống thường được sử dụng nhờ khả năng nhận dạng đối tượng theo thời gian thực hiệu quả. Trái với các phương pháp phát hiện truyền thống, YOLO chia ảnh thành một lưới ô và đồng thời dự đoán các hộp giới hạn cùng xác suất lớp cho mỗi ô.
Bạn có thể đọc thêm về Phát hiện đối tượng YOLO trong hướng dẫn toàn diện của chúng tôi.
Phát hiện người trên ảnh
Dưới đây là đoạn mã dùng OpenCV và Yolo để phát hiện người trong một ảnh:
Phát hiện người trong video
Tương tự, cấu trúc mã tuân theo các nguyên tắc tương tự cho phát hiện người trong video. Thay vì xử lý một ảnh tĩnh, đoạn mã hoặc ứng dụng sẽ xử lý liên tục các khung hình video.
Nguyên tắc nhận diện người trong cả ảnh và video đều giống nhau, điểm khác biệt chính là yếu tố thời gian. Với ảnh, nhiệm vụ là nhận diện và định vị người trong từng khung hình tĩnh đơn lẻ.
Ứng dụng này phù hợp nhất với ảnh chụp giám sát và các bức ảnh không chồng lấn khác. Ngược lại, với video, mục tiêu là nhận diện và theo dõi từng người khi họ di chuyển qua các khung hình tiếp theo. Điều này đôi khi được gọi là theo dõi đối tượng trong video. Khía cạnh thời gian rất quan trọng khi xem xét chuyển động và tương tác của con người theo thời gian, khiến phát hiện người dựa trên video trở thành công cụ thiết yếu cho các ứng dụng thời gian thực, bao gồm giám sát an ninh, theo dõi đám đông và phân tích hành vi.
Ứng dụng thực tế và cân nhắc đạo đức
Một số trường hợp sử dụng khác trong thực tế của phát hiện người bao gồm thành phố thông minh, phân tích bán lẻ và an toàn công cộng. Tuy nhiên, có các cân nhắc đạo đức liên quan đến quyền riêng tư, sự đồng thuận và việc lạm dụng công nghệ. Việc triển khai có trách nhiệm trên các lĩnh vực đạt được bằng cách cân bằng giữa lợi ích và các lo ngại đạo đức.
Kết luận
Hướng dẫn này đã trình bày các khía cạnh nền tảng khi làm việc với thư viện OpenCV cho nhiều tác vụ thị giác máy tính. Bắt đầu từ những điều cơ bản, bài viết cho thấy cách cài đặt OpenCV trong môi trường Python. Các thao tác OpenCV để tải và hiển thị ảnh đã được minh họa cùng với các kỹ thuật xử lý ảnh, như chuyển ảnh sang thang độ xám và áp dụng phát hiện biên. Nhìn chung, rõ ràng OpenCV có thể thực hiện các biến đổi và phân tích ảnh tinh vi, bao gồm áp dụng kỹ thuật xử lý ảnh cho các khung hình video.
Đáng chú ý, OpenCV đóng vai trò quan trọng trong thị giác máy tính ứng dụng khi cung cấp tính linh hoạt và năng lực mạnh mẽ, cho phép kỹ sư thị giác máy tính và người làm học máy giải quyết nhiều thách thức liên quan đến xử lý dữ liệu thị giác. Lợi thế then chốt khi sử dụng thư viện OpenCV là nó tinh giản quá trình áp dụng các thuật toán thị giác máy tính và chuyển đổi ý tưởng ứng dụng thành hiện thực một cách hiệu quả.
Nâng cao hiểu biết của bạn về các khái niệm được thảo luận trong bài viết này bằng cách tìm hiểu sâu hơn về xử lý ảnh trong Python thông qua một khóa học được biên soạn kỹ lưỡng. Khóa học này mở rộng bộ công cụ xử lý ảnh và thị giác máy tính của bạn với các thư viện bổ sung như Sci-kit Image và Numpy.