Thuật toán đếm người đi bộ


12

Hiện tại tôi đang phát triển một dự án quầy dành cho người đi bộ (sử dụng OpenCV + QT trên Linux). Ý tưởng của tôi về cách tiếp cận là:

  1. Chụp khung
  2. Làm phép trừ nền
  3. tiếng ồn rõ ràng (xói mòn, giãn nở)
  4. tìm các đốm màu (cvBlobslib) - các đối tượng nền trước
  5. Đối với mỗi đốm màu, đặt ROI và tìm kiếm người đi bộ (LBP với DetMultiScale) trong các đốm màu này (để có hiệu suất tốt hơn)
  6. Đối với mỗi người đi bộ được tìm thấy, thực hiện tìm kiếm trên cơ thể lồng nhau (Không chắc chắn) (độ tin cậy tốt hơn)
  7. Nếu cùng một người đi bộ được tìm thấy trên các khung tiếp tục (có thể 3-4 khung) - hãy thêm khu vực đó vào dịch chuyển và theo dõi - đánh dấu là người đi bộ
  8. Loại trừ các khu vực theo dõi camshift khỏi phát hiện blob cho các khung tiếp theo
  9. Nếu người đi bộ vượt qua số tăng dòng

Tôi muốn kiểm tra nếu tôi đi đúng hướng. Bạn có bất cứ đề nghị về cách cải thiện phương pháp của tôi? Nếu ai đó làm việc về một cái gì đó tương tự, tôi sẽ đánh giá cao bất kỳ lời khuyên, tài nguyên (và phê bình) hữu ích nào về vấn đề này.


5
Bạn có thể muốn viết lại câu hỏi của bạn và bỏ qua các phần OpenCV. Cụm từ này giống như câu hỏi về khái niệm thực sự (Thuật toán để đếm và theo dõi người đi bộ).
Geerten

2
Cách tiếp cận của bạn nghe có vẻ hợp lý, bạn đã tìm kiếm các tài liệu học thuật có liên quan? Điều đó sẽ cho bạn một ý tưởng về tình trạng của nghệ thuật. Phép trừ nền có thể là khó khăn, hiệu ứng môi trường cũng như bóng tối có thể là một vấn đề.
geometrikal

Câu trả lời:


8

Tôi có thể thấy một số vấn đề có thể xảy ra với phương pháp này. Tôi nói từ kinh nghiệm của bản thân ở đây từ việc cải thiện hệ thống đếm người đi bộ với cách tiếp cận rất giống nhau, vì vậy tôi không có ý nản lòng. Ngược lại, tôi muốn cảnh báo bạn về những rào cản có thể bạn phải vượt qua để xây dựng một hệ thống chính xác và mạnh mẽ.

Thứ nhất, nền tảng giả định rằng các đối tượng quan tâm sẽ luôn chuyển động và các đối tượng bạn không quan tâm đến việc đếm sẽ hoàn toàn đứng yên. Chắc chắn, đây có thể là trường hợp trong kịch bản của bạn, nhưng nó vẫn là một giả định rất hạn chế. Tôi cũng đã tìm thấy chất nền rất nhạy cảm với những thay đổi trong chiếu sáng (tôi đồng ý với geometrikal).

Hãy cảnh giác khi đưa ra giả định rằng một blob = một người , ngay cả khi bạn nghĩ rằng môi trường của bạn được kiểm soát tốt. Nó xảy ra quá thường xuyên khi các đốm màu tương ứng với mọi người không bị phát hiện vì chúng không di chuyển hoặc chúng quá nhỏ, vì vậy chúng bị xóa do xói mòn hoặc bởi một số tiêu chí ngưỡng (và tin tôi, bạn không muốn vào " điều chỉnh ngưỡng cho đến khi mọi thứ hoạt động "bẫy. Nó không hoạt động;)). Nó cũng có thể xảy ra rằng một đốm màu tương ứng với hai người đi cùng nhau, hoặc một người mang theo một số hành lý. Hoặc một con chó. Vì vậy, đừng đưa ra những giả định thông minh về các đốm màu.

May mắn thay, vì bạn đã đề cập rằng bạn đang sử dụng LBP để phát hiện người , tôi nghĩ rằng bạn đang đi đúng hướng về việc không phạm sai lầm trong đoạn văn trên. Mặc dù vậy, tôi không thể nhận xét về hiệu quả của LBP. Tôi cũng đã đọc rằng HOG (biểu đồ độ dốc) là một trạng thái của phương pháp nghệ thuật trong phát hiện con người, xem Biểu đồ của độ dốc định hướng để phát hiện con người .

Gripe cuối cùng của tôi có liên quan đến việc sử dụng Camshift . Nó dựa trên biểu đồ màu, do đó, bản thân nó hoạt động độc đáo khi theo dõi một đối tượng dễ phân biệt bằng màu sắc, miễn là cửa sổ theo dõi đủ lớn và không có sự thay đổi hoặc thay đổi đột ngột. Nhưng ngay khi bạn phải theo dõi nhiều mục tiêu có thể có các mô tả màu rất giống nhau và chúng sẽ di chuyển rất gần nhau, bạn không thể làm gì nếu không có thuật toán cho phép bạn duy trì nhiều giả thuyết. Đây có thể là bộ lọc hạt hoặc khung như MCMCDA (Hiệp hội dữ liệu Monteov Chain Monte Carlo, xem Hiệp hội dữ liệu Monte Carlo chuỗi Markov để theo dõi nhiều mục tiêu). Kinh nghiệm của tôi khi sử dụng Meanshift một mình khi theo dõi nhiều đối tượng là tất cả những gì không nên xảy ra với theo dõi: mất dấu vết, mục tiêu khó hiểu, sửa lỗi trong nền, v.v. Đọc một chút về nhiều vấn đề theo dõi đối tượng và liên kết dữ liệu, điều này có thể nằm ở Rốt cuộc, việc đếm nhiều người (tôi nói "có thể là" vì mục tiêu của bạn là không theo dõi, vì vậy tôi không loại bỏ hoàn toàn khả năng của một cách tiếp cận thông minh nào đó mà không theo dõi ...)

Lời khuyên cuối cùng của tôi là: chỉ có rất nhiều thứ bạn có thể làm với một cách tiếp cận nhất định và bạn sẽ cần những thứ dễ thương hơn để đạt được hiệu suất tốt hơn (vì vậy tôi không đồng ý với user36624 về vấn đề này). Điều này có thể ngụ ý thay đổi một phần thuật toán của bạn bằng thứ gì đó mạnh hơn hoặc thay đổi hoàn toàn kiến ​​trúc. Tất nhiên, bạn phải biết những thứ ưa thích thực sự hữu ích cho bạn. Có những ấn phẩm cố gắng giải quyết vấn đề theo nguyên tắc, trong khi những ấn phẩm khác chỉ đơn giản là đưa ra thuật toán cho một tập dữ liệu nhất định và mong bạn huấn luyện một trình phân loại không thực sự phù hợp với vấn đề, trong khi yêu cầu bạn phải điều chỉnh một vài ngưỡng quá. Người đếm nghiên cứu đang diễn ra, vì vậy đừng hy vọng mọi thứ sẽ đến một cách dễ dàng. Hãy nỗ lực để học những thứ hơi vượt quá khả năng của bạn, và sau đó làm đi làm lại ...

Tôi thừa nhận rằng tôi đã không đưa ra bất kỳ giải pháp nào và thay vào đó chỉ chỉ ra những sai sót trong cách tiếp cận của bạn (tất cả đều xuất phát từ kinh nghiệm của riêng tôi). Để có cảm hứng, tôi khuyên bạn nên đọc một số nghiên cứu gần đây, ví dụ Theo dõi đa mục tiêu ổn định trong Video giám sát thời gian thực . Chúc may mắn!


9

Tôi nghĩ những gì bạn đang hỏi là về tính khả thi của thuật toán đi bộ của bạn.

Có hai chiến lược chung cho loại vấn đề này:

  1. (từ dưới lên trên) Hãy coi đó là một vấn đề phát hiện thuần túy, trong đó trong mỗi khung hình bạn chỉ phát hiện ra người đi bộ. Khi bạn phát hiện ra chúng, a) đếm số lượng của chúng trong một khung khá dễ dàng; và b) theo dõi bất kỳ trong số chúng trong các khung liên tiếp cũng dễ dàng. Do đó, bạn giải quyết mọi thứ.

  2. (từ trên xuống dưới) Hãy xem nó như một vấn đề nhận dạng hành động, trong đó bạn phát hiện liệu ROI trong các khung liên tiếp có phải là người đi bộ hay không theo hành động của nó. Khi bạn giải quyết vấn đề này, sau đó bạn giải quyết các vấn đề phát hiện và theo dõi đồng thời.

Thuật toán heuristic của bạn là trong thể loại đầu tiên. Tôi không muốn làm bạn nản lòng, nhưng bạn có thể bỏ lỡ điểm quan trọng là làm thế nào để phát hiện người đi bộ. Bởi vì dữ liệu thực có thể phức tạp hơn những gì bạn nghĩ. Ví dụ: nếu đây là máy ảnh tàu điện ngầm, có khung có thể đầy người đi bộ và do đó loại bỏ nền hoặc phát hiện các đốm màu hoàn toàn không giúp ích gì. Trong trường hợp này, có thể hợp lý hơn khi sử dụng thuật toán nhận diện khuôn mặt và nhận dạng khuôn mặt để giải quyết vấn đề, bởi vì nếu bạn tìm thấy khuôn mặt bạn sẽ tìm thấy người đi bộ. Mặt khác, tùy theo định nghĩa của bạn về người đi bộ, có thể đúng là không phải ai cũng xuất hiện trong khung nên được coi là người đi bộ. Trong trường hợp này, có thể hợp lý khi sử dụng thuật toán nhận dạng hành động (loại thứ hai), trong đó bạn có thể xác định rõ ràng người đi bộ dựa trên hành vi của người đó.

Dưới đây là một số lời khuyên dựa trên kinh nghiệm của tôi:

  1. Bám sát những gì bạn biết và những gì bạn có thể dễ dàng nhận. Donot đầu tư thời gian của bạn vào một cái gì đó là lạ mắt nhưng đòi hỏi nhiều nền tảng bạn không có. Tin tôi đi, tất cả các thuật toán này sẽ tốt trong một số trường hợp nhưng xấu ở một số khác. Do đó, điều đầu tiên là làm cho một cái gì đó hoạt động, bất kể nó tốt hay xấu.

  2. Biết thêm về dữ liệu của bạn và sau đó xác định phương pháp của bạn. Một mô tả chung về một vấn đề là không đủ trong nhiều trường hợp.

  3. Nếu bạn muốn thể hiện ý tưởng của mình, tốt hơn là sử dụng MATLAB và xây dựng một nguyên mẫu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.