Mục lục:

Các dự án cơ bản của OpenCV: 5 bước
Các dự án cơ bản của OpenCV: 5 bước

Video: Các dự án cơ bản của OpenCV: 5 bước

Video: Các dự án cơ bản của OpenCV: 5 bước
Video: OpenCV | Dự Án Nhận Diện Biển Số Bãi Đỗ Xe Thông Minh 2024, Tháng mười một
Anonim
Các dự án cơ bản của OpenCV
Các dự án cơ bản của OpenCV

Trong dự án này, chúng tôi khám phá một số chức năng OpenCV cơ bản thông qua 4 dự án đơn giản liên quan đến luồng video trực tiếp. Đó là nhận dạng khuôn mặt, xóa nền, hiển thị hình ảnh đặc biệt của các cạnh và áp dụng hiệu ứng làm mờ cho luồng video trực tiếp. Mục đích chính của tôi khi thử các dự án này chỉ đơn giản là để làm quen với giao diện OpenCV, vì tôi dự định nghiên cứu sâu hơn trong lĩnh vực thị giác máy tính

Quân nhu

  • Máy tính chạy Python
  • Mở thư viện CV, thư viện Numpy, thư viện tkinter, thư viện sys
  • Máy ảnh để kết nối với máy tính (nếu máy tính chưa có)
  • Tệp python của chương trình (bao gồm trong hướng dẫn này)
  • tệp xml haarcascade (bao gồm trong tệp hướng dẫn này)

Bước 1: Chức năng FaceDetect

Chức năng FaceDetect
Chức năng FaceDetect
Chức năng FaceDetect
Chức năng FaceDetect

Chức năng này hiển thị video trên máy ảnh của bạn với các ô vuông màu xanh lục trên bất kỳ mặt nào mà máy ảnh nhận được. Trong đoạn mã, chúng tôi sử dụng hàm cv2. VideoCapture () để lưu trữ video mà chúng tôi đang quay trong một đối tượng có tên là "capture". CAPTURE_INDEX là một số do máy tính của bạn đặt tương ứng với chỉ số của máy ảnh trong danh sách đầu vào video của máy tính. Nếu bạn không có máy ảnh bên ngoài được kết nối với máy tính của mình, 0 hoặc 1 sẽ hoạt động.

Đối tượng face_cascade được khởi tạo bằng cách sử dụng hàm cascadeClassifier và tệp "haarcascade_frontalface_default.xml" được tìm thấy trong github OpenCV. Chúng tôi sử dụng đối tượng này để lưu trữ các khuôn mặt được phát hiện trong danh sách "khuôn mặt" dưới dạng một mục nhập bốn chiều giữ các mặt tọa độ x, tọa độ y, chiều rộng và chiều cao. Sau đó, chúng tôi vẽ một hình chữ nhật bao quanh khuôn mặt một cách hoàn hảo bằng cách sử dụng hàm cv2.rectangle

Từ video này, OpenCV chụp nhiều hình ảnh trong vòng lặp while của chúng tôi bằng cách sử dụng capture.read () và lưu trữ hình ảnh trong khung mà chúng tôi đặt tên là "img". Mỗi hình ảnh sau đó được diễn giải và sửa đổi theo ý muốn của chúng tôi. Đối với faceDetect, chúng tôi làm cho hình ảnh có màu xám bằng cách sử dụng hàm cvtColor để chuyển đổi bất kỳ hình ảnh nào được cung cấp trong tham số đầu tiên thành một loại màu hình ảnh cụ thể được chỉ định trong tham số thứ hai. Danh sách các giá trị được chấp nhận cho tham số thứ hai có thể được tìm thấy trực tuyến. Sau đó, chúng tôi hiển thị hình ảnh trong một cửa sổ có tên là "Phát hiện khuôn mặt" bằng cách sử dụng hàm imshow () lấy một chuỗi ký tự cho tên cửa sổ và khung hình ảnh được hiển thị.

Cuối cùng chúng ta đợi người dùng nhập phím q bằng hàm cv2.waitKey (). Mặt nạ 0xFF được sử dụng như một quy ước cho các máy tính 64 bit. Sau khi người dùng kết thúc luồng video, chức năng faceDetect sẽ giải phóng đối tượng chụp sau đó hủy mọi cửa sổ khác được mở trong giao diện OpenCV. Tất cả các chức năng khác tuân theo một cấu trúc thiết kế tương tự.

Bước 2: Chức năng BackgroundRemove

Chức năng BackgroundRemove
Chức năng BackgroundRemove
Chức năng BackgroundRemove
Chức năng BackgroundRemove

Chức năng này cố gắng xóa phần nền của video của chúng tôi và chỉ để lại hình ảnh nền trước. Nó có thể không hoạt động trên một số máy ảnh, vì chúng sử dụng chức năng điều chỉnh ánh sáng được kích hoạt khi các đối tượng / tiêu điểm khác nhau đi vào khung hình. Nếu chức năng backgroundRemove của bạn không hoạt động, đừng lo lắng - nó có thể chỉ là máy ảnh của bạn!

Để sử dụng chức năng này, hãy bước ra khỏi khung máy ảnh và nhấn phím "d" để chụp ảnh nền. Điều quan trọng là không có vật thể chuyển động nào ở hậu cảnh mà bạn muốn chụp. Sau đó, chúng ta có thể quay trở lại khung máy ảnh. Nếu chức năng hoạt động, người dùng sẽ chỉ nhìn thấy chính họ trên luồng video của chức năng. Bất kỳ nhiễu / đốm màu đen nào trong hình ảnh tiền cảnh có thể là kết quả của việc điều chỉnh ánh sáng của máy ảnh. Để chụp một phông nền khác, nhấn phím "r" để khởi tạo lại, sau đó nhấn lại "d".

Một số ưu điểm chính cho chức năng này là sử dụng boolean "cờ" được nâng lên ngay khi người dùng nhấn nút d. Thao tác này chụp nền và cho phép chúng tôi xóa nền đó khỏi video được chức năng phát trực tiếp. Mục đích của chúng tôi là lưu trữ hình ảnh nền trong ref_img để chúng tôi có thể phân biệt nó với hình ảnh tiền cảnh, nơi chụp bất kỳ đối tượng chuyển động nào. Chúng tôi sử dụng hàm cv2.subtract () để trừ hình ảnh mặt đất phía trước khỏi hình ảnh nền và ngược lại, sau đó loại bỏ bất kỳ sự khác biệt nhỏ nào trong hai hình ảnh ngay sau đó. Nền bị bôi đen.

Fgmask được tạo bằng cách sử dụng sự khác biệt giữa hai hình ảnh này và sau đó được áp dụng cho luồng video chức năng bằng cách sử dụng hàm OpenCV cv2.bitwise_and ().

Bước 3: Chức năng VideoEdges

Chức năng VideoEdges
Chức năng VideoEdges
Chức năng VideoEdges
Chức năng VideoEdges

Hàm này trả về luồng video trực tiếp của chúng tôi, nhưng các cạnh có thể phát hiện được hiển thị màu trắng trong khi mọi thứ khác bị bôi đen. Điều phân biệt chức năng này với các chức năng khác là việc chuyển đổi video gốc của chúng tôi từ định dạng RBG sang HSV, viết tắt của màu sắc, độ bão hòa và sự biến đổi - một phương pháp xử lý ánh sáng và màu sắc khác với video. Với phương pháp này, chúng ta có thể dễ dàng phân biệt các đường viền trong video bằng cách áp dụng bộ lọc (red_low thành red_high).

Canny Edge Detection được sử dụng để phát hiện các cạnh trong hình ảnh. Nó chấp nhận một hình ảnh tỷ lệ xám làm đầu vào và nó sử dụng một thuật toán nhiều tầng.

Bước 4: Chức năng VideoBlur

Chức năng VideoBlur
Chức năng VideoBlur
Chức năng VideoBlur
Chức năng VideoBlur

Chức năng này được sử dụng để thêm hiệu ứng làm mờ vào luồng video của chúng tôi. Hàm đơn giản gọi hàm GaussianBlur cv2 trên khung của chúng ta. Bạn có thể tìm thêm thông tin về hàm gaussianBlur tại đây:

opencv-python-tutroals.readthedocs.io/en/l…

Bước 5: Cải tiến

Chức năng nhạy cảm nhất trong dự án này là chức năng xóa phông nền, vì nó yêu cầu sử dụng máy ảnh không có chức năng điều chỉnh ánh sáng. Có thể có một bộ chức năng tốt hơn trong thư viện OpenCV có thể giải thích cho việc điều chỉnh ánh sáng này và xóa phông nền một cách suôn sẻ (tương tự như màn hình màu xanh lá cây).

Chúng tôi cũng có thể sử dụng các chức năng phát hiện khuôn mặt khác có thể tạo ra các đối tượng có nhiều chức năng hơn ngoài việc chỉ trả về tọa độ (x, y). Có lẽ một chương trình nhận dạng khuôn mặt với khả năng ghi nhớ khuôn mặt sẽ không quá khó để thực hiện.

Chức năng làm mờ có thể được tùy chỉnh nhiều hơn thông qua điều khiển trực quan của người dùng. Ví dụ: người dùng có thể muốn điều chỉnh cường độ của hiệu ứng làm mờ hoặc chọn một khu vực cụ thể trong khung để làm mờ.

Đề xuất: