Mục lục:

Đếm đối tượng Raspberry Pi: 5 bước
Đếm đối tượng Raspberry Pi: 5 bước

Video: Đếm đối tượng Raspberry Pi: 5 bước

Video: Đếm đối tượng Raspberry Pi: 5 bước
Video: Raspberry Pi 4: Hệ thống đếm và phân loại sản phẩm theo chiều cao 2024, Tháng mười một
Anonim
Đếm đối tượng Raspberry Pi
Đếm đối tượng Raspberry Pi

Không nghi ngờ gì nữa, thị giác máy tính là một điều tuyệt vời! Sử dụng tính năng này, máy tính có được khả năng "nhìn" và cảm nhận tốt hơn môi trường xung quanh, điều này cho phép phát triển các ứng dụng phức tạp, hữu ích và thú vị. Các ứng dụng như phát hiện và nhận dạng khuôn mặt, theo dõi đối tượng và phát hiện đối tượng ngày càng xuất hiện nhiều hơn trong các hoạt động hàng ngày của chúng ta, nhờ vào những tiến bộ về thị giác máy tính.

Xem xét mức độ nâng cao và dễ tiếp cận là các khung và công cụ thị giác máy tính, ứng dụng được mô tả trong bài viết này rất phù hợp: sử dụng Raspberry PI đơn giản và khung thị giác máy tính mã nguồn mở miễn phí được gọi là OpenCV để đếm các đối tượng đang chuyển động, chính xác hơn là bao nhiêu các đối tượng ra vào một vùng được giám sát nhất định.

Bước 1: Tìm hiểu sâu hơn: Làm thế nào có thể phát hiện chuyển động của đối tượng trong luồng hình ảnh?

Tìm hiểu sâu hơn: Làm thế nào có thể phát hiện chuyển động của đối tượng trong luồng hình ảnh?
Tìm hiểu sâu hơn: Làm thế nào có thể phát hiện chuyển động của đối tượng trong luồng hình ảnh?

Bây giờ đã đến lúc tìm hiểu sâu hơn về công cụ xử lý hình ảnh:

cách lấy một số hình ảnh trên luồng webcam và phát hiện có thứ gì đó đã di chuyển đến đó

Nó bao gồm năm bước:

Bước 1: Để đánh dấu đối tượng đang chuyển động

Như được định nghĩa trong vật lý cổ điển, một tham chiếu là cần thiết để suy đoán rằng một cái gì đó đang chuyển động hay nó đang đứng yên. Ở đây, để xác định có thứ gì đó đã di chuyển hay không, nó khá giống nhau: mỗi khung hình thu được một luồng webcam sẽ được so sánh với một khung tham chiếu. Nếu một cái gì đó khác, một cái gì đó đã được di chuyển. Nó đơn giản như nó âm thanh.

Hệ quy chiếu này phải được chụp trong điều kiện hoàn hảo nhất (chẳng hạn không có gì chuyển động). Trong thế giới xử lý hình ảnh, phép so sánh này giữa khung được chụp và khung tham chiếu bao gồm một kỹ thuật gọi là phép trừ nền. Phép trừ nền bao gồm việc trừ thông tin màu pixel-to-pixel ra khỏi khung đã chụp và khung tham chiếu. Vì vậy, hình ảnh kết quả từ quy trình này sẽ làm nổi bật / hiển thị với nhiều chi tiết hơn chỉ những gì khác biệt giữa hai khung này (hoặc, những gì đã di chuyển / có chuyển động) và mọi thứ khác sẽ có màu đen trong hình ảnh (màu của giá trị 0 trên màu xám -cale pixel). Quan trọng: điều kiện ánh sáng và chất lượng của hình ảnh webcam được chụp (do chất lượng cảm biến chụp) có thể khác nhau một chút giữa các khung hình. Nó ngụ ý rằng "các phần bằng nhau" từ hệ quy chiếu và các khung khác sẽ không có màu đen hoàn toàn sau khi trừ nền. Bất chấp hành vi này, không có hậu quả nghiêm trọng trong các bước xử lý hình ảnh tiếp theo trong dự án này.

Để giảm thiểu thời gian xử lý hình ảnh, trước khi thực hiện trừ hậu cảnh, khung đã chụp và khung tham chiếu được chuyển đổi thành hình ảnh tỷ lệ xám. Nhưng tại sao? Đó là một vấn đề về hiệu quả máy tính: một hình ảnh có nhiều màu sắc (hình ảnh màu) có ba thông tin trên mỗi pixel: Các thành phần màu Đỏ, Xanh lam và Xanh lục (tiêu chuẩn RGB cũ nhưng vàng). Vì vậy, về mặt vật chất, mỗi pixel có thể được định nghĩa là một mảng ba giá trị, mỗi một giá trị đại diện cho một thành phần màu. Do đó, mở rộng nó cho toàn bộ hình ảnh, hình ảnh cuối cùng sẽ thực sự là sự kết hợp của ba thành phần hình ảnh: Thành phần hình ảnh Đỏ, Xanh lam và Xanh lục.

Để xử lý nó, rất nhiều công việc được yêu cầu! Tuy nhiên, trong ảnh thang độ xám, mỗi pixel chỉ có một thông tin về màu sắc. Vì vậy, quá trình xử lý ảnh màu chậm hơn ba lần so với trường hợp ảnh thang xám (ít nhất ba lần, tùy thuộc vào kỹ thuật nào có liên quan). Và còn hơn thế nữa: đối với một số mục đích (như dự án này), xử lý tất cả các màu không cần thiết hoặc quan trọng. Do đó, chúng tôi đã đi đến kết luận: việc sử dụng hình ảnh thang xám rất được khuyến khích cho mục đích xử lý hình ảnh. Sau khi trừ nền, cần phải áp dụng bộ lọc Gaussian Blur.

Bộ lọc Gaussian Blur được áp dụng trên hình ảnh đã trừ hậu cảnh sẽ làm mịn tất cả các đường viền của đối tượng được phát hiện đang chuyển động. Chắc chắn, nó sẽ hữu ích trong các bước xử lý ảnh tiếp theo.

Bước 2: Binarization

Binarization
Binarization

Trong hầu hết các trường hợp xử lý ảnh, mã hóa nhị phân gần như là một bước bắt buộc sau khi đánh dấu các đối tượng / đặc điểm trong ảnh. Lý do: trong ảnh nhị phân, mỗi màu pixel chỉ có thể giả định hai giá trị: 0x00 (đen) hoặc 0xFF (trắng). Điều này giúp ích rất nhiều cho việc xử lý hình ảnh để đòi hỏi ít "sức mạnh tính toán" hơn để áp dụng các kỹ thuật xử lý hình ảnh trong các bước tiếp theo. Binarization có thể được thực hiện so sánh từng màu pixel của hình ảnh thang xám với một ngưỡng nhất định. Nếu giá trị của màu pixel lớn hơn ngưỡng, màu pixel này sẽ giả định giá trị trắng (0xFF) và nếu giá trị của màu pixel thấp hơn ngưỡng, màu pixel này sẽ giả định giá trị đen (0x00). Thật không may, sự lựa chọn của giá trị ngưỡng không dễ thực hiện như vậy. Nó phụ thuộc vào các yếu tố môi trường, chẳng hạn như điều kiện ánh sáng. Lựa chọn sai giá trị ngưỡng có thể làm hỏng tất cả các bước sau đó. Vì vậy, tôi thực sự khuyên bạn nên điều chỉnh theo cách thủ công một ngưỡng trong dự án cho trường hợp của bạn trước khi có bất kỳ hành động nào khác. Giá trị ngưỡng này phải đảm bảo rằng đối tượng chuyển động hiển thị dưới dạng ảnh nhị phân. Trong trường hợp của tôi, sau khi lựa chọn đủ ngưỡng, kết quả là những gì bạn thấy trong hình 5.

Hình 5 - hình ảnh nhị phân

Bước 3: Pha loãng

Cho đến nay, người ta có thể phát hiện các đối tượng chuyển động, làm nổi bật chúng và áp dụng mã hóa nhị phân, kết quả là tạo ra hình ảnh khá rõ ràng về đối tượng chuyển động (= hình ảnh khá rõ ràng của đối tượng cho mục đích xử lý ảnh). Việc chuẩn bị cho việc đếm đối tượng đã được ALMOST thực hiện. "ALMOST" ở đây có nghĩa là có một số điều chỉnh tốt cần thực hiện trước khi tiếp tục. Tại thời điểm này, có khả năng thực sự xuất hiện "lỗ" trên các đối tượng (khối lượng pixel màu đen vào đối tượng được đánh dấu màu trắng). Những lỗ này có thể là bất cứ thứ gì, từ điều kiện ánh sáng cụ thể đến một số phần của hình dạng vật thể. Một khi các lỗ có thể "tạo ra" các vật thể giả bên trong các vật thể thực (tùy thuộc vào độ lớn và vị trí của chúng), hậu quả của sự hiện diện của các lỗ trong hình ảnh có thể gây thảm họa cho việc đếm vật thể. Một cách để loại bỏ những lỗ hổng này là sử dụng một Kỹ thuật xử lý hình ảnh có tên là Dilate. Sử dụng cái này và lỗ sẽ biến mất.

Bước 4: Tìm kiếm các đường viền (và các trung tâm của nó)

Tìm kiếm các đường viền (và các trung tâm của nó)
Tìm kiếm các đường viền (và các trung tâm của nó)

Tại thời điểm này, chúng ta có các đối tượng được đánh dấu, không có lỗ bên trong nó và sẵn sàng cho những gì tiếp theo: tìm kiếm các đường bao (và các trọng tâm của nó). Có các tài nguyên trong OpenCV để tự động phát hiện các đường bao, nhưng các đường đếm được phát hiện phải được chọn một cách khôn ngoan (chỉ để chọn đối tượng thực hoặc các đối tượng). Vì vậy, tiêu chí để phát hiện các đường viền là diện tích của đối tượng, được đo bằng pixel². Nếu một đường bao có diện tích cao hơn giới hạn (được cấu hình trong phần mềm), thì nó phải được coi như một đối tượng thực cần được đếm. Việc lựa chọn giới hạn / tiêu chí khu vực này là rất quan trọng, và một lựa chọn tồi ở đây có nghĩa là đếm sai. Bạn phải thử một số giá trị giới hạn giá trị khu vực và kiểm tra xem điều gì phù hợp hơn với cách sử dụng của bạn. Đừng lo lắng, giới hạn này không quá khó để tìm / điều chỉnh. Sau khi tất cả các đối tượng trong hình ảnh được chọn, bước tiếp theo là vẽ một hình vẽ lại trên đó (hình vẽ lại này phải chứa toàn bộ đối tượng được phát hiện bên trong nó). Và tâm của hình chữ nhật này là…. trung tâm đối tượng! Có thể bạn đang nghĩ "Có chuyện gì lớn với centroid này?", Phải không? Đây là câu trả lời của bạn: không quan trọng độ lớn hay hình dạng của vật thể, chuyển động của nó là giống nhau của tâm. Nói cách khác: điểm đơn giản được gọi là tâm này đại diện cho tất cả các chuyển động của đối tượng. Nó làm cho việc đếm giờ trở nên rất đơn giản, phải không? Xem hình ảnh bên dưới (hình 6), trong đó tâm của đối tượng được biểu diễn dưới dạng một điểm đen.

Bước 5: Chuyển động của Centorid và Đếm đối tượng

Kết quả lớn: so sánh tọa độ trọng tâm của đối tượng với tọa độ đường vào và ra và áp dụng thuật số đếm được mô tả trước đó. Và sẽ có đếm các đối tượng chuyển động!

Kết quả cuối cùng Như đã trình bày ở phần đầu của bài đăng này, đây là dự án đang hoạt động:

Đề xuất: